8

最近コンピューターのセキュリティについて学んでいて、いくつかの問題に遭遇しました。

ファイルshellcodeでシェルコードを実行するために、オーバーフローする必要がある固定バッファを持つ関数が与えられました。関数は非常に単純です。

void vuln(char *str) {
    char buf[64];
    strcpy(buf, str);
    //function provided to display stack on command prompt
    dump_stack((void **) buf, 21, (void **) &str);
}

私の最初の推測では、関数の戻りアドレスeipを変更して、シェルコード ファイルにあるものを見つけて実行することでしたが、16 進値で表現できるファイルへのアドレスがないことに気付きました。リターンアドレスを操作する必要があると確信しているので、現在私が呼び出しているのは次のとおりです。

//the string is passed as a command line arg
./buffer_overflow_shellcode $(python -c "print 'A'*72 + '\x41\xd6\xff\xff' ")

私の出力は次のとおりです。

Stack dump:
0xffffd600: 0xffffd7fd (first argument)
0xffffd5fc: 0x08048653 (saved eip)
0xffffd5f8: 0xffffd641 (saved ebp)
0xffffd5f4: 0x41414141
0xffffd5f0: 0x41414141
0xffffd5ec: 0x41414141
0xffffd5e8: 0x41414141
0xffffd5e4: 0x41414141
0xffffd5e0: 0x41414141
0xffffd5dc: 0x41414141
0xffffd5d8: 0x41414141
0xffffd5d4: 0x41414141
0xffffd5d0: 0x41414141
0xffffd5cc: 0x41414141
0xffffd5c8: 0x41414141
0xffffd5c4: 0x41414141
0xffffd5c0: 0x41414141
0xffffd5bc: 0x41414141
0xffffd5b8: 0x41414141
0xffffd5b4: 0x41414141
0xffffd5b0: 0x41414141 (beginning of buffer)
Segmentation fault

pythonスクリプトは、edpのアドレスを追加のアドレスに置き換えてリターンアドレスに到達し、それを操作する準備ができた後、72文字のAを出力してバッファをedpおよびeipのポイントまでオーバーフローさせます。どんな助けでも本当に感謝しています、ありがとう!

4

4 に答える 4

18

たぶん、これはComputer Systems: A Programmer's Perspective のBuffer Overflow Lab のようなものだと思います。まず、objdump静的アドレスを取得するために使用します。次に、で実行してgdb、スタックのアドレスを見つけます。次に、リターンアドレスをバッファに上書きするような文字列でバッファを埋めます(悪用​​コードを入れることができるようにするか、プログラム内の他のコードを呼び出すことができます)。

このラボのガイドとして役立つこのpdfを確認してください。それはあなたにいくつかの洞察を提供するかもしれません。

指摘されているように、これを実現するには多くのコンパイル時フラグが必要です。(私はどちらをチェックして、すぐに戻ってきます)。または、この投稿では、そのような例をコンパイルする方法についてのガイドを提供します。

于 2013-05-04T01:56:55.127 に答える