-4

プログラムの 16 進バージョン、たとえば Linux では、プログラムは次の形式で記述されます。

char esp[] __attribute__ ((section(“.text”))) /* e.s.p
release */
= “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68″
 ...........
 ......
 .....
“\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69″
“\x6e\x2f\x73\x68\x00\x2d\x63\x00″
“cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;”;

誰かが上記のコードが何をするのか説明してもらえますか?

4

1 に答える 1

4

リンクしたものは通常、シェルコードと呼ばれます

これは、コンピュータが実行できる命令を表す未加工のバイトであり、通常、バッファ オーバーフロー攻撃などのさまざまな攻撃でペイロードとして使用されます。

それがどのように生産されるかについてのあなたの質問に答えます:

アセンブリで次のコードを検討してください。

[SECTION .text]
global _start
_start:
        xor eax, eax       ;exit is syscall 1
        mov al, 1       ;exit is syscall 1
        xor ebx,ebx     ;zero out ebx
        int 0x80

組み立てるとこうなります。

Disassembly of section .text:

08048080 <_start>:
 8048080:       b0 01                   mov    $0x1,%al
 8048082:       31 db                   xor    %ebx,%ebx
 8048084:       cd 80                   int    $0x80

必要なバイトはb0, 01, 31, db, cd 80です。これで、次のように簡単に使用できます。

char shellcode[] = "\xb0\x01\x31\xdb\xcd\x80";

ソース
別のソース

于 2013-08-25T11:39:23.710 に答える