我有這個可利用的小檔案:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
// gcc -z execstack -z norelro -fno-stack-protector -o format0 format0.c
int target;
void vuln(char *string)
{
printf(string);
if (target){
printf("Tyes yes eys");
}
}
int main(int argc, char **argv)
{
vuln(argv[1]);
return 0;
}
很簡單,我是這樣編譯的:
gcc file.c -o file -no-pie
然后我像這樣運行它讓它泄漏一些值:
./file %x
38b3fda8
哪個作業得很好。但我想使用 python 自動化一點。所以我嘗試以下方法:
$ ./form &(python -c "print('%x'*3)")
[1] 30633
%x%x%x
[1] Done ./form
這看起來非常奇怪。首先,沒有觸發字串格式錯誤。然后它會列印出它自己的名字和其他一些隨機的東西。我也嘗試在 gdb 中執行此操作,結果相同。
如何像其他在線教程一樣使用 python 提供輸入?
uj5u.com熱心網友回復:
我想你的意思是:
./form $(python -c "print('%x'*3)")
什么./form &(python -c "print('%x'*3)")
是:
/form &
(python -c "print('%x'*3)")
即表單在后臺運行。(程序 30633)在您的示例中。Python 在子 shell 的前臺運行。(并將 %x%x%x 列印到您的終端)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/442963.html
上一篇:如何使結構指向前一個陣列值
下一篇:c中的二進制加法與字符陣列
