본문 바로가기
Wargame/The Lord of the BOF

LOB - 01 gremlin - (2.1)쉘코드 작성

by morae23 2019. 2. 1.
vi shell.s
# sudo apt-get install nasm
nasm -f elf32 shell.s 
ld -m elf_i386 -o shell shell.o


지금 작성할 코드는
execve(’/bin/sh’)이다.

시스템콜의 호출을 위해 int 80을 수행한다.
이 때, linux syscall table을 참고하여 systemcall 번호는 eax에 나머지 인자들은 각각 해당하는 레지스터에 값을 넣어주어야 한다.

sys_execve는 11번이므로 eax에 0xb를 넣게 된다.
그리고 execve()의 man page와 table을 참고하여 인자를 넣어준다.
’/bin/sh’ 문자열은 .data 영역에 저장한 뒤 ebx에 넣어주었다.


eax는 xor의 결과로 0이 들어 있다.

ecx와 edx의 경우 0을 가리키는 포인터를 주기 위해

eax를 스택에 push한 뒤 esp를 넘겨 주었다.


코드는 아래와 같다.



이 때 쉘코드에 null byte가 포함되지 않도록 주의해야한다.

mov eax, 0xb도 같은 결과를 가져오지만,
null byte가 포함되므로
mov al, 0xb로 작성하였다.



하지만 data 영역을 이용하면 주소를 가져올 수 없는 문제가 발생한다.

따라서 다음 글에서는 data 영역을 이용하지 않도록 수정하는 방법에 대해 이야기하려고 한다.

'Wargame > The Lord of the BOF' 카테고리의 다른 글

LOB - 03 goblin  (0) 2019.02.01
LOB - 02 cobolt  (0) 2019.02.01
LOB - 01 gremlin - (3)마무리  (0) 2019.02.01
LOB - 01 gremlin - (2.2)쉘코드 수정  (0) 2019.02.01
LOB - 01 gremlin - (1)스택 구조 파악  (0) 2019.02.01

댓글