簡體   English   中英

黑客挑戰 - 定位代碼中的漏洞

[英]Hacking Challenge - locating vulnerability in the code

我的朋友最近完成了一次黑客攻擊並將其發送給我(二進制和源代碼)。 我之前想問他提示,因為我想自己做:)

我一直在經歷它,但我正在努力找到這個漏洞。

#include <alloca.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

static void usage(const char *argv0) {
    printf("Build your own string!\n");
    printf("\n");
    printf("Usage:\n");
    printf("  %s length command...\n", argv0);
    printf("\n");
    printf("Each command consist of a single character followed by it's index.\n");
    printf("\n");
    printf("Example:\n");
    printf("  %s 11 h0 e1 l2 l3 o4 w6 o7 r8 l9 d10\n", argv0);
    exit(1);
}

int main(int argc, char **argv) {
    char *buffer;
    unsigned short buffersize, i, index, length;

    if (argc < 2) usage(argv[0]);

    length = atoi(argv[1]);
    if (length <= 0) {
            fprintf(stderr, "bad length\n");
            return 1;
    }

    buffersize = length + 1;
    buffer = alloca(buffersize);
    memset(buffer, ' ', buffersize);
    buffer[buffersize - 1] = 0;

    for (i = 2; i < argc; i++) {
            if (strlen(argv[i]) < 2) {
                    fprintf(stderr, "bad command \"%s\"\n", argv[i]);
                    return 1;
            }

            index = atoi(argv[i] + 1);
            if (index >= length) {
                    fprintf(stderr, "bad index in command \"%s\"\n", argv[i]);
                    return 1;
            }

            buffer[index] = argv[i][0];
    }

    printf("%s\n", buffer);
    return 0;
}

我認為漏洞在於short int,以及alloca的使用。

輸入./app 65535 65535可能會導致段錯誤,但我實際上無法覆蓋任何內容,因為緩沖區只會被設置為最大65535或循環。 這讓我覺得我無法覆蓋EIP來注入shellcode。

任何人都可以幫我看看哪里?

謝謝!

實際上,漏洞在於您可以在使用alloca分配的緩沖區中的任何偏移處存儲字符,但測試是在length而不是size 傳遞65535a1參數會調用未定義的行為: size為值0因為unsigned short有16位,因為算術回繞。

您可以嘗試傳遞65535的第一個參數和后續參數以及增加的偏移量,這將使值超出buffer的末尾,可能會覆蓋main的返回地址並導致崩潰:

myprog 65535 a3 a7 a15 a19 a23 a27 a31 a35 a39 a43 a47 a51 a55 a59 a63 ...

根據實際的局部變量布局,所需的偏移量可能大於17 ,但應小於80

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM