BWAPP

HTML reflected (GET)

Source: https://github.com/lmoroz/bWAPP/blob/master/bWAPP/htmli_get.php

<div id="main">
    
    <h1>HTML Injection - Reflected (GET)</h1>

    <p>Enter your first and last name:</p>

    <form action="/htmli_get.php" method="GET">

        <p><label for="firstname">First name:</label><br>
        <input type="text" id="firstname" name="firstname"></p>

        <p><label for="lastname">Last name:</label><br>
        <input type="text" id="lastname" name="lastname"></p>

        <button type="submit" name="form" value="submit">Go</button>  

    </form>

    <br>
    Welcome aaa bbbbb
</div>

Medium

High

Sau khi đoán mãi cách bypass không ra nên ta chuyển sang whitebox testing:

The htmlspecialchars() function converts some predefined characters to HTML entities.

→ Chuỗi trả ra không còn ký tự đặc biệt nào mà trình duyệt có thể hiểu là thẻ hay thuộc tính HTML.

Vậy nên việc khai thác bây giờ hoàn toàn trở lên không còn khả thi nữa.

Và còn 1 cách dùng khác secure tương tự:

HTML Injection - Stored (Blog)

Source code: https://github.com/lmoroz/bWAPP/blob/master/bWAPP/htmli_stored.php

Vuln nằm tại phần HTML hiển thị data từ table

Như vậy đối với security level 1 và 2, khai thác là điều dường như không thể (xss_check_3 đã xuất hiện ở bài trước).

Theo như ta tìm kiếm thì còn 1 hàm xss_check_4 nhưng do author sai sót nên viết nhầm cả thành xss_check_3 :>>

OS Command Injection

Source code: https://github.com/lmoroz/bWAPP/blob/d34520de7dfad526913706e9772aae6e9aa34916/bWAPP/commandi.php

Hàm validate input:

Và đây là vuln:

Đây là cách mà hàm str_replace hoạt động.

Nên ta phải dùng các kí tự khác. Ví dụ như %0a (\n)

Đối với hàm: escapeshellcmd thì vẫn chưa thấy có bài nào chỉ ra rằng ta có thể bypass được

Server-Side Includes (SSI) Injection

Source code: https://github.com/lmoroz/bWAPP/blob/d34520de7dfad526913706e9772aae6e9aa34916/bWAPP/ssii.php

Vuln code:

Và hàm xss_check_4 được sử dụng:

Theo như phân tích thì ta cần escape khỏi thẻ <p> để có thể thực thi các script độc hại

Sau khi thực nghiệm, thì ta thấy rằng việc bypass addslashes trong bối cảnh này khá khó khăn. Ta ignore tạm thời nó:

Ngoài ra còn 1 cách tấn công khác. Nhìn vào extension của file ta thấy nó có đuôi là: .shtml

.shtml (Server-Side Includes HTML) dùng cho tệp HTML có gắn thẻ SSI – các chỉ thị đặc biệt nằm trong comment HTML

Như tại đoạn code ta đang có sẵn 1 dòng chỉ ra SSI entity đó là:

Hoặc có thể tham khảo các payload tại đây hoặc đây

Đầu tiên, ta test thử với payload là:

Sau khi confirm rằng lỗi thực sự xảy ra (nếu ta không dùng các kí tự " hoặc '

Hoặc với payload:

Hoặc vô số trò khác bằng cách sử dụng pipeline như sau:

Hiện tại khi sử dụng payload trên thì ta đang gặp vấn đề tại server config không thể chạy 1 câu lệnh có pipeline dài như trên...

Ta có thể confirm sql vuln bằng cách thêm dấu ' vào movie field

Đối với level medium ta có thể thấy nó đã hide các error message

Mò vào source code (Vì ta đã thử khá nhiều payload - blind sqli nhưng đều không hiệu quả) thì ra là nó đang tìm kiếm chuỗi (đơn giản là chuỗi đó không tồn tại)

Thì trong source nó đã filter input mình nhập vào bằng function sau:

Và đây là cách input của ta được đi vào filter function:

Mô phỏng:

Đối với level medium hiện chưa tìm ra giải pháp để bypass addslashes

Mặc dù đã sử dụng phương pháp Multiple Character như bài blog sau (Vì nó chỉ hoạt động khi kích hoạt bộ mã multiple character như GBK, Big5,.. bằng SET NAMES ...). Còn nếu không thì dường như không thể khai thác được thêm vào đây.

SQL Injection - Blind - Boolean-Based

Easy

security_level = 0 --> Không filter các kí tự mà ta nhập vào

Dựa vào đoạn code trên, có thể thấy rằng khi ta nhận được kết quả error thì biến $recordset sẽ là false

và raise lên 1 lỗi. Ngược lại thì mặc dù thành công hay không ta cũng không thể quan sát được được chương trình trả về dữ liệu của database ⇒ blind sqli

Mô phỏng Sqli

Thực nghiệm:

Như vậy là ta đã thành công sleep được 10s

Đoạn này không hiểu sao burpsuite hoạt động ảo ma quá nên phải chuyển qua tương tác với web

SQL Injection - Blind - Time-Based

Easy

Phần này, tuy logic chương trình có vẻ khác nhau nhưng core chính thì giống với phần lab phía trên chỉ khác là bây giờ ta sẽ không thấy được bất kì output nào.

Đối với bài lab:

  • SQL Injection - Blind - Boolean-Based: ta có thể retrieve data dựa vào error message hoặc error hoặc là time-based như trên

  • SQL Injection - Blind - Time-Based: ta chỉ có thể dựa vào time based để retrieve data từ database

XML/XPath Injection (Login Form)

Ta có thể thấy rằng nếu mật khẩu sai thì ta sẽ nhận được "Invalid ..." còn để hợp lệ ta phải input đúng các credential được liệt kê trong file heroes.xml

Điều cần chú ý là 2 biến $login và $password được nối thẳng vào chuỗi query.

Mô phỏng:

Thì ta sẽ nhận được user đầu tiên trong file XML/XPath (tương tự như database)

Tại sao ta cần inject vào cả 2 fields:

Khai thác SQL bằng tool

Save request của Burpsuite (chứa vuln SQLi) vào 1 file là req.txt

Sau đó sử dụng command:

Và đây là kết quả:

Last updated

Was this helpful?