2017-05-25 5 views
0

Ich habe ein Problem mit Unterprozessen in Python: mein Skript öffnet eine ELF-Datei, die eine fopen() für eine Datei im selben Verzeichnis der ELF ausführt. Die ELF funktioniert gut, wenn ich es direkt öffne (keine "Datei nicht gefunden" -Fehler), aber wenn es aus dem Python-Skript ausgeführt wird, kann es die Datei nicht finden. Das Skript ist in einem anderen Verzeichnis und der Code ist dies:Subprozess in Python: Datei nicht gefunden

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') 

Es ist für eine sicherheitspolitische Herausforderung ist, nichts illegal! Danke für die Hilfe!

+1

Haben Sie darüber nachgedacht, das aktuelle Arbeitsverzeichnis festzulegen? –

+0

Was meinst du mit _wenn ich es direkt öffne_? Ist das in einer normalen Shell (z. B. Bash) oder Datei-Explorer, oder Sie meinen aus mit z. mit 'offen'? – jdehesa

+0

Ich meine, wenn ich es von einer normalen Shell öffne, funktioniert es gut –

Antwort

0

Wenn Ihr Prozess die Datei mit einem relativen Pfad lädt, erwartet er, dass das aktuelle Arbeitsverzeichnis mit dem Verzeichnis identisch ist, in dem sich Ihr Skript befindet.

Sie benötigen das aktuelle Arbeitsverzeichnis für den Prozess einzustellen, indem Sie auf die cwd Option im richtigen Verzeichnis vorbei zu subprocess.Popen():

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

Beachten Sie, dass das erste Argument Popen() ist der Befehl und seine Argumente, so wollen Sie, dass eine Sequenz sein.