2013-03-26 56 views
0

我們可以通過gdb中的十六進制值給出輸入字符串。例如,一個簡單的程序十六進制字符串作爲gdb中scanf的輸入

#include <stdio.h> 

int main() { 
    char buffer[20]; 
    fscanf(stdin, "%s", buffer); 
    printf("%s", buffer); 
} 

調試它:

[email protected]:~$ gdb -q ./a.out 
Reading symbols from /home/ravi/a.out...done. 
(gdb) list 1 
1 #include <stdio.h> 
2 
3 int main() { 
4  char buffer[20]; 
5  fscanf(stdin, "%s", buffer); 
6  printf("%s", buffer); 
7 } 
(gdb) r 
Starting program: /home/ravi/a.out 
\x41\x41\x41\x41 
\x41\x41\x41\x41 
Program exited with code 014. 
(gdb) quit 

我使用十六進制值\x41要輸入4 A的輸入,但它單獨考慮每個字符。

真正的需求是我正在玩基於堆棧的緩衝區溢出中的Shellcode,我需要在調試時以十六進制輸入shellcode。

有人可以幫我在這裏。

謝謝 拉維

回答

0

你似乎在期待GDB有這個功能,它應該理解C風格的輸入逸出,使被調試程序得到一個'A'當你輸入\x41

不幸的是,這不是它是如何工作的; gdb不在被調試的程序和終端之間。而終端不支持該功能,所以它不會工作。

0

您可以簡單地從套接字讀取而不是stdin,這使得在gdb中設置斷點並查看一個shell中發生的細節並在另一個shell中注入代碼非常容易!

,這只是一個例子你如何能注入十六進制到插座:

echo -e "`perl -e 'print "\x14\xee\xff\xbf"x10 . "\x90"x10'`" | nc 127.0.0.1 1337 

- 端口>印刷存儲器地址和NOP指令用Perl和管成NC到本地主機(或遠程系統) 1337在這種情況下。

這是解決你的問題,我認爲! 如果您需要通過套接字進行通信的幫助,我相信您會在stackoverflow上找到答案!

相關問題