일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- Docker
- Suninatas
- foremost
- 안드로이드
- beebox
- MFT
- ESXi
- elasticsearch
- igoat
- kibana
- diva
- otter
- Openstack
- 인시큐어뱅크
- lord of sql injection
- NTFS
- Reflected XSS
- logstash
- frida
- SQL Injection
- vulnhub
- 2018
- Strings
- Volatility
- XSS
- base64
- 파이썬
- CTF-d
- ctf
- InsecureBank
- Today
- Total
Information Security
[SUNINATAS] 20번 문제 본문
main 함수 조건문부터 보면 strcmp를 통해 ./suninatas와 비교하는 것을 알 수 있다. param_2가 파일 이름이라는 것을 알 수 있다. scanf로 12바이트만큼 입력받아야 하고 해당 변수에 Base64Decode를 진행하는 것을 봐서 우리가 입력한 값이 base64로 인코딩 되어 있어야 될 것 같다.
decode의 길이가 13보다 작아야하며, auth함수의 결과 값이 1일 때 correct함수를 호출한다.
base64 디코드 값이 auth함수의 파라미터로 들어간 상태다. 위에서 보면 calc_md5를 통해 나온 값과 f87cd601aa7fedca99018a8be88eda34라는 문자를 비교해서 값이 1, 다르면 0을 리턴한다.
input._0_4_는 input의 첫 4바이트라는 의미를 나타낸다. input의 첫 4바이트 값이 -0x21524111(0xdeadbeef)과 같아야 하는 것을 알 수 있다.
1. 파일의 이름은 suninatas
2. 입력값 길이는 12바이트
3. 입력값 base4 인코딩
4. 입력 값의 첫 4바이트는 EF BE AD DE이다.
파일의 이름을 reverseme에서 suninatas로 변경하였다.
(python -c 'import base64;print base64.encodestring("[ 0xdeadbeef의 값 ]"+"[ correct함수 시작 주소 ]"+"[ input의 주소 ]")'; cat) | ./suninatas
import base64;print base64.encodestring("\xef\xbe\xad\xde"+"\x5f\x92\x04\x08"+"\xec\xc9\x11\x08") 명령어를 실행시켰다.
해당 인코딩 코드 값을 입력했는 데 Congratulation! you are good! 메시지를 확인할 수 있다.
'WarGame > SUNINATAS' 카테고리의 다른 글
[SUNINATAS] 27번 문제 (0) | 2020.12.13 |
---|---|
[SUNINATAS] 25번 문제 (0) | 2020.12.13 |
[SUNINATAS] 17번 문제 (0) | 2020.04.05 |
[SUNINATAS] 12번 문제 (0) | 2020.04.05 |
[SUNINATAS] 11번 문제 (0) | 2020.04.05 |