记一次对某企业的渗透测试实战

2018-06-21 22:25:38 82 20490 12

本人原创,首发自:https://bbs.ichunqiu.com/thread-41946-1-1.html

前言

本文总结一下漫长的渗透测试过程,想尽了各种方法,终于找到了突破口。so没有绝对的安全,所谓的安全性其实都是相对的~

信息踩点

在这里其实没办法去做一些有价值的收集,只能踩点,踩坑。

信息难点:

传输加密:

要做渗透的目标是一个APP,根据抓到的请求包发现这个APP是经过某产品加固过的,所以HTTP的POST请求正文部分(Data)是神奇的密文~

分析难点

分析:

  • 信息踩点其实也是解决难点的过程,在这里我们尝试对APP进行逆向,发现并没有什么东西,因为被加固了。
  • 对APP进行功能的整理,逐个功能点进行抓包分析:
    • 请求正文(data)虽然是密文,但是请求的URI还是真正按照对应的功能去请求的(参考URI的命名和功能的相对应性)

建立设想(A):

在这里请教了师傅,说可能GET请求参数并没有经过加密,而后台很有可能是这样写的:

<?php
$mstsec = $_REQUEST['vulkey'];//注意这里使用的是$_REQUEST 默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。
?>
  • 一点即通,首先我可以去测试是否是真的这样的后端处理接收。
  • 为了满足第一步的验证,我需要想办法找到一个GET请求的包并且有带有GET参数,这样我才能判断规则,不然就是大海捞针。

有价值的东西

其实对APP做渗透测试,大部分情况下还是对网站做渗透测试。

所以在这里抓包获取到的HOST,直接对其进行了前期的常规信息刺探(端口、目录、指纹...)

中间件:Tomcat

目录开放:/fileUpload/

端口开放:8001 1444

APP三个功能点:个人用户、资金管理、生活栏目

渗透开端

一开始粗略的对整个APP进行抓包,然后做一些简单的测试,发现并没有那种明面上的漏洞(SQL注入、XSS等等...),但是获取了这几条URI:

  1. /userCenter/getUser [获取用户信息URI POST]
  2. /userCenter/pay/getSign?userSign= [获取Sign POST]
  3. /userCenter/life/showShop?pId= [获取商品信息 GET]
  4. /userCenter/showQRcode [获取二维码图片 POST]

不小心日偏

仔细的对每个功能点进行测试的时候,抓到了一些"逃出加固命运"的明文报文。

  • 发现了S2-005这个历史悠久的Struts2框架远程代码执行问题:

执行了whoami

  • 发现了SQL注入,这里需要做一些简单的绕过(e.g. AandND 1 like 1):

然而没看清楚,一下次给日错地方了...很尴尬。

关联分析

日偏后我分析了一下两者的特征,发现应该出子同一个程序员之手,并且这个程序员很喜欢使用驼峰命名法...

验证设想(A)

在这里我尝试根据每个URI功能点生成GET请求参数的dict:

  • /userCenter/getUser [获取用户信息URI POST]

    dict: [uId, userId, uName, userName ...]

  • /userCenter/showQRcode [获取二维码图片 POST]

    dict: [uId, userId, uName, userName, imagePath, filePath, codePath, fileName ...]

生成请求:

GET /userCenter/getUser?uId=10001
GET /userCenter/getUser?userId=10001
GET /userCenter/getUser?uName=test001
GET /userCenter/getUser?userName=test001
...
GET /userCenter/showQRcode?uId=10001
GET /userCenter/showQRcode?userId=10001
GET /userCenter/showQRcode?uName=test001
GET /userCenter/showQRcode?userName=test001
GET /userCenter/showQRcode?imagePath=../../index.do
GET /userCenter/showQRcode?filePath=../../index.do
GET /userCenter/showQRcode?codePath=../../index.do
GET /userCenter/showQRcode?fileName=../../index.do
...

结论

现实残酷,打败了设想。

绝处逢生

就在想放弃的时候,决定打算"垂死挣扎"一下,重新开始"审视"了各个功能模块,眼光又转到了这个二维码地方。(因为二维码的"皮相",所以很多人都会忽略它)

这里我去解析了二维码的地址:

失算...失算...,当去访问这个地址的时候,响应报文中会多出这样的头:

...
Set-Cookie: USESSIONPID=xxx;
...

jpg content

这时候我就知道是时候修改uId了,然而修改了没用,根据多年的经验(吹牛)我认为是uSign参数起了作用,这时候对uSign进行删除发现不行,会提示uSign参数不存在,当我置空这个参数,发现居然成功了又返回了用户的Cookie凭证...好吧,说明这里有一个逻辑问题...

到这下去就很简单了,获取管理员权限有上传点,测试使用jhtml的后缀可以直接绕过上传,但是上传上去之后,直接访问就给你download下来了(很多次遇到这种问题...)

好吧,管理员也没啥能危害到服务器的东西了...不过回过头再来看看,二维码这个点还没啃完呢,fileName这个参数还没去测试,fuzzdb了解一下,先怼lfi的字典进去跑(有个坑这里一定要填写完整[uId, uSign]),然后再进行Fuzz:

intruder模块(BurpSuite)的测试结果发现这里是可以读取文件的,并且判断这个web服务是root权限运行的因为我修改fileName参数的值为../../../etc/shadow时我直接可以获取到文件的内容,从而获取root账号权限的密码:

(解密不了),怎么通过这个本地文件读取漏洞拿到shell?我的思路是通过读取tomcat的密码配置文件然后进入tomcat的Web管理部署war包进行getwebshell,但是这里做了一圈的目录猜解,死活没找到tomcat的应用目录...

读取/root/.bash_history啊(这个文件是记录root用户输入过的命令-老师傅提醒到),突然间我茅塞顿开,是啊,一般运维人员会通过命令行进行管理,那么肯定会有目录出现啊。

我修改fileName参数的值为../../../root/.bash_history,搜索下关键词tomcat就发现了:

成功的发现了root用户的命令历史并且找到了Tomat的应用安装路径,那么我只需要修改fileName的参数值为../../../../home/apache-tomcat-7.0.67/conf/tomcat-users.xml,直接就可以读取到Tomcat的管理员账号权限,从而直接通过外部访问的形式进入Tomcat的管理界面进行控制。

登录进来之后直接到WAR file to deploy功能点,进行war包的部署(在这里使用压缩的方式将网站后门压缩成zip格式然后修改后缀名.zip为.war即可),点击Browser选择war包然后点击Deploy:

这里部署上去之后回到Applications功能点,可以看到部署的情况,点击你的命名链接然后加上你压缩的文件名(这里我的是 /vulkey/vulkey.jsp)使用Webshell管理工具进行管理,看见了我久违的界面,久违的root权限:

总结

因为后渗透可能会影响正常业务的运行,所以没有继续进行下去,很遗憾,希望下次有机会。 END: 送给大家一句话:心细则挖天下。

关于作者

mstkey36篇文章404篇回复

信息安全爱好者

评论82次

要评论?请先  登录  或  注册
  • TOP1
    2018-8-11 22:15

    filename读tomcat敏感的运气+程序员写法的经验+撸二维码的细心

  • 62楼
    2018-6-25 15:54

    ../../../root/.bash_history这个好评

  • 61楼
    2018-6-25 15:52

    为啥还有不用云防护的服务器

  • 60楼
    2018-6-25 15:22

    jhtml被下载下来,应该是服务器没有配置解析这个后缀? uSign测试步骤:删除、置空学到了。 其实看到fileName就想冲上去测任意文件下载了。 来来来,各位大佬一起讨论下,给你一个Linux/Windows的任意文件下载,都有哪些获得xi统权限的思路。 1.(文中的)读中间件管理口令,利用中间件部署拿shell 2.读/etc/shadow破解密码直连 3.读数据库连接串,如果数据库可以外连那么利用数据库getshell 4.读Web源码,审计拿shell 暂时想到这些,大佬们一起来讨论啊

  • 59楼
    2018-6-25 12:59

    作为初学者来说,看到一个又一个的参数作用,真的是头很痛,但是整篇文章写的很详细,可以从中学到很多思路和手法,文中知识点很多,基本是一边baidu,一边看完的。

  • 58楼
    2018-6-25 12:35

    厉害啊!!!组合拳,学xi到了,谢谢

  • 57楼
    2018-6-25 11:34

    tomcat能直接登录部署的很少见 -。-

  • 56楼
    2018-6-25 11:33

    有没有日偏部分更详细的说明。。

  • 55楼
    2018-6-25 11:06

    精彩!!!感谢分享经验及思路。赞一个

  • 54楼
    2018-6-25 10:32

    基本功很扎实,膜拜一下。。

  • 53楼
    2018-6-25 10:20

    运气是真的好 碰到好多tomcat 控制台都把用户注释掉了

  • 52楼
    2018-6-25 09:09
    Firedli

    是uid设置为admin,然后usign设置为空之后,就登陆成功,然后也返回用户cookie的意思吗。

    1

    uId为1 其他的就是你说的~

  • 51楼
    2018-6-25 00:43

    是uid设置为admin,然后usign设置为空之后,就登陆成功,然后也返回用户cookie的意思吗。

  • 50楼
    2018-6-24 22:28

    平时积累多重要呀,lfi的fuzzdb 思路是解题关键

  • 49楼
    2018-6-24 10:09

    大神就是大神,心细+技术

  • 48楼
    2018-6-24 00:22
    shamo

    看得挺仔细,感觉学到挺多新姿势跟组合拳的,楼主的业务跟我们的业务有点像。。能不能请楼主简单分享下平时分析APP的思路跟做法?

    1
    mstkey

    Android killer反 然后分析.. 我也不太会 基本上用来搜索接口看看怎么调用的

    2

    我也不会逆向跟安卓代码。。只能找那些APP 分析网站和丢进apk ide搜搜有没有url

  • 47楼
    2018-6-23 23:46

    lz的这个和我现在遇到的情况很相似啊,各种信息收集,有注入,有文件读取。注入权限有限,用户数据不在当前库,文件读取限制了目录。停滞不前。

  • 46楼
    2018-6-23 22:58
    shamo

    看得挺仔细,感觉学到挺多新姿势跟组合拳的,楼主的业务跟我们的业务有点像。。能不能请楼主简单分享下平时分析APP的思路跟做法?

    1

    Android killer反 然后分析.. 我也不太会 基本上用来搜索接口看看怎么调用的

  • 45楼
    2018-6-23 22:55

    看得挺仔细,感觉学到挺多新姿势跟组合拳的,楼主的业务跟我们的业务有点像。。 能不能请楼主简单分享下平时分析APP的思路跟做法?

  • 44楼
    2018-6-23 17:19
    cAt_Fl4g

    所以key师傅是没有对APP进行逆向仅对报文进行刺探?

    1

    做了混淆处理 加上自己很菜 就没有去深入了

  • 43楼
    2018-6-23 17:14

    很厉害 ,学到很多小姿势 , 不过最主要的突破点 不是签名那里吗。。。