1

こんにちは、について学んでいBuffer Overflowます。理解を深めるために、何が起こっているかを確認する小さなコードを 1 つ書きましたが、何も問題はありませんでした。

char shellcode[] =
        "\xeb\x2a\x5e\x89\x76\x08\xc6\x46\x07\x00\xc7\x46\x0c\x00\x00\x00"
        "\x00\xb8\x0b\x00\x00\x00\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80"
        "\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xe8\xd1\xff\xff"
        "\xff\x2f\x62\x69\x6e\x2f\x73\x68\x00\x89\xec\x5d\xc3";

void main()
{
   int *ret;

   ret = (int *)&ret + 2;
   (*ret) = (int)shellcode;
}

そして出力:

[krishna]$ gcc -o testsc testsc.c
[krishna]$ ./testsc
$ exit
[krishna]$

なぜexitですか?プログラムの実行中に内部で何が起こっているかを確認できる他の方法。

私のアプローチが十分でない場合、他に何を試すことができますか?

4

5 に答える 5

0

内部で何が起こっているかをデバッグおよび理解するために gdb を使用できます。

      gcc -g -o testsc testsc.c

      gdb testsc

      (gdb)break main
      (gdb)print ret
      (gdb)print *ret

コードを段階的に実行します。

一方、readelf/objdump を使用して、逆アセンブルされたコードを表示できます。別のターミナルで、objdump -xsd testsc

そして、SSpoke で言及されているように変換シェル コードを使用して、シェル コードがアセンブリでどのように見えるかを確認します。

を使用してアセンブラコードも見てください

          gcc -S testsc.c
于 2013-08-14T10:17:49.797 に答える
0

これが質問に答えないことは知っていますが、シェルコードが何をするかを知ることができます

あなたの最善の策は、ollydbg や IDA PRO のような逆アセンブラーでテスト プログラムを実行し、行ごとにブレークポイントを実行して、それが正確に何をするかを確認することです。

シェルコードをアセンブリとして表示する ConvertShellcode 2.0 を使用しました。

ConvertShellcode.exe へのリンクをダウンロードhttp://www.mediafire.com/?rnnqjdyv0nbency

使用法。

ConvertShellcode.exe \xeb\x2a\x5e\x89\x76\x08\xc6\x46\x07\x00\xc7\x46\x0c\x00\x00\x00\x00\xb8\x0b\x00\x00\x00\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xe8\xd1\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x00\x89\xec\x5d\xc3


ConvertShellcode 2.0
Copyright (C) 2009 Alain Rioux.  All rights reserved.

Assembly language source code :
***************************************
00000000  jmp 0x2c
00000002  pop esi
00000003  mov dword[esi+0x8],esi
00000006  mov byte[esi+0x7],0x0
0000000a  mov dword[esi+0xc],0x0
00000011  mov eax,0xb
00000016  mov ebx,esi
00000018  lea ecx,[esi+0x8]
0000001b  lea edx,[esi+0xc]
0000001e  int 0x80
00000020  mov eax,0x1
00000025  mov ebx,0x0
0000002a  int 0x80
0000002c  call 0x2
00000031  das
00000032  bound ebp,qword[ecx+0x6e]
00000035  das
00000036  jae 0xa0
于 2013-08-14T06:20:10.663 に答える
-2

バッファオーバーフロー?

char a[8];
strcpy(a, "0123456789");
于 2013-08-14T06:03:26.727 に答える