Shang
Blog 👨‍💻
  • 🌸Introduction
  • 💻WEB SECURITY
    • Research Vulnerability
      • 📲Server-side topics
        • 🔏API Testing
        • 🔏Race conditions
        • 🔏XML external entity (XXE) injection
        • 🔏Server-side request forgery (SSRF)
        • 🔏File upload vulnerabilities
        • 🔏Access control vulnerabilities and privilege escalation
        • 🔏Business logic vulnerabilities
        • 🔏OS Command injection
        • 🔏Directory traversal
        • 🔏Authentication vulnerabilities
        • 🔏SQL injection
      • 📱Client-side topics
        • 🔏DOM-based vulnerabilities
        • 🔏Cross-origin resource sharing (CORS)
        • 🔏WebSockets
        • 🔏Clickjacking (UI redressing)
        • 🔏Cross-site request forgery (CSRF)
        • 🔏Cross-site scripting(XSS)
      • 🌀Advanced topics
        • 🔐Web cache poisoning
        • 🔐HTTP request smuggling
        • 🔐Prototype pollution
        • 🔐Server-side template injection(SSTI)
        • 🔐Insucure deserialization
    • Learn Java Vulnerability
      • Intro & Setup
      • Java Reflection Part 1
      • Java Reflection Part 2
    • Research Documents
      • 🎯DNS Rebinding
      • 🍪Remote Code Execution - Insecure Deserialization
      • 🍪Remote Code Execution on Jinja - SSTI Lab
      • 🍪Exploit cross-site request forgery (CSRF) - Lab
      • 🍪Exploit a misconfigured CORS - Lab
      • 🍪Same Origin Policy (SOP) - Lab
  • 📝WRITE-UP CTF
    • CTF Competitions
      • 🔰[WolvCTF 2023] Writeup Web
      • 🔰[M☆CTF Training 2023] Writeup Web
      • 🔰[HackTM CTF 2023] Writeup Web
      • 🔰[Incognito 4.0 2023] Writeup Web
      • 🔰[LA CTF 2023] Re-writeup Web
      • 🔰[Dice CTF 2023] Writeup Web
      • 🔰[ByteBandits CTF 2023] Writeup Web
      • 🔰[Knight CTF 2023] Writeup Web
      • 🔰[Sekai CTF 2022] Writeup Web
      • 🔰[WRECK CTF 2022] Writeup Web
      • 🔰[Maple CTF 2022] Writeup Web
    • CTF WarGame
      • ✏️[Root me] Writeup Sever Side
      • ✏️Websec.fr
      • ✏️[Root me] Writeup XSS Challenge
    • [tsug0d]-MAWC
      • 💉TSULOTT
      • 💉IQTEST
      • 🧬TooManyCrypto
      • 🧬NumberMakeup
    • Pwnable.vn
Powered by GitBook
On this page
  • Ping-Pong
  • CTF-WIKI and CTF WIKI-2
  • Wiki
  • Wiki 2
  • Admin-secret
  • Easy JWT
  1. WRITE-UP CTF
  2. CTF Competitions

[M☆CTF Training 2023] Writeup Web

Previous[WolvCTF 2023] Writeup WebNext[HackTM CTF 2023] Writeup Web

Last updated 2 years ago

Ping-Pong

Bài này chỉ nhìn vào đã biết lỗ hổng

Vuln: Command Injection

Tool: Burp suite

Payload: %0acat+/proc/self/environ (%0a->xuống dòng)

Flag: MCTF{k0Mm4Nd_1njeCT10N_1T'5_E45y}

CTF-WIKI and CTF WIKI-2

Hai bài này chung một lỗ hổng, nhưng chỉ khác nhau nơi giấu flag thôi.

Vuln: Directory traversal/path traversal

Tool: Burp suite

Wiki

Bài này flag giấu ở /proc/self/environ có thể dùng payload ../../../proc/self/environ

Có một cái tiện hơn là web này được code bằng php-> check file /proc/self/cmdline.

Có thể LFI to RCE bằng cách sử dụng các wrapper của PHP:

  • PHP cung cấp wrapper là các built-in được sử dụng cho các giao thức kiểu url. Nó sử dụng một số hàm hệ thống như fopen(), copy(), file_exit() và file_size().

  • Các wrapper mà PHP cung cấp: Lưu ý: Để sử dụng các wrapper này thì chúng ta cần phải đáp ứng một số điều kiện môt trường.

Sử dụng wrapper data://

  • Đây là một hàm thực thi code từ xa. Ta có thể inject đoạn mã mà mình muốn thực thi vào url.

  • Payload: ?file=data:,<?php system('cmd'); ?>

Wiki 2

Bài này thì phải rce vì flag có tên file riêng không nằm bất kỳ trong file nào quan trọng của linux.

Lúc này vẫn sử dụng wrapper data để rce.

Payload như cũ: ?file=data:,<?php system('cmd'); ?>

Admin-secret

Bài này lúc đầu cứ nghĩ nó là SQL Injection nhưng không....Nó có source code.

<?php
if (isset($_GET["source"])) highlight_file(__FILE__) && die();
$check = "Wrong!";
if (isset($_GET['username']) && isset($_GET['password'])){
    $username = $_GET['username'];
    $password = hash("SHA256", $_GET["password"]);
    if ($username == 'admin' && $password == 0){
        include'./flag.php';
    }}
?>

Phân tích code thì vuln nhìn đã có: PHP Magic Tricks: Type Juggling.

Password được nhập sẽ được hash theo type sha256 và sau đó so sánh với không nhưng điều đang nói ở đây thay vì so sánh chặt chẽ là === thì lại ==.

Phân tích qua PHP Type Juggling:

  • Toán tử so sánh == nếu như kiểu dữ liệu khác nhau nó sẽ đưa về một kiểu dữ liệu chung để thực hiện việc so sánh

  • PHP Comparisons: Loose
    Value

    "0000" == int(0)

    TRUE

    0e12" == int(0)

    TRUE

    "0e12345" == "0"

    TRUE

    "0abc" == int(0)

    TRUE

    "abc" == int(0)

    TRUE

    "0e12345" == "0e54321"

    TRUE

    "0e12345" <= "1"

    TRUE

    "1abc" == int(1)

    TRUE

    "0xF" == "15"

    TRUE

Nếu ép kiểu 1 string 1e theo sau là 1 string bất kỳ (ví dụ: 1e219229 ) về kiểu int, thì sẽ là (int) 1

Ở đây có thể dùng var_dump để check. Nếu như sha256 encode dạng 0e23323 thì lúc này nó sẽ ép kiểu về int(0) -> pass

Note: Có thể hiểu như 0^233333 = 0

Khi đó bypass thành công == trong php(Tương tự MD5, SHA1, SHA224 cũng thế)

username:admin&password:34250003024812

Easy JWT

Ở đây có hai chức năng đó là /gettoken và /flag. Ở đây phải làm sao đó để leak flag ra ngoài.

Phân tích qua xíu đoạn token khi nhập username:

Chỗ cần xem xem ở key can_get_token: 0 , ở đây chắc phải thay thành 1 để lấy flag, quan trọng không có secret key. Mình brute force nhưng không được, thấy ảnh cạnh bên có tên là hint.jpg.

Ở đây Secret sẽ viết bằng tiếng ra rồi phiên âm qua tiếng anh, lấy chữ cái đầu và viết hoa.

Мамонт - М Титан - Т Утка - У Сыр - С Изуку Мидория - И

Secret: MTUCI

Sửa lại cookie rồi getflag

— Accessing local filesystem

— Accessing HTTP(s) URLs

— Accessing FTP(s) URLs

— Accessing various I/O streams

— Compression Streams

— Data (RFC 2397)

— Find pathnames matching pattern

— PHP Archive

— Secure Shell 2

— RAR

— Audio streams

— Process Interaction Streams

📝
🔰
file://
http://
ftp://
php://
zlib://
data://
glob://
phar://
ssh2://
rar://
ogg://
expect://