[securityoverride.org] Basic Mission 15

Đây là challenge tốn không ít thời gian khám phá và search google cũng như forum bàn luận của trang này mà tôi mới làm được nó. Nó không sử dụng các kĩ thuật mà tôi đã biết trước đó nên khi làm xong cảm thấy bổ ích hơn các challenge khác (cả bài 14 nữa).

Quyết định viết “writeup” để hiểu chi tiết về nó một chút.

Khi bắt đầu thì nó cho cái form submit thế này:

pic1

Mục tiêu đề ra là phải tạo được một cái messagebox với nội dung là xss.

Cũng như bao challenge khác, tôi cặm cụi tìm cách bypass filter:

Đầu tiên chắc chắn là phải thử cái này:

<script>alert(‘xss’);</script>

Thử cho vui chứ chắc chắn là không được rồi vì các dấu < > đã được html encode.

Xong rồi thử hết các kiểu thông thường mà tôi nghĩ là có thể được như:

base64 encode:

PHNjcmlwdD5hbGVydCgneHNzJyk7PC9zY3JpcHQ+

hex encode:

%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%27%78%73%73%27%29%3b%3c%2f%73%63%72%69%70%74%3e

String.fromCharCode:

alert(String.fromCharCode(88, 83, 83))

Rồi thử tùm lum các kiểu nhưng thử hoài mà không được nên tôi phải dừng lại và suy nghĩ.

Nghĩ không ra mới vào forum xem họ bàn luận thế nào. Các pro đã giải challenge này có hint là phải xác định được chỗ bị lỗi rồi mới khai thác.

Tức là có khả năng tôi đã xác định sai entry point để tấn công, mà đúng là sai thật!!!

View source và thấy cái comment này:

<div style='color: #fff;'>Note: Sorry to all the legitimate bbcode users,
but previously, some jerk exploited them, and so I had to remove bbcodes all together
my <!--php_-->self... So no more bbcodes. :(</div><br />
<form action='/challenges/basic/15/index.php' method='post'>
<textarea name='comment' cols='70' rows='7' class='textbox' style='width:98%;'></textarea>
<br />
<input type='submit' value='Post Comment' />
</form>

Chú ý cái chỗ:

<!–php_–>self…

cái chỗ này nó chả phải là ngẫu nhiên rồi :((

Search Google về PHP_SELF rồi đọc một hồi, tôi hiểu ra vấn đề ở chỗ cái form submit.

Cái chỗ:

action=’challenges/basic/15/index.php

nó không phải là fix cứng mà coder đã set nó bằng cái này:

action= $SERVER[‘PHP_SELF’]

Cái biến này cụ thể nó là như sau:

Nếu như file php của mình mà đặt tại địa chỉ:

http://www.yourserver.com/form-action.php

thì PHP_SELF sẽ có giá trị là:

“/form-action.php”

Nếu file php đặt tại vị trí:

http://www.yourserver.com/dir1/form-action.php

thì PHP_SELF lúc này nó sẽ có giá trị:

“/dir1/form-action.php”

Sau khi hiểu về cái PHP_SELF này thì áp dụng vào bài của mình:

PHP file đang đặt tại:

http://securityoverride.org/challenges/basic/15/index.php

và cái thằng action của form nó có giá trị:

‘/challenges/basic/15/index.php’

=> chuẩn cmnr. Nó đã dùng PHP_SELF ở cái chỗ này.

Bây giờ không submit ở form nữa mà phải ở URL:

http://securityoverride.org/challenges/basic/15/index.php/'><script>alert('xss');</script>

và nó đã hiện lên cái messagebox:

pic2

Form của chúng ta bây giờ nó đã trở thành:

<form action=’/challenges/basic/15/index.php/’><script>alert(‘xss’);</script>’ method=’post’>

Chốt lại bài này sau khi làm xong biết thêm 1 entry point khi khai thác XSS, nó chính là thuộc tính action của form

Thanks!

Advertisements

Advanced Mission 1

PHP Sucks

Bypass PHP checks:

<?php
     $input = trim(getUserInput());
     if(
           str_split($input) == array(0,0,0,0) ||
           strcmp($input, "0000") == 0 ||
           strcmp($input, "000") == 0 ||
           strcmp($input, "00") == 0 ||
           strcmp($input, "0") == 0 ||
           $input === 0 ||
           preg_match("/^[\d]{1,}$/D", $input)
     )fail_advanced_1();

     if($input == "0000") complete_advanced_1();
?>

By using == compare, PHP will not check type of variables. So pass this challenge by submit 0e0 because 0e0 = 0000 (haha)

Javascript Level 7

Login Bypass MD5 Style

Target of this challenge is to bypass the check:

<script language='JavaScript' type='text/javascript'>
    <!--
        var password= '';
        password=prompt('Please enter the Password!','');
        hash = hex_md5(password);
        if (hash=='ab12dac00608ae03ab47621109fc64e6') {
            window.location.href=password+'.php';
        }
    //-->
</script>

Using MD5 revert online tool to reverse string ab12dac00608ae03ab47621109fc64e6
The result is surreal

Javascript Level 6

Potentially ‘Evil’ Scripting

Code:
<script language='JavaScript' type='text/javascript'>
    <!--
        var p4ss= 'notsoevil';
        p4ssword=prompt('Please enter the Password!','');
        if (p4ssword==p4ss) {
            window.location.href=p4ssword+'.php';
        }
        var pass= '666'; // This script is evil. >:D
        password=prompt('Please enter the Password!','');
        if (password==pass) {
            window.location.href=password+'.php';
        }
    //-->
</script>

But you need to view source code of page careful to see full version of code.
When you can see full javascript code, easy to pass this challenge by enter 'notsoevil' and '666' to authenticate.