【发布时间】:2020-12-11 04:57:44
【问题描述】:
我正在研究 C (Linux) 中的缓冲区溢出利用。 利用的目标是以 root 身份运行 shell。
所以我的策略是这样的。
- 猜测目标地址。
- 使用#1 的目标地址运行易受攻击的程序。 (由 fork-exec 运行)
- 检查程序是否被利用。 (是否执行shell)
- 循环直到满足 #3。
我的问题发生在#3。
如何检查子进程是否成功执行shell?
或者,我如何知道子进程是否正在等待键盘输入?
这是我的代码。
/*
GUESS TARGET_ADDRESS
*/
if(fork()==0){
execl("./vulnerableProgram", "./vulnerableProgram", "exploitInput.txt", NULL);
}
int check = CHECK_IF_CHILD_PROCESS_RUNS_SHELL() // <- here is my question
if(check) {
printf("%s\n", TARGET_ADDRESS);
break;
}
当子进程利用失败时,子进程的状态如下。
- 分段错误
- 非法指令
- 正常退出(由于漏洞利用代码中的NULL字符不会发生溢出)
【问题讨论】:
-
How can I know if child process is waiting for keyboard input- 试试strace,很可能你的程序在read()系统调用中被阻塞了
标签: c linux fork child-process buffer-overflow