web-dev-qa-db-ja.com

バッファオーバーフロー-「hello world」を出力

「hello world」をコンソールに出力するだけのシェルコードはどうなるのだろう。脆弱性をテストするとき、エクスプロイトが機能するかどうかをテストするためのシェルコードがあると非常に便利だと思います。

さらに、Cからシェルコードを使用可能な形式(たとえば、バックスラッシュ+ 16進文字)でコンパイルする方法についての簡単な説明は、ペイロードに対して実行するシェルコードを簡単に生成できるように、すばらしいでしょう。

主な質問に関係なく、役立つ情報は大歓迎です!

3
Aaron Esau

シェルコードをすばやくダーティにしたい場合は、msfvenomを使用します。何かを学び、ウィザードになりたい場合は、次のことをお勧めします。

1。ご使用のプラットフォーム用の小さなアセンブラプログラムを記述します。

NULLバイトが生成されないようにコーディングする必要があることがわかります。これは、XORおよびその他のトリックをクリエイティブに使用することで実現できます。

;hello.asm
[SECTION .text]

global _start


_start:

    jmp short ender

    starter:

    xor eax, eax    ;clean up the registers
    xor ebx, ebx
    xor edx, edx
    xor ecx, ecx

    mov al, 4       ;syscall write
    mov bl, 1       ;stdout is 1
    pop ecx         ;get the address of the string from the stack
    mov dl, 5       ;length of the string
    int 0x80

    xor eax, eax
    mov al, 1       ;exit the shellcode
    xor ebx,ebx
    int 0x80

    ender:
    call starter    ;put the address of the string on the stack
    db 'hello'

2。objdumpを使用して、命令のオペコードを取得します:

hello:     file format elf32-i386


Disassembly of section .text:

08048080 <_start>:
 8048080:       eb 19                   jmp    804809b

08048082 <starter>:
 8048082:       31 c0                   xor    %eax,%eax
 8048084:       31 db                   xor    %ebx,%ebx
 8048086:       31 d2                   xor    %edx,%edx
 8048088:       31 c9                   xor    %ecx,%ecx
 804808a:       b0 04                   mov    $0x4,%al
 804808c:       b3 01                   mov    $0x1,%bl
 804808e:       59                      pop    %ecx
 804808f:       b2 05                   mov    $0x5,%dl
 8048091:       cd 80                   int    $0x80
 8048093:       31 c0                   xor    %eax,%eax
 8048095:       b0 01                   mov    $0x1,%al
 8048097:       31 db                   xor    %ebx,%ebx
 8048099:       cd 80                   int    $0x80

0804809b <ender>:
 804809b:       e8 e2 ff ff ff          call   8048082 
 80480a0:       68 65 6c 6c 6f          Push   $0x6f6c6c65

。シェルコードは次のようになります:

char code[] = "\xeb\x19\x31\xc0\x31\xdb\x31\xd2\x31\xc9\xb0\x04\xb3\x01\x59\xb2\x05\xcd"\
              "\x80\x31\xc0\xb0\x01\x31\xdb\xcd\x80\xe8\xe2\xff\xff\xff\x68\x65\x6c\x6c\x6f";

4。利益

4
AdHominem

それはターゲットプラットフォームに依存しますが、人生を少し楽にするために、さまざまなタイプのペイロードを生成できるMetasploitのMSFvenomツールを検討することをお勧めします。 Offensive Securityのチュートリアルを参照してください

1
Colin Cassidy