2016-08-08 5 views
0

Ich arbeite an einer Online-CTF-Herausforderung und ich muss irgendwie rohe Bytes zu diesem kompilierten C-Programm geben. Ich habe folgendes mit Python versucht:Wie rohe Bytes als Parameter für C-Programm geben

./program `python -c 'print "\x00\x00"'` 

... aber aus irgendeinem Grund, der nicht mir geben zu sein scheint, was ich erwarte. Gibt es einige Konvertierungen/Formatierungen, die mir nicht bewusst sind? Ich würde erwarten, dass dies rohe Bytes als Argument ergibt.

+0

Was meinst du "geben rohe Bytes"? Willst du sie als Befehlszeilenargumente übergeben? – stackptr

+0

Verwenden Sie stattdessen "" \ x01 \ x01 "'. Ich vermute, dass Sie zusammen mit der C-Bibliothek ein Array von N Bytes, die alle Null sind, mit einer leeren Zeichenfolge verwechseln. (Wenn Sie das tun, was ich denke, tun Sie: ja, das bedeutet, dass Ihr Shellcode keine Null Bytes enthalten kann.) – zwol

Antwort

1

Befehlszeilenargumente in C sind ein Array von 0 abgeschlossenen Strings. Es gibt keine Möglichkeit, "rohe Bytes" zu übergeben (jedes 0 Byte wird sich nicht wie erwartet verhalten).

Ich würde vorschlagen, übergeben entweder Lesen der Bytes von Stdin oder aus einer Datei in der Befehlszeile angegeben.

+0

Gibt es eine Möglichkeit, nicht druckbare ASCII-Zeichen obwohl? Das würde das Gleiche bewirken - für meinen Anwendungsfall. – 0x23hgww45

+0

Sie könnten sie in irgendeiner Weise kodieren (wie eine Reihe von 2-stelligen Hex-Werten übergeben) und sie in der C – John3136

+0

@ 0x23hgww45 dekodieren. Ja, es gibt, und Sie tun es bereits, solange diese Bytes nicht Null sind. – immibis

Verwandte Themen