1. 문제
NX 만이 걸려있다.
1. puts(s) : ******** 까지 출력
2. get_poem : enter -> 입력
3. get_author : 저자는 누구냐고 함 -> 입력
4. rate_poem : get_poem 에서 입력한 값에 따라 6024E0에 100 씩 더함
5. 6024E0 이 100000이면 반복문을 탈출함.
6. 반복문을 탈출하면 reward 함수가 실행됌.
우리의 목표는 reward 함수를 실행하는 것!
어떻게? 6024E0(bss 영역) 을 100000으로 만들기
2. 문제 해결 과정
get_poem() 에서 gets 를 입력받을 때 bof 가 발생
이를 이용해 값을 바꾸려고 했는데, 입력을 받은 뒤 6024E0을 초기화함 -> 안될 듯
get_author() 함수 역시 gets() 에서 bof 가 발생
입력을 받는 6024A0 역시 bss 영역 -> 이를 이용하면 될 것 같다.
6024A0(bss 영역)
6024E0(bss 영역)
-> offset : 64
즉, get_author() 에서 gets() 입력 시 bof 를 통해 6024E0 값을 1000000으로 바꿔주면 될 듯함.
따라서 페이로드는 다음과 같을 것이다.
"A"*64 + 1000000
3. 익스플로잇
첫번째 입력에서는 아무거나 보내주고, 두번째 입력에서 페이로드를 보내면 된다.
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] 1996 (0) | 2021.04.18 |
---|---|
[HackCTF] Yes or no (1) | 2021.04.16 |
[HackCTF] BOF_FIE (0) | 2021.04.15 |
[HackCTF] Offset (0) | 2021.04.15 |
[HackCTF] RTL_Core (0) | 2021.03.31 |