• [ Reversing.kr ] x64 Lotto Writeup

    2020. 2. 28.

    by. ugonfor

    문제를 풀다 보니, 난이도가 들쑥 날쑥해져서.. 풀이수가 많은 것들부터 풀기로 했습니다..

     

    이번에 풀 거는 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

    댓글