관리 메뉴

Information Security

[SUNINATAS] 20번 문제 본문

WarGame/SUNINATAS

[SUNINATAS] 20번 문제

HackingPractice 2020. 12. 13. 16:19

그림 20-1 20번 문제

main 함수 조건문부터 보면 strcmp를 통해  ./suninatas와 비교하는 것을 알 수 있다. param_2가 파일 이름이라는 것을 알 수 있다. scanf로 12바이트만큼 입력받아야 하고 해당 변수에 Base64Decode를 진행하는 것을 봐서 우리가 입력한 값이 base64로 인코딩 되어 있어야 될 것 같다.

그림 20-2 main 함수      

decode의 길이가 13보다 작아야하며, auth함수의 결과 값이 1일 때 correct함수를 호출한다. 

그림 20-3 auth 함수

base64 디코드 값이 auth함수의 파라미터로 들어간 상태다. 위에서 보면 calc_md5를 통해 나온 값과 f87cd601aa7fedca99018a8be88eda34라는 문자를 비교해서 값이 1, 다르면 0을 리턴한다.

그림 20-4 correct 함수   

input._0_4_는 input의 첫 4바이트라는 의미를 나타낸다. input의 첫 4바이트 값이 -0x21524111(0xdeadbeef)과 같아야 하는 것을 알 수 있다.

그림 20-5 4바이트

1. 파일의 이름은 suninatas

2. 입력값 길이는 12바이트

3. 입력값 base4 인코딩

4. 입력 값의 첫 4바이트는 EF BE AD DE이다.

 

파일의 이름을 reverseme에서 suninatas로 변경하였다.

그림 20-6 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") 명령어를 실행시켰다.

그림 20-7 base64 인코딩

해당 인코딩 코드 값을 입력했는 데 Congratulation! you are good! 메시지를 확인할 수 있다.

그림 20-8 정답

'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