🇻🇳
th13
  • info
  • JAVA
    • Notes: RMI linh tinh
    • [CVE-2013-2165] Phân tích RichFaces vulnerability thông qua CTF challenge
  • CTF WRITE UP
    • [Web]ImaginaryCTF 2021
    • [Web]CSAW CTF 2021
    • [Web]RaRCTF 2021
    • [Web]LIT CTF 07/2021
    • [Web]redpwn 2021
    • [Web]WeCTF 2021
    • [Web]WannaGame 21/05/2021
    • [Web]San Diego CTF 2021
    • [Web]picoMini by redpwn
    • [Web]WannaGame 17/04/2021
    • [Web]picoCTF 2021
    • [Web]BambooCTF/Calc.exe
  • saved
    • Tài liệu JAV Sờ cu 101
    • [NT230]PE file Injection
    • [WU][web]root-me
    • [WU]Lord of SQLinjection
    • [WU][Web]CyberTalents
    • [exploit][sqli]Challenge ngày Tết
Powered by GitBook
On this page
  • Let It Go
  • My First Website
  • dizzy
  • LIT BUGS
  • Alex Fan Club

Was this helpful?

Edit on GitHub
  1. CTF WRITE UP

[Web]LIT CTF 07/2021

Previous[Web]RaRCTF 2021Next[Web]redpwn 2021

Last updated 3 years ago

Was this helpful?

Saved sources:

Let It Go

Inspect to get flag

flag{l00k5_l1k3_y0u_f1n4lly_l3t_1t_g0}

My First Website

Bài này điêu toa cực, cần-trôn U lên để Ctr+F được 2 part của flag, part còn lại tìm không ra, ngồi xem hết assets không có. Ngồi click hết href thì alert ra part 3 =))))

flag{1_l1k3_90s_w3bs1t3s_d351gns}

dizzy

Xem header của response

Url ở trường Refresh là dẫn đến flag.

flag{th1s_is_b4d_pr4ct1c3_app4ar3nt1y}

LIT BUGS

Kéo source về đọc thấy rằng ở server có 3 eventName lắng nghe:

  • login: Nhận teamName và password, check và xử lý chuỗi rất kỹ, response kết quả True/False

  • register: Tương tự với login và kết quả đăng ký hợp lệ lưu vào acounts[].

  • reqName: Nhận id và trả về tên của Team (teamName) không có kiểm tra (xác thực) gì cả.

Theo description thì flag là 1 teamName. Vậy đây là nơi mình có thể khai thác.

Tên team ta cần tìm có id được gen ngẫu nhiên theo công thức Math.floor(Math.random() * 1000).

Như vậy id nằm trong khoảng từ 0->999, ta có thể brute force attack =)))

Về phía client, sau khi đăng ký/đăng nhập thành công thì chuyển sang endpoint /contest. Ở endpoint này có đoạn script:

Tóm tắt:

  • socket.emit("reqName",id) để reuqest tên Team bằng id.

  • socket.on("reqNameRes",(res)=>{$("#teamName").text(res);}); để luôn nhận response và in ra element có id #teamName.

Ban đầu mình hơi bối rối việc tạo script brute force hay brute force như nào với burpsuite. Và mình tự cảm thấy mình ngu xuẩn =))) Ơ sao không dùng chính javascript, cụ thể là console của webpage này để thực hiện luôn (được include hết thư viên, được gợi ý hết cách dùng).

//Khởi tạo biến array để nhận response về
let arr = [];

//Lắng nghe response
socket.on("reqNameRes",(res) => {
    //Nếu res không có rỗng
    if(res){
        //Nạp vào arr
        arr.push(res);
    }
})

//Chạy 1000 lần request socket với id tương ứng
for (i=0; i<1000; i++){
    socket.emit("reqName",i);
}

//In ra kết quả:
console.log(arr);

Copy code này paste vào console luôn, kết quả nhận được:

flag{if_y0u_d1d_not_brut3force_ids_plea5e_c0ntact_codetiger}

Alex Fan Club

Kéo source đọc thì đánh giá đây là dạng sqli union.

Lúc đầu bypass filter làm mình confused =)) Nhưng mình test trên local thành công không dùng ký tự bị filter:

PAYLOAD: ' UNION SELECT redacted FROM redacted WHERE redacted LIKE '

Giờ việc mình cần làm là bypass bằng các ký tự đã url encode:

Sau khi submit thì res 500 error =)))))) mình ngỡ ngàng bật ngửa. Mình ngây thơ quá, redacted chỉ là cái tên thay thế để mình test trên local :( hic trầm kẻm 5s.

Vậy nên mình phải tìm chính xác tên table và column cái đã, PAYLOAD: '%09UNION%09SELECT%09sql%09FROM%09sqlite_master%09WHERE%09type%09LIKE%09' .

Biết table và column thì inject lấy flag.

PAYLOAD: '%09UNION%09SELECT%09flag_column%09FROM%09flag_is_in_here%09WHERE%09flag_column%09LIKE%09'

flag{c0d3tig3r_g0t_gm_p3rf0rm4nc3_on_a_div_1_0rz}

https://github.com/th13ntc/ctf-source-saved/tree/main/litctf2021