XSS漏洞的绕过策略

  • 关键字被过滤的绕过
  • 大写绕过
  • 双写关键字
  • input标签的绕过
  • 闭合input标签写js代码
  • javascript特殊事件input标签
  • input标签被hidden
  • a标签的绕过
  • javascript特殊事件a标签
  • Unicode编码绕过
  • 添加链接绕过
  • 首部字段内容添加到标签内


关键字被过滤的绕过

htmlspecialchars()语句可以将<>等敏感字符改动为html字符实体,用于变量的处理上。
strpos("You love php, I love php too!","php");查找 “php” 在字符串中第一次出现的位置.

大写绕过

猜测后端如果只是简单的利用 ,str_replace函数限制小写字母,没有用strtolower($_GET[‘keyword’]),完全可以替换大写字母来绕过

双写关键字

如果后端把script关键字直接删除关键字怎么办?
可以试试双写关键字
"><a hrhrefef=javascriscriptpt:alert(1)>xss</a>//

input标签的绕过

From表单中输入信息的标记是input标记,可以输入一行信息,input是单个标记<input name="" value="" type="" />输入类型是由类型type属性定义的。

闭合input标签写js代码

'><script>alert(1)</script>//:闭合input标签,写入js代码

javascript特殊事件input标签

猜测后端遇到转换特殊字符为html实体的htmlspecialchars()函数或者str_replace特殊字符删除函数,是可以用标签的特殊事件来执行js代码
onfocus=javascript:alert('xss');onclink=javascript:alert('1')给javascript加""效果也一样

onfocus=javascript:js代码  //事情在对象焦点时候发生

onfous可用于<input> <select> <a>

最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时输入框被选中可以输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此点击当前页面的输入框就可以完成弹框了。

input标签被hidden

input标签的属性type值为hidden,hidden输入框被隐藏。可以继续提交input标签然后修改type的类型。

a标签的绕过

javascript特殊事件a标签

如果里的onfocus=javascript:alert('xss')特殊事件被PHP语言专门照顾。可以使用 标签里的特殊事件 <a href="javascript:alert(1)">xss</a>

Unicode编码绕过

javascript语言遇到“\u”或者是“%u”加上4位16进制Unicode码值会先进行解码然后再作为命令执行。因为检测语句在PHP代码中,所以对payload进行Unicode编码即可实现绕过。

<a href="javascript:alert(1)">xss</a>
<a href="javascript:alert(1)">xss</a>
// 俩者效果相同

添加链接绕过

后端的PHP代码中可能会检测a标签的href属性中是否带有合法的网址http://。添加javascirpt代码并把网址注释掉即可绕过。
<script>alert(1)<script>//http://www.baidu.com网址被注释

首部字段内容添加到标签内

有时侯首部字段的内容会出现在input标签的value属性中,故可以通过修改首部字段来绕过