社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

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

我有一个字符串/参数要传递给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
 
961 次点击  
文章 [ 1 ]  |  最新文章 3 年前
tshiono
Reply   •   1 楼
tshiono    3 年前

Bash manpage说:

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

那么请你试试:

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