python中的子进程:找不到文件

时间:2017-05-25 14:23:13

标签: python linux

我在python中遇到子进程问题:我的脚本打开一个ELF文件,该文件对ELF的同一目录中的文件执行fopen()。 如果我直接打开它(没有“找不到文件”错误)ELF工作正常,但是当从python脚本运行它时,它找不到该文件。 该脚本位于另一个目录中,代码为:

from pwn import *
from subprocess import *

proc = subprocess.Popen("/home/m876650/mission3/mission3",
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)

ret_addr = 0x00000000004007d8

print proc.stdout.readline()

payload = "A"*374 + p64(ret_addr)

proc.stdin.write(payload + '\n')

这是一个安全挑战,没有任何违法行为! 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

如果您的进程正在使用相对路径加载文件,那么它希望当前工作目录与脚本所在的位置相同。

您需要通过将正确的目录传递到cwd选项subprocess.Popen()来设置流程的当前工作目录:

proc = subprocess.Popen(
    ["/home/m876650/mission3/mission3"],
    cwd="/home/m876650/mission3",
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE)

请注意,Popen()的第一个参数是命令及其参数,因此您希望它是一个序列。