ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cor] whack a frog
    CTF/forensic 2022. 8. 15. 16:57

    이 문제는 pcap 파일과, 사이트 주소를 하나 준다.

     

    https://whack-a-frog.be.ax/

     

    https://whack-a-frog.be.ax/

     

    whack-a-frog.be.ax

    이 사이트에서 통신한 기록을 가지고 무엇을 해야하나보다.

     

    우선 wireshark를 통해 pcap 파일을 뜯어보았다.

    중간중간에 /anticheat?x=*&y=*&event=* 처럼 통신한 흔적이 보인다.

     

    burpsuite로 사이트를 잡아보니 마우스 클릭, 클릭 해제, 이동과 같은 모든 행동에 대해 통신한다는 것을 알 수 있었다.

    클릭을 하고 드래그를 하고 이런 저런 행동을 한 것이 모두 pcap 파일에 저장되어 있는 것이다.

     

    우선 tcp 통신에 대한 패킷들만 추려냈다.

    tcp.stream

    tcp.stream을 통해 tcp 통신만 추려냈고 이 내용들을 txt 파일로 추출해왔다.

     

    file->export->as plain text

    이제 이 파일을 가지고 파싱을 해야한다.

     

    엄청난 양이다.

     

    우선 txt파일에서 내용을 모두 읽어온 다음, event가 포함된 줄만 받아와서 x와 y, event를 파싱해 경우에 따라 작업을 해주면 되겠다.

     

    마우스 드래그는 클릭 이후에 드래그를 할 테니, 마우스가 클릭된 이후에만 마우스 이동 이벤트를 신경써야 한다.

    2차원 배열을 크게 만들어 모두 빈칸으로 초기화 시킨 다음, 마우스 이벤트에 따라 *을 넣고 마지막에 출력시키면 무엇인가 나올 것이다.

     

    f = open('./tcp.txt', 'r', encoding='utf-8')
      
    data = f.readlines()
    
    isMouseDown = 0
    
    height = 100
    width = 700
    
    #make width=700 height=100 table
    table = [ [ ' ' for _ in range(width) ]  for _ in range(height) ]
    
    for line in data:
        #parsing events
        if 'event' in line:
            tmp = line.split('?')[1].split('&')
    
            #parsing x, y, event
            x = tmp[0].split('x=')[1]
            y = tmp[1].split('y=')[1]
            event = tmp[2].split(' ')[0].split('event=')[1]
    
            #event handler
            if event == 'mouseup':
                isMouseDown = 0
            elif event == 'mousemove' and isMouseDown == 1:
                table[int(y)][int(x)] = '*'
            elif event == 'mousedown':
                isMouseDown = 1
    
    for i in table:
        for r in i:
            print(r, end="")
        print("")
    
    f.close()

     

    위와 같이 코드를 짰고 실행시켜보니 플래그가 나왔다.

     

    LILYXOX

    댓글

Hi