我有一個字串/引數,我想傳遞給 C 程式。這是一個字串格式漏洞。
'\xb2\x33\02\x08x%2$n'
但是,如果我通過執行從 Python 呼叫 C 程式,似乎會表現出不同的行為
subprocess.Popen(["env", "-i", "./practice", '\xb2\x33\02\x08x%2$n'])
相對
./practice '\xb2\x33\02\x08x%2$n'
不同之處在于字串利用攻擊在通過子行程呼叫腳本時按預期作業,但當我通過 CLI 呼叫它時則不然。
可能是什么原因?謝謝。
uj5u.com熱心網友回復:
Bash手冊頁說:
$'string' 形式的單詞被特殊處理。該單詞擴展為字串,并按照 ANSI C 標準的規定替換反斜杠轉義字符。反斜杠轉義序列(如果存在)按如下方式解碼: [snipped]
\xHH 八位字符,其值為十六進制值 HH(一個或兩個十六進制數字)
那你試試:
./practice $'\xb2\x33\02\x08x%2$n'
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/447755.html
上一篇:Bash回圈遍歷檔案末尾
