SSRF常用的四种协议

  • A+
所属分类:安全文章
0x00 前言
最近在项目中遇到了ssrf漏洞,并探测到了目标机器上监听127.0.0.1的redis。尝试用ssrf打了一波,虽然最后因权限问题没能成功利用,但也学会了很多新东西,在这里给大家分享一下。

0x01 ssrf简介
SSRF(Server-side Request Forge, 服务端请求伪造):是利用一个可以发起网络请求的服务,当作跳板来攻击内网的其他服务的漏洞。类型可分为有回显和无回显两种。

漏洞产生原因:服务端提供从其他服务器应用获取数据的功能,却没有对地址和协议做过滤,导致可利用此功能攻击服务端本机或所在内网。

漏洞危害:探测内网信息、攻击内网应用

常见场景:云服务商操作数据库、远程图片加载、网站采集抓取、头像、让你输入网址和ip的地方、webmail收发其他邮箱邮件、转码服务、在线翻译、收藏功能等。

漏洞利用常用协议:filehttp(s)、dict、gopher

0x02 file协议研究
使用file协议进行的任意文件读取算是ssrf最简单的利用方式了

首先先写一段有ssrf漏洞的代码,命名为ssrf.php并部署到服务器上。
SSRF常用的四种协议

用file协议简单测试一下,可以看到能成功利用ssrf漏洞读取文件。file协议的格式为:file://文件路径
SSRF常用的四种协议


0x03 http协议研究
http协议的利用也很简单,就是向目标发送http请求,由于get请求的参数是直接加在url里的,所以可以探测内网那些使用get请求即可攻击的应用。
SSRF常用的四种协议

使用nc可以接收到发送的http数据包,结构非常简单。
SSRF常用的四种协议
SSRF常用的四种协议

0x04 dict协议研究
用nc在测试机监听,然后利用ssrf漏洞测试一下dict协议发送字符串info,看看接收方会收到什么:
SSRF常用的四种协议

SSRF常用的四种协议

可以看到一共收到了三行数据,第一行是版本号,第二行是我们发送的数据,第三行是自动添加的QUIT。

dict协议不支持换行符,没有办法进行换行,相当于一次只能执行一条命令,所以不能用来攻击那些需要交互的应用(比如需要认证的redis)。
SSRF常用的四种协议

0x05 gopher协议研究
需要发送多行数据时,就要用到gopher协议,同样使用nc简单测试一下,可以看到接收端成功接收到了换行的数据,所以gopher协议可以用来攻击那些需要交互的应用。
SSRF常用的四种协议
SSRF常用的四种协议

测试过程就不全放出来了,这里直接贴我得到的结论:
1、gopher协议会吃掉第一个字符,所以要先放一个没有用的字符
2、回车是rn,但如果直接对rn进行url编码结果是不对的,因为编码的是 r n四个字符的结果,实际回车只是两个不可见的字符,url编码为%0d%0a
3、直接发%可以正常接收,但是发%0d%0a就会出现数据包发不出去的问题,还需要进行一次url编码成%250d%250a才能正常发送出去(直接用curl命令测试没这个问题,应该是web服务器会自动进行一次url解码导致的)


0x06 未完成的工作
1、在gopher协议的研究中发现%0d%0a会影响ssrf漏洞的正常利用,于是想到会不会有其他特殊符号同样会影响ssrf,url编码能否绕过。如果在实战中遇到的ssrf漏洞利用需要使用特殊符号,最好先在本地测试一下。

2、本文由小黑在实战中遇到了ssrf和内网redis引起,那具体对redis的利用有哪些坑,比如说如何构造符合redis接收格式的数据,如何绕过?符号引起的截断。

3、ssrf中的http协议一般只能构造get请求,但是gopher协议实质上可以用来构造任意格式的请求,所以能不能使用gopher协议构造post请求去攻击内网的应用呢?

4、ssrf常见的防御手段及其bypass方法。

0x07 后记

SSRF常用的四种协议

VX公众号:《小黑的安全笔记》

最近小黑的工作和生活都很忙,所以才留下了那么多未完成的工作,以后会慢慢填坑的。

细心的读者可能发现小黑上周没有更新了,因为立过flag,这里补发一下红包:去支付宝搜索红包,输入红包口令:“ 小黑的安全笔记 ”即可领取。100元红包共50个先到先得~

为了减少对大家的打扰,以后小黑的拖更红包不会和以前一样单独推送了,而是会像现在这样附加在下一周的文章里,大家可以关注一下。

啊好忙好累啊,不多说啦,大家晚安。

END.


喵,点个赞再走吧~

本文始发于微信公众号(小黑的安全笔记):SSRF常用的四种协议

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: