一、介绍
SSRF,Server-Side Request Forgery,服务器请求伪造。攻击者通过漏洞应用等方式,伪造成服务器身份发起请求,一般会用于攻击内网等无法从外网访问的系统。
比如,内网中有一个服务仅对内网开放,你从外网没法访问。这是你拿下了一台映射至公网的内网服务器或是发现了一个SSRF漏洞,这个时候,你就可以以这台服务器作为跳板,在内网中进行进一步渗透。
前排踩坑提醒,如果环境是在虚拟机里搭建的,记得吧URL里的127.0.0.1换成对应的IP+端口喵~
二、SSRF(curl)
一步步点到诗歌的页面,可以看到URL中传入了一个参数。

页面中一眼看去,可以尝试的位置好像也之后这里了,既然题目叫curl,那么curl命令除了http协议,还支持什么协议呢?包括但不限于:
- HTTP/HTTPS
- FTP/FTPS
- SCP/SFTP
- TFTP
- LDAP/LDAPS
- DICT
- FILE
- IMAP/IMAPS
- POP3/POP3S
- SMTP/SMTPS
- RTSP
- Gopher/Gophers
- MQTT
通过替换url参数的内容,是可以进行任意文件读取的。
url=file:///C:/Windows/System32/drivers/etc/hosts

又或者,通过dict协议对内网中的其他服务的进行查询。
url=dict://192.168.52.131:80

三、SSRF(file_get_content)
第二关同样也来到诗歌页面,看到参数使用的是file,猜测传入的是个文件位置。当然题目也提到了file_get_content方法,那么它支持的协议包括但不限于:
- HTTP/HTTPS
- FTP/FTPS
- FILE
- PHAR
- DATA
- ZIP
这里拿HTTP和FILE举例。
file=http://www.baidu.com

file=C:/Windows/System32/drivers/etc/hosts

四、修复方式
因为攻击者的利用这个漏洞是主要用于内网横向渗透,所以可以针对这一点进行防护。
1.白名单:仅允许通过功能对指定的地址、路径进行请求。
2.黑名单:对向内网的私有地址的请求进行过滤拦截。
3.对响应包内容进行识别,确认没有敏感信息传回前端。
4.若非必要,禁用危险的协议,比如ftp、file、dict。
五、后记
锵锵!陆陆续续更新了一年总算把这个系列完结了,感觉可以直接拿来给后辈们当实验报告了(* ̄︶ ̄)。过程中最麻烦的还是各种报错,写完赶紧去第一章补一句遇到问题先看看是不是php版本的锅,毕竟也不算新的靶场了。
上岸甲方惹,最近在工作的时候渗透的机会越来越少,逐渐转向蓝队的方向了,经常一些日志分析的思路不大明确。だから,之后会逐渐开始更新防守思路的文章,请大家多多关照!^_^
Comments | NOTHING