目前,我很困惑如何使用python3的pwntools库来利用程序--主要是将输入发送到易受攻击的程序中。这是我当前的python脚本。
from pwn import *
def executeVuln():
vulnBin = process("./buf2", stdin=PIPE, stdout=PIPE)
vulnBin.sendlineafter(': ','A'*90)
output = vulnBin.recvline(timeout=5)
print(output)
executeVuln()下面是我试图利用的程序--这不是关于如何利用程序,而是更多地介绍如何使用脚本来正确地自动化它。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#define BUFSIZE 176
#define FLAGSIZE 64
void flag(unsigned int arg1, unsigned int arg2) {
char buf[FLAGSIZE];
FILE *f = fopen("flag.txt","r");
if (f == NULL) {
printf("Flag File is Missing. Problem is Misconfigured, please contact an Admin if you are running this on the shell server.\n");
exit(0);
}
fgets(buf,FLAGSIZE,f);
if (arg1 != 0xDEADBEEF)
return;
if (arg2 != 0xC0DED00D)
return;
printf(buf);
}
void vuln(){
char buf[BUFSIZE];
gets(buf);
puts(buf);
}
int main(int argc, char **argv){
setvbuf(stdout, NULL, _IONBF, 0);
gid_t gid = getegid();
setresgid(gid, gid, gid);
puts("Please enter your string: ");
vuln();
return 0;
}这个过程开得很好。发送后块,直到发送行,因此,如果不匹配,它将无限期地等待。但是,它运行良好,因此应该发送输入。输出应从recvLine获得90A,原因是
puts(buffer)输出输入字符串。
然而,返回的所有内容都是b'',它似乎表明易受攻击的程序没有接收到输入并返回空字符串。
有人知道是什么导致的吗?
发布于 2021-10-20 04:14:21
使用上面的程序,我得到了print(output)作为b'\n' (而不是b''),这是对它的解释。
puts()语句在末尾输出一个newline字符,而不是由sendlineafter()调用读取,这将导致下面的recvline()打印b'\n'读取偏离的newline字符。
为什么newline字符不是由sendlineafter()读取的?因为sendlineafter()只是recvuntil()和sendline()的组合,recvuntil()只在delimiter之后读取字符。(pwntools文档)
因此,解决方案是用下面的sendlineafter()读取换行符(或者通过调用recvline()两次),
from pwn import *
def executeVuln():
vulnBin = process("./buf2", stdin=PIPE, stdout=PIPE)
vulnBin.sendlineafter(b': \n',b'A'*90)
output = vulnBin.recvline(timeout=5)
print(output)
executeVuln()输出:
[+] Starting local process './buf2': pid 3493
[*] Process './buf2' stopped with exit code 0 (pid 3493)
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n'注意:--我在sendlineafter()中以字节的形式添加了字符串,以删除下面的BytesWarning。
program.py:5: BytesWarning: Text is not bytes; assuming ASCII, no guarantees. See https://docs.pwntools.com/#bytes
vulnBin.sendlineafter(': \n','A'*90)https://stackoverflow.com/questions/60747839
复制相似问题