Как правильно захватить вывод процесса с помощью pwntools - PullRequest
0 голосов
/ 19 марта 2020

В настоящее время я запутался в том, как использовать библиотеку pwntools для python3 для использования программ - в основном, для отправки входных данных в уязвимую программу. Это мой текущий сценарий 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;
}

Процесс открыт нормально. sendlineafter блокирует, пока не отправит строку, и поэтому, если она не совпадает, она ждет бесконечно. Тем не менее, он работает нормально, и поэтому вход должен быть отправлен. output должен получить 90 A от recvLine из-за того, что

puts(buffer) выводит введенную строку.

Однако все, что возвращается, это b'', что, похоже, указывает на то, что уязвимая программа не ' t получает ввод и возвращает пустую строку.

Кто-нибудь знает, что вызвало это?

...