-
문제를 풀다 보니, 난이도가 들쑥 날쑥해져서.. 풀이수가 많은 것들부터 풀기로 했습니다..
이번에 풀 거는 448 솔브의 로또 문제입니다.
일단 풀었음.
거의 15분만에 푼거 같은 데, 그만큼 쉬운 문제였습니다.
보면 저기에 srand 보이시죠?
rand함수 취약점 이용해서 문제 푸는 거였어요. 취약점이라고 해야하나 ^^.....
아래쪽에 보면 여러 많은 암,복호화 과정을 거치는 데, 제가 문제를 풀면서 고민했던 것은 이 암호화과정을 구현해서 풀어야 하는 지, 아니면 입력값을 맞춰야 하는 지 였습니다.
그런데 이문제가
숫자를 입력하면 계속 이 화면으로 돌아오더군요. 아마도 로또번호가 틀려서 그런거 같아요.
그래서 루프문을 돌리는 거 같은데, 메인함수를 보면
이처럼 로또번호 6개가 다 맞아야 통과하더군요...
근데 srand함수가 대놓고 취약하게 보여주니까 로또번호를 맞추기로 했습니다.
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ srand(0x5E590635); int random[6] = {rand(),rand(),rand(),rand(),rand(),rand()}; for (int i = 0; i < 6; i++) printf("%d ", random[i]%100); return 0 ; }
함수 다음처럼 짜서, 디버깅을 통해서 srand에 무슨 값 들어가는 지 확인하고 rand함수의 값이 무엇인지 확인했습니다.
그 값들을 로또번호로 넣어주니까
flag를 토해내더군요
'Writeup > Wargame_Writeup' 카테고리의 다른 글
[ Reversing.kr ] Twist1 (0) 2020.04.07 [ Reversing.kr ] CSHARP (0) 2020.02.29 [ Reversing.kr ] CSHOP writeup (0) 2020.02.28 [ Reversing.kr ] AutoHotkey1 Writeup (0) 2020.02.12 [Reversing.kr] Ransomware (0) 2020.02.07 댓글