amstrongCTF 2023 - webx6

2 minute read

catch me if you can

WEB

10 Point

Description

Link: https://catch-me-if-you-can.web.actf.co

Solution

Mình truy cập vào link được hướng dẫn thì mình thấy luôn flag đang được quay vòng vòng trên màn hình. Mình vào source và lấy flag

flag: actf{y0u_caught_m3!_0101ff9abc2a724814dfd1c85c766afc7fbd88d2cdf747d8d9ddbf12d68ff874}

Celeste Speedrunning Association

WEB

20 Point

Description

Solution

Trước tiên thì mình vào web và nhận được cái giai diện như này.

giao diện này nói rằng flag ở trong /play

Sau khi truy cập vào /play tôi nhận được một cái botton Nó bảo rằng mình cần phải đánh bại được kỷ lục trước đó để nhận được flag.

chỉ cần nhập một số thật lớn vào là được rồi

flag: actf{wait_until_farewell_speedrun}

shortcircuit

WEB

40 Point

Description

Link: https://shortcircuit.web.actf.co

Solution

có vẻ như trang web này yêu cầu nhập đúng username và password để lấy được flag tôi thực hiện đọc source và thấy một đoạn code javascirpt sau. tôi chú ý ở hàm này:

const check = (e) => {
                if (document.forms[0].username.value === "admin"){
                    if(swap(chunk(document.forms[0].password.value, 30)).join("") == "7e08250c4aaa9ed206fd7c9e398e2}actf{cl1ent_s1de_sucks_544e67ef12024523398ee02fe7517fffa92516317199e454f4d2bdb04d9e419ccc7"){
                        location.href="/win.html"
                    }
                    else{
                        document.getElementById("msg").style.display = "block"
                    }
                }

có vẻ như thông tin đăng nhập bao gồm: username là admin và password chính là flag đã bị đảo chiều. flag bị chia thành các phần gồm 30 ký tự.

const swap = (x) => {
                let t = x[0]
                x[0] = x[3]
                x[3] = t

                t = x[2]
                x[2] = x[1]
                x[1] = t

                t = x[1]
                x[1] = x[3]
                x[3] = t

                t = x[3]
                x[3] = x[2]
                x[2] = t

                return x
            }

script để chuyển đoạn flag về như cũ:

def chunk(x, n):
    ret = []

    for i in range(0, len(x), n):
        ret.append(x[i:i+n])

    return ret

def swap(x):
    t = x[3]
    x[3] = x[2]
    x[2] = t

    t = x[1]
    x[1] = x[3]
    x[3] = t

    t = x[2]
    x[2] = x[1]
    x[1] = t

    t = x[3]
    x[3] = x[0]
    x[0] = t

    return x


str = "7e08250c4aaa9ed206fd7c9e398e2}actf{cl1ent_s1de_sucks_544e67ef12024523398ee02fe7517fffa92516317199e454f4d2bdb04d9e419ccc7"

print(swap(chunk(str, 30)))

Kết quả:

['actf{cl1ent_s1de_sucks_544e67e', '6317199e454f4d2bdb04d9e419ccc7', 'f12024523398ee02fe7517fffa9251', '7e08250c4aaa9ed206fd7c9e398e2}']

flag: actf{cl1ent_s1de_sucks_544e67e6317199e454f4d2bdb04d9e419ccc7f12024523398ee02fe7517fffa92517e08250c4aaa9ed206fd7c9e398e2}

directory

WEB

40 Point

Description

Solution

truy cập trang web và mình nhận được giao diện chứa 5000 cái page và flag sẽ nằm 1 trong số page này.

Mình đã thực hiện brute-force và tìm thấy flag tại vị trí này

flag: actf{y0u_f0und_me_b51d0cde76739fa3}

Celeste Tunneling Association

WEB

40 Point

Description

Solution

sau khi tải source code về thì mình thấy flag được lưu trong 1 biến có tên là FLAG

và nếu như header host tồn tại và có giá trị bằng với SECRET_SITE thì flag sẽ được in ra.

    if num_hosts == 1:
        for name, value in headers:
            if name == b"host" and value == SECRET_SITE:
                await send({
                    'type': 'http.response.body',
                    'body': FLAG.encode(),
                })
                return

lệnh: curl -H “host: flag.local” https://pioneer.tailec718.ts.net

img

flag: actf{reaching_the_core__chapter_8}

hallmark

80 Point

WEB

Description

Solution

tấn không XML XSS vào tham số type, tham số type thêm [] vào trước để tạo lỗi type juggle

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
   <rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)" />
   <script type="text/javascript">
      fetch('https://hallmark.web.actf.co/flag')
   </script>
</svg>

Comments