2015년 10월 13일 화요일

쉘코드 만들기 ( /bin/sh )

/bin/sh를 실행 시켜주는 쉘코드 만들기





여기서 system("/bin/sh")로 해결하지 않은 이유는 , printf 함수와 마찬가지로 system함수 또한 execve함수를 내부적으로 수행하기 때문에 execve() 를 이용하여 쉘코드를 작성하였다.



-static 옵션을 통하여 execve함수 내부까지 어셈블리어를 더 자세히 볼 수 있다.

gdb를 통하여 main 부분을 확인하면 아래와 같다.



| 0x804840c | eax | 0x0 | dummy(4) | 0x804840c | 0x0 | sfp | ret |



다음 execve 함수 부분을 disassemble 해보자.


핵심 부분을 정리하면 아래와 같이 정리가 가능하다.

edi = 0x804840c
ecx = [ebp-8] 주소
edx = 0x0
ebx = edi = 0x804840c
eax = 0xb

참조하여 쉘코드를 작성


컴파일은 아래와 같은 과정으로 진행하면 된다.
as -o execve1.obj execve.s                       // 어셈블리파일 obj 파일 생성
gcc -o execve1 execve1.obj                      //obj파일을 실행파일로 만듬
./execve1                                             //실행







objdump를 사용하여 dump한다(-d옵션)
그럼 아래와 같은 메인 부분을 확인 할 수 있다.



shellcode : \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x62\x89\xe3\x50\x53\x89\xe1
\x89\xc2\xb0\x0b\xcd\x80



댓글 없음:

댓글 쓰기