能够发现90%以上XSS漏洞的7个主要的XSS案例。

在阅读有关XSS的材料时,我们通常会看到经典的<script> alert(1)</ script>作为这种漏洞的证明(PoC –概念证明)。尽管确实如此,但它并没有超出此范围,这使得该领域的新手可以寻求更多解决方案来应对现实情况。

 

因此,这是每个人都应该知道能够利用那里的绝大多数XSS缺陷的7种情况。建立了一个网页来显示它们的变化(单引号或双引号)来进行训练(单击以转到它):

 

 

在源代码的开头,有一个HTML注释,其中包含用于触发每种情况的所有参数。它们都适用于GET和POST请求。

您可能会注意到,所有情况都是基于源的,这意味着注入总是出现在HTTP响应正文中检索到的源代码中。独立于被反映或存储的类型,这里重要的是它们在DISPLAYED时出现的上下文,因此我们将始终使用被反映的作为主要示例。有些XSS缺陷不会出现在源代码中,而基于DOM的缺陷不会在此处涵盖。

请记住,仅在没有本地XSS过滤的浏览器(例如Mozilla Firefox)中尝试以下示例。

1. URL反射

当URL在源代码中以某种方式反映时,我们可以向其添加自己的XSS向量/有效载荷。对于PHP页面,可以使用斜杠(/)在页面名称后的URL中添加任何内容(无需更改)。

1. http://brutelogic.com.br/xss.php/”><svg onload = alert(1)>

需要使用前导标签(“>”)来突破当前标签,以便插入新标签。

 

尽管使用不同语言有多种原因(反射可能也会出现在路径或URL参数中),但对于PHP来说,罪魁祸首通常是提交表单的操作字段中的全局变量$ _SERVER [“ PHP_SELF”]。

2.简单的HTMLi(HTML注入)

最简单的输入就是在现有标签之间或之后的代码中反映出来的。无需转义或破坏任何内容,任何简单的XSS向量(例如<tag handler = jsCode>形式的向量)都可以完成工作。

2. http://brutelogic.com.br/xss.php?a=<svg onload = alert(1)>

 

 

3.内联HTMLi

几乎和上一个一样简单,但带有一个小写的“>”以打破当前标签。

3. http://brutelogic.com.br/xss.php?b1=”><svg onload = alert(1)>

 

4.内联HTMLi:没有标签破损

当输入置于HTML属性中并且过滤的字符大于(())时,就不可能像上一种情况那样突破当前标记。

 

 

因此,我们使用适合于我们要注入的标签的事件处理程序,例如:

4. http://brutelogic.com.br/xss.php?b3=” onmouseover = alert(1)//

这将关闭该值,并为插入onmouseover事件处理程序留出空间。指向alert(1)后跟双斜杠以注释掉悬挂的引号,当受害者将鼠标指向受影响的输入字段时,将触发js弹出窗口。

 

 

5. HTMLs in Js(JavaScript)块

输入有时会落入javascript块(脚本标签)中,通常是代码中某些变量的值。但是,因为HTML标签在浏览器的解析中具有优先权,所以我们可以简单地终止该块并插入一个新标签。

5. http://brutelogic.com.br/xss.php?c1=</script><svg onload = alert(1)>

 

 

6.简单的Js注入

如果以某种方式过滤了脚本标记,则先前的利用将失败。

 

 

因此,方法是注入JavaScript代码,同时遵守语法。一种已知的方法是通过将易受攻击的变量的值“连接”到我们要执行的代码。因为我们不允许任何引号挂起,所以我们首先中断,将其连接到我们的代码(带有减号),然后进行相反的操作(连接并插入一个引号)以获取有效的javascript语法。

6. http://brutelogic.com.br/xss.php?c3='-alert(1)-'

 

 

7.逃脱的Js注射

在前一种情况下,如果用反斜杠(\)对引号(负责变量值的突破)进行转义,则注入将不起作用(语法无效)。

 

 

为此,我们有一个小技巧:逃脱。我们插入一个前导反斜杠以逃避添加的反斜杠,然后引用将起作用。在“连接”到所需的js代码之后,我们需要注释掉其余部分,因为在注入的其余部分无法重复该过程。

7. http://brutelogic.com.br/xss.php?c5=\'-alert(1)//