2013-03-09 29 views
4

我有計劃,看起來像這樣:如何在linux bash中輸入ASCII碼「00」和「01」?

/* buf_overflow.c */ 
#include <stdio.h> 
int main(){ 
    char buf[4]; 
    char exploit_buf[4]; 
    fgets(buf, 4, stdin); 
    gets(exploit_buf); 
    printf("exploit_buf: %s\n", exploit_buf); 
    return 0; 
} 

我要使用的脆弱性「得到」功能,緩衝區溢出一些其他變量。我想寫入「exploit_buf」的值是「AAAAAAAA \ x01 \ x00 \ x00 \ x00 \ x00」,但我不知道如何將ASCII碼「01」和「00」發送到exploit_buf。

我知道使用這個命令「printf」AAAAAAAA \ x01 \ x00 \ x00 \ x00「x00」「可以輸入我想要的字符,但我不知道如何將它們發送到exploit_buf。我也知道Alt +(鍵盤右側的數字鍵)可以從我輸入的ASCII碼中生成字符,但是這在我的程序中也不起作用。

主要問題是「如何跳過第一個函數」fgets()「並在」gets()「中鍵入任意的ASCII代碼。

任何人都知道如何在Linux的命令行中輸入任意的ASCII碼?

回答

9

您可以使用echo -e

$ echo -ne 'AAAAAAAA\x01\x00\x00\x00' | python -c 'import sys; print repr(sys.stdin.read())' 
'AAAAAAAA\x01\x00\x00\x00' 

-e允許echo解釋轉義碼,並-n抑制拖尾換行符。

請注意,Python程序打印出它收到的字符串表示形式,這正是我們使用echo發送的內容。

對於更復雜的攻擊字符串,它的情況並不少見簡單地使用Perl或Python直接建立利用字符串:從nneonneo

$ perl -e 'print "A" x 1024 . "\0\0\0\1"' | ./buf_overflow 
0

很好的例子。

但是,如果您希望在沒有腳本幫助的情況下直接鍵入它們,您可以更改鍵盤配置以使用「USA International(AltGr dead keys)」模式(在系統 - >首選項 - >鍵盤 - >佈局下)那麼您可以使用正確的alt按鈕輕鬆使用特殊符號。示例 - éis rAlt + e。 °是rAlt-shift-0-0(在按住其他按鈕的同時按0兩次)。

5

在終端中輸入以下命令。

echo $'\000\001' > file1 

這會將ASCII字符1和ASCII字符2的值保存到名爲file1的文件中。現在,您可以將其讀入緩衝區exploit_buf。

+0

但這個方案將與fgets(),然後再得到(),我怎麼能跳過第一個函數「fgets()」? – Brian 2013-03-09 07:18:17

+0

[Bash的ANSI-C引用](http://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting)也可以理解其他轉義序列,比如'\ xHH'。 – Gumbo 2013-03-09 08:51:08

0

因爲它只是從標準輸入得到輸入,你可以管你printf的輸出到它:

printf 'whatever' | myprogram 
相關問題