포너블 아직 완전 쌩 초보이지만 정말 재미있는 것 같다.
📖 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억을 넘기는 출력을 해야한다.
어떻게 보내야 할까..... 안떠오른다.
생각이 나면 이어풀어보자.
'스터디 그룹 > ProjectH4C' 카테고리의 다른 글
ProjectH4C 3개월 2주차 과제 (해커스쿨 ftz - 2) (0) | 2021.03.26 |
---|---|
ProjectH4C 3개월 2주차 과제 (해커스쿨 ftz - 1) (0) | 2021.03.24 |
ProjectH4C 3개월 1주차 과제(Dreamhack - basic_exploitation_001) (0) | 2021.03.21 |
ProjectH4C 3개월 1주차 과제(Dreamhack - basic_exploitation_000) (0) | 2021.03.21 |
ProjectH4C 3개월 1주차 과제(HackCTF - 내 버퍼가 흘러넘친다!!!) (0) | 2021.03.21 |