Cross-Site-Scripting

xss之过滤

几种xss绕过的姿势:

  • 前端限制绕过,直接抓包重放,或者修改html前端代码。比如反射型XSS(get)中限制输入20个字符。
  • 大小写,比如<SCRIPT>aLeRT(111)</sCRIpt>。后台可能用正则表达式匹配,如果正则里面只匹配小写,那就可能被绕过。
  • 双写(拼凑),<scri<script>pt>alert(111)</scri</script>pt>。后台可能把<script>标签去掉换,但可能只去掉一次。
  • 注释干扰,<scri<!--test-->pt>alert(111)</sc<!--test-->ript>。加上注释后可能可以绕过后台过滤机制。
  • 编码的方式:后台过滤了特殊字符,比如<script>标签,但该标签可以被各种编码,后台不一定会过滤当浏览器对该编码进行识别时,会翻译成正常的标签,从而执行。

 

 

当我们输入<script>' ":,33

 

 

我们发现我们输入的内容只有<script>标签未显示,说明<script>标签被过滤了。

尝试用大小写混合的方式看看能否绕过

payload如下:

<SCRIpT>alert("liuxixi1")</sCRiPt>

成功出现弹窗!

 

payload2:

<img src=2 onerror=alert("刘茜茜")>

 

 !!解释<img src=2 onerror=alert("刘茜茜")>:

完整的是:<script type="text/javascript">alert("刘茜茜")</script>
js,alert("刘茜茜")语句是弹出消息框,显示刘茜茜
<img src=1 onerror=alert("刘茜茜")>
是当图片没有找到路径(即src=“路径:可以使相对路径也可以使绝对路径”找不到图片)就会 弹出消息框,显示刘茜茜 ,就是onerror=alert("刘茜茜")起的作用

 

 xss之htmlspecialchars

htmlspecialchars()函数定义及用法:

  在php中,htmlspecialchars()函数是使用来把一些预定义的字符转换为HTML实体,返回转换后的新字符串,原字符串不变。如果 string 包含无效的编码,则返回一个空的字符串,除非设置了 ENT_IGNORE 或者 ENT_SUBSTITUTE 标志;

被转换的预定义的字符有:

  &:转换为&amp;

  ":转换为&quot;

  ':转换为成为 '

  <:转换为&lt;

  >:转换为&gt;

可用的引号类型:

  ENT_COMPAT:默认。仅编码双引号。

  ENT_QUOTES:编码双引号和单引号。

  ENT_NOQUOTES:不编码任何引号。

当我们输入<script>./()2' ":时,输出结果是我们输入的内容都被记录了,说明有些内容是被编码了。

 

 

 

 由前面被转换的预定字符可以知道,此函数可以编码&," ,<,>,但是单引号同样可以使用。

构造payload如下:

'onclick='alert("liuxixi2")'

前后的单引号是闭合

 xss之href输出

 

 

 输入www.sohu.com,查看源代码,发现输入的内容显示在a标签的href属性里面,可以使用javascript协议来执行js

 

 

 

 这个页面会判断我们输入的内容,然后判断我们输入的网址,如果输入的不是百度会对我们输入的内容用 htmlspecialchars() 进行处理。这次htmlspecialchars函数使用了ENT_QUOTES类,也加上了对单引号的转义,

如果要对 href 做处理,一般有两个逻辑:

  • 输入的时候只允许 http 或 https 开头的协议,才允许输出
  • 其次再进行htmlspecialchars处理

payload如下:

javascript:alert("liuxixi3")

成功弹窗:

 xss之js输出

输入1111,查看源码

 

 发现我们输入的内容在js当中,所以我们需要将前面的<script>标签闭合掉就能显示我们输入的内容了。

payload如下:

</script><script>alert("liuxixi3")</script>

成功出现弹窗

 

 

posted @ 2020-02-27 17:04  刘茜茜  阅读(1074)  评论(0编辑  收藏  举报