查看原文
其他

记某hw中通过佛站技巧拿下标靶的全过程

远海 赛博回忆录 2023-03-02
0x00 开场白
大家好我是教育安全守护神远海。
前段时间,某“带佬” 急匆匆的发我两个站点,为某地区hw的靶标。既然是“带佬”,那么肯定得给这位“带佬”面子。简单看了看两个站点,都是ASPX站点。对于.NET所开发的站点,在下可以说是经验老道(自吹一波,实则菜b)。
这里只描述其中一个站点的渗透过程。另一个站点已经被"带佬"发布至先知社区。
地址: https://xz.aliyun.com/t/8541 

0x01 初步尝试

目标站点大致如下:

主页只有一个登录框。没有其他功能(找回密码,注册用户)等。

对于这类系统,开局肯定是跑一波弱口令。

熟悉的开局。。。但是这里根据请求包发现了某处敏感信息。XXCMS.config??

既然是CMS,那么可以根据github等相关网站查找其敏感信息。

根据相关信息,找到了某博主所发的一个文章,证明此系统内部功能是存在SQL注入漏洞的。这也使我更有把握拿下这个系统。

但是文章并没有写明POC。那么只好自己动手了,确定了该系统由XX公司开发且处于闭源状态。且上图暗示大概率是存在弱口令的。


那么整理一下情况:

  1. 目标完全黑盒且无法从其他端口突破
  2. 无常规弱口令,卡在登录授权页面
  3. 网上的资料显示目标为某闭源CMS且大概率不限制密码复杂度或存在默认账户
  4. 网上公开的漏洞需要授权登录且未公开poc

目前的情况来看,当前标靶在没有可以登录的账户的前提下基本上是卡住了,但由于是某CMS,所以自然而然的要祭出FOFA工程师的绝活了。

作为一个FOFA工程师这个时候一般的工作流程如下:


我们希望通过这个流程从相似站点获取的东西有三个:

  1. 可能的授权凭证来通过登录页面
  2. 常规的getshell方法
  3. 该cms的源代码,用于白盒审计,通常是辅助实现上述两个目的


古有旁站手法,今现佛站技巧


下面是给出的两篇佛站技巧的参考文章:

  1. https://xz.aliyun.com/t/8375 (本人所写)
  2. https://xz.aliyun.com/t/7786


0x02 佛站之旅

根据ICO图标查询,找到了一个俄罗斯站点。

从文件结构来看,确实是使用的相同系统。那么开始测试。

由于主页只有登录,还是先尝试了爆破弱口令账户的方法。

最终,成功得到一个弱口令账户:user  123456

但是这里需要注意的是。根据返回包来看。目标系统并未采用Session的机制来校验账户信息。而是采用了获取Cookie中的某个值(可能是加密的)来确认当前账户。

如果挖掘出了需要登录的漏洞,那么迂回至目标系统时,可以尝试通过Cookie来伪造身份信息,这种伪造可以通过得知加密算法后自行构造,也可以通过复制cookie的形式来碰运气。

通常加密cookie值的话会加密类似于 `userid=1|roleid=1` 的字符串,因此如果运气好的话即使两个系统的账户名不一样但是其userid是一样的话,加密串也可能是可以复用的。


本以为得到了账户就可以直接开始测试了,但是登录过后的功能点几乎没有。

除了修改密码和退出登录。就没有其他可以测试的功能呢。。。这就非常头疼。

一顿摸索后,在Burp的history 页面中发现了一处敏感AJAX请求

该接口文件返回了部分路径地址,那么可以直接访问这些路径进一步测试。

最终在某处发现了一处文件上传功能。

初步测试,确定存在为任意文件上传。

但返回包里并没有附带文件的路径。但是当我再次尝试上传时,系统弹出了一个提示"File name already exists, please re-upload" = "文件名已存在,请重新上传"

那么可以很明确的确定。上传的文件并没有进行重命名的操作。尝试进行../跨目录

跨了4个目录,成功跳到根目录。

那么这就是一个CMS的通用漏洞。现在就可以直接使用该POC迂回到目标系统了。

但是目标系统得到的返回结果确是204

这里不知道是不是未登录的问题。想起刚刚测试的时候可以根据Cookie来伪造用户信息。将俄罗斯站点用户的Cookie复制了一份过来。再次上传

GG。还是204.那么可以说明这里存在用户效验了


0x03 白盒校准

既然没办法上传,又不想搞SQL(麻烦)。干脆直接在俄罗斯站点上打了一个shell。尝试将代码下载下来审计。

追踪到刚刚可以上传shell的位置。

这里就可以直接看出,后端是获取Cookie中的某键取值来进行判断的。

当UserID和RoleID都为空时,返回204(也就是目标靶标所返回的值)

第40,41行可以看出,UserID和RoleID时进行过加密的,这里进行了解密操作。

 this.UserID = CommonFunction.DESDec(this.UserID); this.RoleID = CommonFunction.DESDec(this.RoleID);

这里追踪过去,得到加解密的方法

由于后端会将UserID进行判断,是否存在该用户。那么只需要刚俄罗斯站点上的UserId的值解密出来,根据其结构在目标站点上Fuzz一下就可以了。

UserID=Uhe4q0dwPJk=

解密结果为2

之所以在目标标靶上显示204可能是没有2这个用户。应该是有id为1的账户的

那么只需要将 1 加密一下就可以了:

34dc0AHJKqA=

替换加密值尝试在目标站点上传。

成功拿下靶标


0x04 总结

一次很常规的hw测试,并没有太多可圈可点之处,还请各位看官海涵。

这边建议大家平时多积累一些系统的源码,这样在遇到有源码的标靶时候,就不陷入纯黑盒测试的窘境,真的每次都是现佛现打其实还是挺难的。


本期投稿文章的嘉宾为远海,欢迎大家多多喷他




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存