스터디 그룹/ProjectH4C

ProjectH4C 3개월 2주차 과제(Dreamhack - basic_exploitation_002) : 실패

포너블 아직 완전 쌩 초보이지만 정말 재미있는 것 같다.

 


📖 1) 문제 파악

포맷 스트링 버그를 이용한 공격인 것 같다. gdb와 ida를 통해 좀 더 보자. 

 

read 하고 printf 하는 과정을 유심히 봐야겠다. 그러면 flag를 출력해주는 함수가 존재할까 ?

 

get_shell 함수는 존재한다. 주소는 0x08048609 이다.

 

IDA로 열어보자. 우선 선언한 만큼 read를 해주기에 buf쪽에서 BOF를 생각하기는 힘들 것 같다.

 

get_shell() 함수는 이렇게 system("/bin/sh")를 실행한다.

 


📖 2) 문제 분석

우선 첫 번째로 들어간 값을 가지고 놀 수 있다는 것은 위에서 확인을 하였다. (정확하게 어떻게 표현해야하는지 모르겠다.)

 

그러면 exit(0)코드에 Overwriting을 해보도록 하자.

 

그러니까 exit_got이 가리키는 주소를 get_shell()의 주소로 바꾸어야 할 것 같다.

 

이렇게 exit_got의 주소를 알 수 있다. 0x804a024 이 곳이다.

이 곳의 값을 0x08048609으로 바꾸어 보도록 하자.

 


📖 3) 문제 풀이

우선 내가 생각한 페이로드는

# payload = exit_got + "%(0x8048609 - 4)x" + "%n"

이거였다. 하지만 134514181 바이트를 넘겨주어야 하는데, 13억을 넘기는 출력을 해야한다.

 

어떻게 보내야 할까..... 안떠오른다.

 

생각이 나면 이어풀어보자.