从访客到拿下内网域控

前言

一次企业开放式红蓝演练,从外网探索到拿下内网域控的过程,整理了一些过程。

正文

1、开始根据提供的公司名称,到处收集了一些域名整合到一个表里面,在筛选查找登录、管理、vpn等特殊的资产时,找到一个更特殊些的存在,SRC平台。就感觉比较难搞了,估计到处都被白帽子光顾过了。

img

2、找到一个vpn资产,但是访问服务出错。后面在测其他资产的时候发现有waf拦截,探测fastjson、SQL注入啥的直接就拦截了。

img

3、继续收集的时候,使用公司名称在微信搜索小程序,找到访客预约小程序,对小程序抓包获取到域名,发现小程序管理后台。使用邮箱登录且存在验证码。

imgimg

4、根据这个访客管理后台登录页面的html特征,在fofa上搜索了一下,发现有不少相关的资产,找到几个应该更老的版本,可以用前台用户名密码登录,有的没有验证码。

imgimg

5、想着看能不能在这几个老版本找到些未授权的接口,尤其是上传接口,就花了点时间测了一下:

试了几个系统在其中一个弱口令密码进去了,发现了SQL注入、垂直越权,但都是在登录后才能利用。垂直越权访问应该是用户管理接口,返回了创建用户的信息,明文密码也被带出来了,发现创建的用户都是统一用一个邮箱用户创建的,这个邮箱后缀发现跟这个访客产品公司的域名一样,猜测这个访客系统存在默认账户:test@test.com,而且根据这个带出的明文密码频率最高的密码,猜测可能是默认密码:test123

imgimg

6、带着猜测的test@test.com/test123的默认账号去我的目标访客系统尝试登录,成功登录这个访客预约的后台。

img

7、进入后台,分别找到了很重要的两个信息,部分企业员工部门、工号信息,部分应该是内网办公地址ip。

imgimg

8、后面对这个管理后台没有发现命令执行、上传漏洞的地方,因为知道有waf,发现的SQL注入都没有过度花时间去利用。

9、在收集到的资产下载到了企业办公应用ios、安卓版本,工号已经有了,但是没有密码。App随便测试登录抓包看了下,果不其然被加密了,后面对这个app hook了一下,使用动态解密算法工具发现是aes加密

imgimg

10、返回去在那个访客管理后台查看组织架构,发现很多测试账号,猜测可能开发这个系统测试生成的,或者本来就是这个企业有的一些测试账号。

img

11、使用这些测试手机号和这个访客管理后台的默认密码去登录app,发现密码错误,但是确认了可以登录。测试直接使用123456作为密码,有1个测试手机号码成功登录。

img

12、进入app后,对个人信息头像上传的功能进行抓包测试,发现可以修改上传文件名后缀,但是上传时会对图片强制进行裁剪,不会原图等比大小上传,且上传进行imgBase64加密

imgimg

13、经过多次测试上传发现几个问题:

1,imgBase64上传是以json格式传递,但base64编码之后的数据为二进制,需要用ascii解码之后才可以放入json中
2,不能直接将webshell代码直接imgBase64编码后放到数据包上传,直接报错,会对上传内容检测图片属性
3,不能将合成的jsp图片马通过上传页面上传,裁剪过后图片马损失原来的字节,即造成图片马不完整

14、所以在本地生成一张字节内容很小的png文件,和一个含有打印代码<%out.println("i am sircong");%>的jsp文件,(因为第一次这样上传,不清楚是否可行,所以不直接上传webs hell,先上传print代码看看有没有执行的可能)。

img

15、将该两个文件通过cmd命令生成一张jsp图片马1.png,用Notepad++打开可以看到jsp代码追加到图片内容里面去了。

imgimg

16、使用python写一个imgBase64加密脚本,直接本地对合成的图片马1.png进行imgBase64加密,将生成加密信息在数据包替换内容上传,修改后缀名为jsp,成功上传返回地址。

imgimg

17、访问上传的伪jsp图片马,发现代码成功执行打印输出i am sircong,说明当前上传“图片马“的方式可行。

img

18、再次cmd生成一个含有哥斯拉webshell的jsp图片马imgBase64加密处理上传,得到存储路径。

imgimg

19、使用哥斯拉连接,成功连接获取服务器root权限。

img

20、至此进入内网,利用这台服务器使用nps+Proxifier Socks5代理到本地,ping一下在访客后台发现的的登录内网ip,成功ping通,说明后台记录的ip确实可能是办公网ip。

img

21、因为我对进入办公网后有扫描公开共享文件的习惯,对访客后台发现的ip段,扫描了一下,有几个共享文件夹,但是没有权限访问。

img

22、因为我的最大的目标的就是域控,但是现在我没有一台域内windows机器,也没一个域内用户的账号和密码,扫描了发现的IP段,看看有没有向日葵没有更新版本的,但是没有发现一台。后来在访客管理后台看到的组织架构上找了几个行政的工号和姓名在app搜了一下,可以搜到打开聊天,就用个测试账号伪装成it支持人员,发了一份假的报告和一个向日葵RCE版本给他们,因为那个app聊天页面有很密的公司水印,打码之后简直不能看,这里用微信聊天还原一下。

imgimg

23、发软件给他好一会儿没反应,搞得我很急,因为我登录app是用得一个测试账号,名字是testtest1234,还以为这个公司大几千人他刚好和it支持的人同一个办公区,他去找人求证了。等了快10多分钟左右,他才回复说安装好了给我连接码远程到他桌面,后面装模做样调出cmd搞,这边又赶紧扫描的他的IP,确认端口,执行远程命令修改了他电脑administrator的密码。

img

24、等到了大概吃饭午休时间,用administrator登录电脑,目标是在他看浏览器有没有保存密码,本地有没有什么记录的密码的文件。在Google获取了保存的密码外,在他桌面文件夹找到了一个常用网址.txt,获取到了几个其他员工的账号。

imgimg

25、不过更重要的是在他桌面文件夹发现了一个会议室投屏表格,里面记录了好几个会议室投屏电脑IP地址及登录名密码!

img

26、有了员工账密,尝试去登录那个app,不出意外的需要短信验证。

img

27、因为后面在拿一些系统目标的时候,有的需要这个app扫码登录,有的需要绑定手机号码登录,这里先说下对这个app后台的超管的获取,和手机号码绑定问题。

28、后面在横移到员工的电脑上,发现都有一个工作台平台,这个上面可以更改绑定手机号码,但是更改的时候会进行旧手机验证。

img

29、后面测试验证的时候不获取手机验证码随便输入数字然后抓包,在返回包中将参数row的值改为1即可绕过这步验证,输入自己的号码获取验证码进行绑定。

imgimg

30、后面发现这样想要用一个员工的账号扫码的时候都要这样操作一下,太麻烦了,就试着找到app的管理后台,获取到超管权限应该有权限去改所有员工的手机号码。

31、后面拿到域控后搜索特定人员电脑登录,得到了地址和一个普通管理员权限,使用工号密码+验证码登录,抓包发现返回包有个token,但是是加密的,在前端搜索token发现使用aes加密,并且发现密钥和向量。

imgimg

32、但是用这个密钥和向量根本解不开这个token,后来因为想起这个app登录的时候也是使用的aes加密,用这个app登录时hook得到aes密钥和向量可以解开token,解密发现token加密信息为:系统用户userid:时间戳:系统用户名(工号):其他:其他。

imgimg

33、登录后在页面点击头像遍历userid可以得到所有管理员信息,得到超管userid:72769,超管用户名为:superAdmin,构造超管token,,替换相关userid,当前时间戳,系统名称进行加密,用伪造的token在登录抓包替换返 回包的token,成功获取超管权限,后台添加了一个超管权限进行权限维持。

imgimgimg

34、至此拿到了app后台超管权限,可以对所有员工更改手机号码,解决后面在一些重要系统扫码验证的问题。

35、再回来继续讲拿域控的过程,因为我已经拿到了几个员工账密,和几台pc端权限。

36、为了后续目标部门特定员工用户定位搜索,同时对域内环境分析提供打下域控的可能,先对域内使用SharpHound进行数据采集,传出来导进到BloodHound,发现域用户快上万个了。

imgimg

37、执行命令知道当前域控主机。

img

38、因为我一开始选定打域控的方式就是证书模板漏洞(主要傻瓜式操作,适合我这种脚本小子),使用得到的员工账号和密码,用Certipy探测了一下,发现vuln的只有一个esc8证书。

img

39、在已有权限的办公pc上执行certutil -config - -ping 查看证书,知道了证书名称、证书服务器。

img

40、直接ping证书服务器计算机名,得到ip地址,然后使用IP地址构造证书web服务地址http://127.0.0.1/certsrv/certfnsh.asp,发现证书服务web地址确实可以访问,而且访问不是403禁止访问。

imgimg

41、同时,在BloodHound上检索了一下Certificate Service服务,发现存在Certificate Service服务,也就是也可能可以用机器账户申请域控的机器证书获取域控权限(CVE-2022-26923)。

img

42、有两个获取域控权限可能,想着我都是碰运气,先试了机器账户申请证书的漏洞,从简单的开始搞。使用工具bloodyAD先查看下ms-DS-MachineAccountQuota属性,看到结果为100000,只要大于0就可以创建机器账户。

img

43、之后再使用工具Certipy添加一个机器账户,并将它的dns改为与域控机器相同。

img

44、用创建的机器账户hacker1$去申请机器证书,成功申请到证书。

img

45、再去验证证书是否有效,成功获取到哈希。

img

46、通过 impacket 套件中的 secretsdump.py 使用该票据,并执行 DCSync 来转储域用户哈希,成功获取到域控机器administrator的hash。

img

47、使用获取到的域控 Administrator 用户的票据,通过 wmiexec.py 获取到域控制器的最高权限。

img

48、机器没有开放3389端口,执行命令开启远程桌面,登录至域控机器。

img

49、至此,就拿到了域控权限,权限维持的过程跳过,再说一下后面一个让我震惊的发现。

50、后面在域内搜索一些权限比较大的用户时,找到一个运维工程师。

img

51、在他电脑上发现一个文件夹,里面有一个域相关运维脚本,打开浏览这个脚本代码发现他们给域用户加域的时候会直接给电脑本地administrator的密码设置成一个很简单的弱口令:公司名@123. ,顿时在想会不会域内所有员工电脑administrator的密码都是这个。

imgimg

52、后面为了验证一下这个猜想,就写了脚本跑了几个不同ip段的员工办公ip,直接使用administrator/公司名@123.登录rdp测试一下,发现跑的十多个ip都成功了,这不是全员密码裸奔。

img

53、至此,域控,员工通用密码,手机app扫码验证都搞定了,利用这些不断在内网扩展,拿到想要的目标。