JavaScript Injection (bài 4)
Bài dịch khá tốt. Cố gắng dịch hết đi, anh sẽ cho vào translater team. À có một chỗ cần đính chính <!-- và --> là để comment cho HTML, không phải cho javascript. Người ta thường dùng cấu trúc
Trích:
<script>
<!---
javascript code here
-->
</script>
để những trình duyệt cũ, không hỗ trợ javascript bỏ qua phần mã đó mà không gặp lỗi. Comment trong javascript tương tự như C/C++
//comment 1 dòng
/*
Comment nhiều dòng
*/
DarkHawk(VNISS)
Hehe, assignment done! Đã dịch xong phần còn lại:
Phần 3:
Bằng Javascript Injection, ta có thể xem và thay đổi giá trị của biến trong một đoạn chương trình Javascript nào đó nhúng trong trang web.
Lấy ví dụ khi bạn xem mã nguồn HTML một trang web, bạn có đoạn code này:
Trích:
<SCRIPT LANGUAGE="JavaScript">
var a="test"
</SCRIPT>
Theo phần 1 ta đã biết ở đây biến a có giá trị là "test". Để xem giá trị của biến, ta có thể dùng lệnh:
Trích:
javascript:alert(a)
và để thay đổi giá trị biến từ "test" thành "hello", ta gõ thế này:
Trích:
javascript:alert(a="hello")
Tuy nhiên, mục đích chính của Javascript Injection là dùng để thay đổi thuộc tính của form.
Giả sự ta có đoạn code sau:
Trích:
<form name="format" action="send.php" method="post">
<input type="hidden" name="mail" value="someone@somewhere.com">
<input type="text" name="name">
<input type="submit" value="submit"></form>
Bây giờ, thay vì nội dung form sẽ được gửi đến địa chỉ
someone@somewhere.com, chúng ta lại muốn nó được gửi đến địa chỉ khác cơ ^^
trong một số trường hợp bạn muốn nó đến email của bạn, và trong một số trường hợp khác, bạn muốn nó đến email của "victim"
Để làm điều đó, dùng lệnh sau:
Trích:
javascript:alert(document.format.mail.value="me@ha cker.com")
Qua những ví dụ cơ bản trên, ta có thể khái quát thế này, đó là để thay đổi một thành phần hay thuộc tính nào đó, luôn luôn tuân theo hệ thống cấp bậc:
Ta bắt đầu từ thuộc tính lớn hơn đến nhỏ dần:
1) Bắt đầu bằng document
2) Tiếp theo là tên của đối tượng chúng ta muốn alert (ví dụ document.format.mail.value) hoặc thêm thành phần thuộc đối tượng và kèm theo tên của đối tượng (ví dụ document.format.mail.value)
3) Sau đó ta kết thúc bằng thuộc tính của thành phần chúng ta muốn thay đổi (ví du giá trị của thành phần mail: document.format.mail.value)
4) Các từ được phân biệt bởi dấu chấm câu '.'
5) Khi muốn thay đổi một thuộc tính, sử dụng dấu bằng '=' và theo sau là thuộc tính mới.
*Chú ý: ta sử dụng dấu nháy kép "" khi thuộc tính mới là một chuỗi kí tự
Trích:
document.format.mail.value="me@hacker.com"
Còn nếu muốn thay đổi giá trị biến, ta ko dùng dấu nháy kép "".
Ví dụ muốn thay đổi giá trị của biến a thành giá trị của biến b, ta gõ:
Trích:
javascript:alert(a=b)
Thật ra hầu hết các thành phần trên trang web không được gán tên. Ví dụ:
Trích:
<form action="send.php" method="post">
<input type="hidden" name="mail" value="someone@somewhere.com">
<input type="text" name="name">
<input type="submit" value="submit"></form>
Có thể thấy là trong code trên ko có tên của form.
Nếu làm theo lý thuyết đã khái quát ở trên, lệnh sẽ như sau:
Trích:
javascript:alert(document. .mail.value="me@hacker.com")
Trong trường hợp này, để giải quyết vấn đề, chúng ta phải đếm số thứ tự của form. Ví dụ:
Trích:
<form action="send.php" method="post">
<input type="text" name="name">
<input type="submit" value="submit"></form>
<form action="send.php" method="post">
<input type="hidden" name="mail" value="someone@somewhere.com">
<input type="text" name="name">
<input type="submit" value="submit"></form>
<form action="send.php" method="post">
<input type="text" name="name">
<input type="submit" value="submit"></form>
Vậy là trong đoạn code trên có tất cả 3 form, nhưng chúg ta chỉ quan tâm form thứ 2. Vì vậy thứ tự của form là 2. Tuy nhiên, cần phải nhớ là trong JavaScript, số đếm đầu tiên là 0. Vì vậy số thứ tự thực tế được Javascript nhận biết là 1 chứ không phải là 2. Và ta sẽ dùng số này để điền vào khoảng trống trong câu lệnh trên:
Trích:
javascript:alert(document.forms[1].mail.value="me@hacker.com")
Ngoài thay đổi thuộc tính form, bạn cũng có thể thay đổi một hình ảnh khi xem một trang web. Và để xác định tên file ảnh (tên chứ ko phải đường dẫn), bạn cũng đếm như đếm form vậy . (Mình thấy ứng dụng này ko hữu ích lắm với anh em nên mình ko đưa vào)
Như vậy, bạn có thể thay đổi một hình ảnh hay liên kết chưa được gán tên:
Với file ảnh, câu lệnh sẽ có dạng:
Trích:
javascript:alert(document.images[3].src="#the url of the picture you want#")
Với đường link nó sẽ là:
Trích:
javascript:alert(document.links[0].href="#the url you want#")
Điều cuối cùng, chúng ta có thể sử dụng kĩ thuật này để thay đổi cookie.
Câu lệnh sau được viết bởi Dr_aMado. Mình đang nghiên cứu nội dung đoạn code này vì ngay lúc này nó vẫn chưa run. Anyway, nó là một gợi ý cho ai biết Java
Trích:
javascript:alert(window.c=function a(n,v,nv){c=document