2016-12-07 55 views
0

所以,在python中,當我嘗試執行下面的代碼時。TypeError:execv()arg 2只能包含字符串

from subprocess import * 
args = "A"*99 

args = list(args) 
args[ord('A')] = "\x00" 
args[ord('B')] = "\x20\x0a\x0d" 
proc= Popen(["./input2"]+args,stdin=PIPE,stderr=STDOUT) 

我得到

TypeError: execv() arg 2 must contain only strings

所以我做了一些研究和認識,如果在Popen()任意整數格式的參數,它會給我的錯誤。但我不知道哪個參數可能是一個整數。

FYI:如果我註釋掉

args[ord('A')] = "\x00" 
args[ord('B')] = "\x20\x0a\x0d" 

這個代碼,錯誤不會出現在所有。

  • 程序輸入2是用c寫的,它將簡單地把輸入和比較值 - argv ['A'] - 如果爲真,程序將打印第一階段清除。
+0

你想做什麼?你爲什麼試圖將這些奇怪的命令行參數傳遞給'。/ input2'?如果'input2'是你寫的東西,你爲什麼寫它將這些東西當作命令行參數? – user2357112

+0

你不能在一個程序的參數中放置一個空字節('「\ x00」')。 – user2357112

+0

這是CTF問題上pwnable.kr –

回答

2

這是爲註釋更合適,但我沒有足夠的代表呢。我正在經歷這個挑戰並面臨確切的問題。原來你可以簡單地做一個args[ord('A')] = ""來避免這個錯誤。

0

Popen的論證可能不包含NUL字符\x00

比如這個作品:

Popen(["/bin/echo", "Hello"]) 

但這並不:

Popen(["/bin/echo", "Hello\x00"]) 
+0

hmmmmmm那麼是否有任何替代功能爲Popen? –

+0

Popen使用低級c函數'execv'來運行程序。 'execv'參數是字符串,c字符串以NUL char結尾,所以afaik沒有辦法使用Popen或任何類似的函數發送NUL char作爲參數的一部分。 –

+0

hmmmm gotcha ty for answer –