일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 워게임풀이
- 6번문제
- 오토잇디컴파일
- 치트엔진 튜토리얼
- CheatEngine Tutorial
- BasicRCE
- Basic RCE
- 8번문제
- CodeEngn
- 1번문제
- 치트엔진 튜토리얼 게임
- 시스템
- xcz.kr 문제풀이
- cheatengine
- WarGame
- 포렌식
- xcz.kr prob
- 워게임
- 리버싱
- 써니나타스
- reversing
- Couldn't in
- wargame.kr
- WTF_CODE
- 3번문제
- suninatas
- xcz.kr
- Couldn't invoke the file
- Web
- 치트엔진
- Today
- Total
HackChang
[Suninatas] 써니나타스 20번 문제 풀이 본문
이번 문제는 키값을 찾는 리버싱이라고 한다.
우선 파일부터 받아보도록 하겠다.
이렇게 실행파일로 보이지 않는 파일이 나왔고, HxD에 올려보도록 하겠다.
ELF 유닉스기반 운영체제에서 실행할 수 있는 파일이다.
ida를 통해 해당 파일을 열어보도록 하겠다.
이제 힌트에 제공된 correct함수를 찾아보도록 하겠다.
보기 불편해서 스페이스바를 눌러 그래프뷰로 보도록 하겠다.
여기서 보면 0xEAABEEF와 비교 후 입력값인 eax와 같지않으면 종료하는 곳으로 점프하는 것을 볼 수 있다.
0DEADBEEF가 키값이라고 생각돼서 인증했지만, 인증되지 않았고,
correct함수만봐서는 풀리지 않을 문제라고 생각했고, 다른 함수들을 더 보도록 하겠다.
헥스레이를 사용해서 디컴파일을 했지만, 중요한 부분들이 sub라고 나오는 것을 볼 수 있다.
기드라 (Ghidra)로 봤을 땐 함수내용들이 더 자세히 나와서 기드라를 사용해보도록 하겠다.
기드라 설치와 관련해서는 아래 링크를 참고하면 된다.
https://hackchang.tistory.com/88
메인함수를 디컴파일을 진행해봤다.
첫 번째 조건문부터 보면 strcmp를 통해 ./suninatas와 비교하는 것을 볼 수 있다.
여기서 param2는 파일이름이다.
즉 파일 이름을 suninatas로 바꿔야 한다.
또한 여기서 scanf로 12바이트만큼 입력받는 것을 볼 수 있다.
또한 해당 변수에서 Base64Decode를 진행하는 것을 봐서 우리가 입력한 값이 base64로 인코딩되어 있어야될 것 같다는 생각을 했다.
decode의 길이가 13보다 작아야하며, auth함수의 결과 값이 1일때 correct함수를 호출한다.
auth함수부터 보도록 하겠다.
base64디코드 값이 auth함수의 파라미터로 들어간 상태다.
위에서 보면 calc_md5를 통해 나온 값과 f87cd601aa7fedca99018a8be88eda34라는 문자를 비교해서
값이 같으면 1, 다르면 0을 리턴한다. ( 값이 1일 때 correct함수 호출 )
아까도 본 함수지만, input._0_4 는 input의 첫 4바이트라는 의미를 나타낸다.
즉 input의 첫 4바이트 값이 -0x21524111(0xdeadbeef)과 같아야 클리어되는 것을 알 수 있다.
정리해보면 다음과 같다.
1. 파일의 이름은 suninatas
2. 입력값의 길이는 12바이트
3. 입력값의 Base64인코딩 필요
4. 입력값의 첫 4바이트는 EF BE AD DE이다. ( 리틀 엔디언 )
익스페이로드는
(python -c 'import base64;print base64.encodestring("[ 0xdeadbeef의 값 ]"+"[ correct함수 시작 주소 ]"+"[ input의 주소 ]")'; cat) | ./suninatas
즉, (python -c 'import base64;print base64.encodestring("\xef\xbe\xad\xde"+"\x5f\x92\x04\x08"+"\xec\xc9\x11\x08")'; cat) | ./suninatas
여기서 우리가 입력값을 키로 인증을 해야되기 때문에
base64인코딩을 한 값을 보도록 하겠다.
print 결과로 나온 출력값을 인증해서 클리어를 했다.
'W4RG4M3 > SYST3M' 카테고리의 다른 글
[Suninatas] 써니나타스 27번 문제 풀이 (0) | 2020.08.08 |
---|---|
[Suninatas] 써니나타스 24번 문제 풀이 (1) | 2020.08.07 |
[Suninatas] 써니나타스 16번 문제 풀이 (0) | 2020.08.04 |