[J2TeaM] WriteUp

Level 1: 

Screenshot from 2016-05-09 10-13-14

Xem nguồn của trang bằng cách ấn chuột phải, View Page Source hoặc ấn Ctrl + U

Ta nhận thấy có 2 đoạn code cần phải chăm sóc :

Level1

Bạn đang đọc: [J2TeaM] WriteUp

Bạn đang đọc : [ J2TeaM ] WriteUp
Ở phần thứ 2, có sự kiện

onSubmit = "return J2TeaM();"

Đây là sự kiện mà khi ta Enter / Submit, nó sẽ đi tới hàm JavaScript tên là J2TeaM. Tiếp tục, ta thấy id của textbox/input mà ta nhập vào là JPw.

Nhìn lên phần thứ nhất, hàm J2TeaM() với phương thức getElementById, biến Password được gán cho textbox mình nhập trên (id = ‘JPw’). Đọc tiếp ta thấy có lệnh rẽ nhánh If, nếu Password == ‘fbf7f55db11089b910b0c66070d372d6’  thì trang web được Submit.

Vậy Password của chúng ta là fbf7f55db11089b910b0c66070d372d6. Submit : Ok 🙂

Level 2:

Level2

Xem Source Code, nhìn vào hàm J2TeaM() ta thấy, nếu

Password ='eb8f9ad91c5492504ddc04598d926684' + x()

thì trang web được submit. Phân tích hàm JavaScript x() :

 j = String.fromCharCode(32)

sẽ gán kí tự mã ASCII là 32, đơn cử là dấu cách ‘ ‘ cho biến j .
Tiếp tục

 'Juno_okyo with love from J2TeaM'.split(j)

Sẽ cắt xâu ‘Juno_okyo with love from J2TeaM’ thành các phần ngăn cách bởi j, tức là bởi dấu cách. Nói cách khác sẽ chia xâu trên thành các từ Juno_okyo, with, love, from, J2TeaM.
Và cuối cùng lấy phần tử thứ 4 của mảng trên (đánh số 0, 1, 2, 3, 4, …) ta được x là
‘J2TeaM’

Vậy Password eb8f9ad91c5492504ddc04598d926684J2Team. Submit,OK 🙂

Level 3: 

Level3

Xem Source Code, nhìn vào hàm J2TeaM() ta thấy, biến i được gán cho textbox mình nhập trên (id = ‘JPw’)

Nếu i bằng document.alinkColor thì trang web được submit. Thuộc tính alinkColor

alinkColor the color of an active link in the document body. A link is active during the time between mousedown and mouseup events.

Không quan trọng lắm, quan trọng giá trị thuộc tính đó là gì ? nhìn xuống phía dưới

body alink="#2C2C2C"

Vậy i #2C2C2C. Submit, OK 🙂

Level 4: 

Level4

Xem Source Code, nhìn vào hàm J2TeaM() ta thấy, biến i được gán cho textbox mình nhập trên (id = ‘JPw’)

Nếu i bằng xx(str) thì trang web được submit. Xem hàm xx() ta thấy xx trả về xâu được chuyển thành chữ thường. Vậy nếu i bằng ‘just for fun.’ thì trang web được submit.

Ta thử nhập vào ô textbox, tuy nhiên ta nhận thấy, ta nhập xong chữ nào, thì chữ đó chuyển thành chữ hoa ? Nguyên nhân tại sao ?? Xem kĩ phần dưới, ta nhận thấy sự kiện onKeyUp được gán cho hàm xxx(). Sự kiện onKeyup 

Xảy ra khi bạn gõ phím nhưng lúc bạn nhả phím ra sẽ được kích hoạt

function xxx() 
{var t = document.getElementById('JPw').value;
if (t != '') document.getElementById('JPw').value = t.toUpperCase();}

Hàm xxx() sẽ chuyển chuỗi trong textBox thành chữ in hoa mỗi khi ta ấn phím rồi thả phím ra.

Vậy phải giải quyết vấn đề này thế nào ? Làm sao để nhập vào ô textBox mà không bị chuyển thành chữ hoa. Ta sử dụng công cụ Inspect Element. Đây là công cụ có trên cả Firefox, Chrome, mục đích giúp chúng ta xem xét được ngay những sự thay đổi ở trên trình duyệt khi Code Html/Css/Js thay đổi.

Một cách đơn giản, bật Inspect Element và xóa thuộc tính onKeyUp=”xxx();”. Nhập mật khẩu là just for fun. Submit, OK 🙂

Level 5: 

Level5

Xem Source Code, nhìn vào hàm J2TeaM() ta thấy, biến i được gán cho độ dài (length) textbox mình nhập trên (id = ‘JPw’). Nếu i = 19 thì trang web được submit.

Tuy nhiên, xem xét thuộc tính của textbox , ta thấy maxlength = “18”. Có nghĩa là textbox được nhập tối đa 18 kí tự, đến 18 kí tự ta không thể nhập thêm nữa.

Sử dụng Inspect Element, sửa maxlength thành số lớn hơn hoặc bằng 19, nhập vào textbox bất kì xâu có độ dài 19, submit, ok 🙂

Level 6: 

Level6_wp.png

Xem Source Code, những vấn đề cần lưu ý là :

  • textBox : maxlenth = 9
  • textBox : require onKeyDown = “x()”
  • function x() {var t = document.getElementById(‘JPw’).value; if (t.length==9) document.getElementById(‘JPw’).value = t.substr(0, 8);} Hàm x() khi độ dài chuỗi nhập vào bằng 9 thì sẽ gán lại nó bằng chính nó 🙂 Không có ý nghĩa gì cả, bỏ qua

  • J2TeaM() : i được gán bằng gía trị textBox. Nếu độ dài i >= 10 i.indexOf(‘J2TeaM’) = -1 . Có nghĩa là tồn tại xâu J2TeaM trong i.

=> Dùng Inspect Element, sửa maxlength lên >=10, nhập vào xâu độ dài >= 10 và chứa J2TeaM ở bất cứ đâu.

Submit, OK 🙂

Level 7: 

Level7

Xem Source Code, ta thấy một đoạn JavaScript loằng ngoằng

 /\b[\D\d._%+-]+@[\D\d.-]+\.[\D]{2,6}\b/i.test(i)

Search ta biết được đây là Regular Expression :

Cú pháp của một RegExp gồm có : /pattern/modifiers/

Phân tích đoạn RegExp trên ta có :

  • pattern là \b[\D\d._%+-]+@[\D\d.-]+\.[\D]{2,6}\b
  • modifiers là i

Phương thức của RegExp là .test(i), sẽ kiểm tra trong xâu có thành phần như pattern không.

Thuộc tính đầu tiên của RegExp là \b sẽ tìm trường hợp nằm ở đầu tiên của chuỗi, ta thấy \b cũng xuất hiện ở cuối chuỗi, do đó nó sẽ là toàn chuỗi.

Xét biểu thức nằm trong []

  • \D\d : Lấy kí tự non-digit character + digit character 🙂 Tức là lấy toàn bộ các kí tự
  • ._%+- : Lấy toàn bộ các kị tự trên
  • @[\D\d.-] : Lấy dấu @ và toàn bộ các kí tự cộng với dấu và 
  • \.[\D]{2,6} : Lấy dấu và các kí tự không phải số lặp lại 2 đến 6 lần

Như vậy xâu ta nhập vào phải có dạng một Email. Submit, Ok 🙂

Level 8: 

Level8

Xem Source Code, ta thấy phải nhập vào xâu bằng document.title.substr(10, 15). Nhìn lên trên ta thấy title = “Level 8 | J2TeaM War Game – Test Programming and Hacking Skills”. textbox nhập vào phải bằng xâu con của title từ vị trí thứ 10, lấy 15 kí tự

Nhập vào J2TeaM War Game, Submit, OK 🙂

Level 9: 

Share this:

Thích bài này:

Thích
Đang tải …

Viết một bình luận