Py学习  »  Python

从Python子进程运行C程序与在Bash中运行C程序时的不同结果

remission-jitters-delay • 3 年前 • 1042 次点击  

我有一个字符串/参数要传递给C程序。这是一个字符串格式的漏洞。

'\xb2\x33\02\x08%13x%2$n' 

然而,如果我通过执行以下操作从Python调用C程序,似乎会表现出不同的行为

subprocess.Popen(["env", "-i", "./practice", '\xb2\x33\02\x08%13x%2$n'])

./practice '\xb2\x33\02\x08%13x%2$n'

不同之处在于,通过子流程调用脚本时,字符串利用攻击的效果与预期一致,但在我通过CLI调用脚本时则不然。

原因可能是什么?谢谢

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129399
 
1042 次点击  
文章 [ 1 ]  |  最新文章 3 年前
tshiono
Reply   •   1 楼
tshiono    3 年前

Bash manpage说:

对$'string'形式的单词进行了特殊处理。这个词扩展到 字符串,并按照 ANSI C标准。反斜杠转义序列(如果存在)将被解码 如下:[剪下]
\xHH 值为十六进制的八位字符 值HH(一个或两个十六进制数字)

那么请你试试:

./practice $'\xb2\x33\02\x08%13x%2$n'