2011-03-13 47 views
5

我期待在Windows的命令提示符下輸入一些字符串輸入到一個小型的C程序。在bash我可以用命令提示符相當於Bash'printf'嗎?

$ printf "AAAAA\x86\x08\x04\xed" | ./program 

從本質上講,我需要的東西,以逃避在命令提示符下的十六進制數。

是否有在命令提示/的powershell爲printf等效或類似的命令?

感謝

+1

爲什麼這個標記爲exploit ...? – Lekensteyn 2011-03-13 14:46:09

+0

@Lekensteyn:看看轉義字節。這很容易想象,這可能是一些代碼。 – 0xC0000022L 2011-03-13 14:52:39

+0

因爲它正在利用我需要的緩衝區溢出漏洞。經常利用它們的人可能會知道答案...... – 2011-03-13 14:52:50

回答

7

在PowerShell中,你會做這種方式:

"AAAAA{0}{1}{2}{3}" -f 0x86,0x08,0x04,0xed | ./program 
+0

'\ x08'確實是bash中字符8的轉義,所以後面的例子是正確的。 – Joey 2011-03-13 15:11:09

+0

是的,想想第二個例子就是我在找的東西。感謝Keith和Joey! – 2011-03-13 15:29:13

2

我最近提出了同樣的問題,我自己和決定,有人開發Windows利用了這是值得安裝了cygwin :)

否則,一個人可以建立一個小的C程序模仿printf的功能:

#include <string.h> 

int main(int argc, char *argv[]) 
{ 
    int i; 
    char tmp[3]; 

    tmp[2] = '\0'; 

    if (argc > 1) { 
     for (i = 2; i < strlen(argv[1]); i += 4) { 
      strncpy(tmp, argv[1]+i, 2); 
      printf("%c", (char)strtol(tmp, NULL, 16)); 
     } 
    } 
    else { 
     printf("USAGE: printf.exe SHELLCODE\n"); 
     return 1; 
    } 

    return 0; 
} 

該程序只處理「\ xAB \ xCD」字符串,但如果需要的話,將其擴展爲處理「AAAAA \ xAB \ xCD」字符串應該不會有困難。