0. Introduce
분명 10시쯤인가 ctf가 안열려있길레 자고일어나서하려고 7시에 일어났더니 끝나있던 ctf.. ㅋㅋㅋㅋㅋ 그래도 포너블 문제만 풀어보려고 접속했는데 문제가 생각보다 쉽고 은근 재밌어서 다풀었습니다. 푸는건 1시간정도 걸린거같은데 익스정리하는게 좀 오래걸리네요..
요세 최근 ctf몇개 풀어보면 rand함수에대해서 많이 나오는거같아요. 이번 코게2017문제도 rand문제가 있던거같은데.. 빨리 라업이 나왔으면 좋겠네요..
ctf - http://hackcon.in/
Challenges
포너블문제는 이렇게 3문제가 나왔다.
1) Random
- Vulnerability
소스는 정말 단순하다.(64-bit binary) rand함수로 생성한 난수와 입력값이 같으면 cat flag로 flag를 출력해준다.
- Exploit
사실 seed값이 time(0)이기때문에 똑같은 프로그램을 만들어 seed를 time(0)으로 주고 출력하면 flag를 얻을 수 있는데, 실제 대회서버는 응답이 너무느려서 (외국이라 그런가..) 그게 안됬다. 하지만 친절히 seed값을 출력해주므로 seed를 입력해서 flag를 얻었다.
(https://github.com/LYoungJoo/CTF-Write-Up/blob/master/2017_Hackcon_Minipwn%20Write%20Up/Random.c)
- Flag
2) Game Of Integers - Part 1
- Vulnerability
마찬가지로 소스는 매우 단순하다. Nx와 Stack Canary가 걸려있지만 신경쓰지 않아도 된다.
취약점은 &v6부터 원하는 위치에 원하는 값을 쓸 수 있는것이다.
- Exploit
ret을 덮어씌우면 되는데, 고맙게도 프로그램안에 run_me라는 system("cat flag");를 해주는 함수가 있다.
v6부터 dummy(96) + ret(4)형식으로 ret을 조작할 수 있는데 이문제에서는 dummy값이 필요없고 바로 ret을 조작할 수 있다.
- Flag
3) Game Of Integers - Part 2
- Vulnerability
이 문제는 전문제랑 비슷한데 더 좋아졌다. v8부터 원하는 위치에 원하는 만큼 쓸 수 있도록 바뀌었다.
하지만 run_me를 확인해보면 다음과같이 cat flag가 없어진걸 볼 수 있다.
뭔가 다른방식으로 풀라는거 같다.
- Exploit
처음에는 그냥 got overwrite로 풀려고 보니까 plt에 fflush, puts, system, scanf밖에 없었다. 바이너리에 %s가 없는지라 scanf로 값을 쓸 수도 없었다. 그래서 ROP로 풀어보려고 가젯들을 확인해보니 아무리봐도 쓸만한 가젯들이 없었다.. 그래서 삽질을 조금 하다가 plt에 system함수가 있는걸 보고 설마 바이너리에 cat flag가 있겠어... 했는데 진짜 있었다.
run_me함수를 어셈으로 확인해보면 발견할 수 있다.. 그래서 RTL로 풀었다. (주의할 점이라면 패킹을 안하고 정수형태로 값을 줘야한다.)
- Flag
'해킹 > Write Up' 카테고리의 다른 글
Codegate 2017 prequals BabyMISC Write Up (0) | 2017.02.16 |
---|---|
Codegate 2017 prequals Babypwn Write Up (0) | 2017.02.16 |
Plaid CTF 2014 ezhp Write Up (0) | 2017.01.29 |
Codegate 2014 angry_doraemon (0) | 2017.01.28 |
HDcon luckyzzang write up (0) | 2017.01.27 |