xss各种姿势的学习(绕过)及重要总结

优采云 发布时间: 2022-04-29 08:15

  xss各种姿势的学习(绕过)及重要总结

  靶场搭建

  靶场下载地址:

  搭建很简单【】这里就不讲了。

  这里也可以像我一样直接用别人搭建好的公共靶场:。进入然后点击游戏挑战即可。不过因为是别人搭载的服务器,有可能会有加载过慢等等的问题,所以建议还是搭在本地练习。

  个人重要总结

  第一点:F12查看网络中的响应包、右键查看页面源代码和F12查看元素的区别

  先来看F12查看网络中的响应包、右键查看页面源代码和F12查看元素的区别:

  F12查看网络中的响应包:

  

  右键查看页面源代码:

  

  上面这两个都是一样的,查看的都是最原始的页面源代码。

  其中能正确判断闭合是用'单引号还是"双引号,输出点有没有被实体编码等等;

  F12查看元素:这种无法正确判断闭合是用'单引号还是"双引号,输出点有没有被实体编码

  

  所以这里总结出来一点,

  就是xss的时候,先输入666(用来判断容易被发现)

  然后优先看右键点击查看页面源代码,先判断闭合是要用'单引号还是"双引号,输出点有没有被实体编码等等

  因为这个是最原始的页面源代码,也可以F12查看网络里的响应包,这两种是一样的;

  而F12查看元素是源代码 + 网页js渲染,有点不太一样,不是最原始的页面源代码。不过有时候这两个得结合在一起看。

  右键查看页面源代码或F12查看网络中的响应包:就是别人服务器发送到浏览器的原封不动的代码,也就是最原始的代码。<br style="outline: 0px;" /><br style="outline: 0px;" />(F12)检查元素:看到的就是最终的html代码。即:源代码 + 网页js渲染 。<br style="outline: 0px;" /><br style="outline: 0px;" />【注】在源代码中找不到的代码,是在浏览器执行js动态生成的。<br style="outline: 0px;" />

  优先看右键点击查看页面源代码的原因:

  这个是最原始的页面源代码。

  像level3中value在F12中是"双引号闭合,而右键查看却是'单引号闭合,结果是'单引号闭合最后能成功;还有被实体编码了也是右键查看才能看的出来。

  根据这些种种原因,还是优先看右键点击查看源代码的页面源代码,先把上面这些判断清楚,然后次看F12查看元素。不过有时候这两个得结合在一起看。

  第二点:属性的属性值是否要加引号

  属性名,像事件属性,比如onclick,onerror这样的,它们后面的属性值的引号可加可不加。

  比如onerror=alert(1)和onerror="alert(1)"都是可行的。不过如果没有把引号给过滤掉,能加最好还是要加。

  而src属性的属性值要加引号,但是也不是必须的。

  像less15关的src属性的属性值就必须要加引号才能成功;而像

  <ImG sRc=1 onerRor=alert(1);>

  这样在有的场合也能成功。所以一切还是要具体情况具体分析吧。

  第三点:属性的属性值要加引号的话,引号不能重复

  举例:

  x不行,<br style="outline: 0px;" />x可以<br style="outline: 0px;" />

  第四点:单引号、双引号和反引号

  如果是在html标签中,我们可以不用引号;

  如果是在javascript的函数中,我们可以用反引号代替单双引号。

  举例:

  1可以,<br style="outline: 0px;" /><img src=`1` onerror=alert(1);>不行;<br style="outline: 0px;" /><br style="outline: 0px;" />1可以,<br style="outline: 0px;" />1不行;<br style="outline: 0px;" /><br style="outline: 0px;" />x可以,<br style="outline: 0px;" />x可以;<br style="outline: 0px;" />

  第五点:Javascript引擎特性和js代码中需要注意的点

  js代码中,利用空格,回车,tab键,切记只有""包裹的js代码才可以随便利用空格,回车,tab键,比如src="java script:xxxx",而这样不行:src=java script:xxxx。而且回车、换行不支持在on事件中使用,空格可以

  Javascript引擎特性:Javascript语句通常以分号结尾,但是如果引擎判断一条语句完整的话,且结尾有换行符,就可以省略分号。

  例:

  var a = 1<br style="outline: 0px;" />var b = 2;<br style="outline: 0px;" />//上述语句都正确<br style="outline: 0px;" />

  绕过姿势

  这里总结了些绕过姿势,无论在实战还是靶场中的学习都能用上。也可以看看这两篇文章:XSS过滤绕过速查表()

  XSS之绕过简单WAF总结()

  空格被过滤的情况

  用/代替空格

  <br style="outline: 0px;" />

  用回车符CR(%0d) 和换行符LF(%0a)取代空格

  在HTML中%0a和%0d是可以当成空格使用的。

  <br style="outline: 0px;" />

  关键字被过滤的情况用标签(个人感觉比较少被过滤,起码比,即可成功弹框,那么我们也就成功了:

  

  后台源代码分析

  通过$_GET["name"],获取name的值,没有过滤通过echo直接进行了输出

  

  level2:双引号尖括号闭合

  过程

  这里我们在搜索框输入,可以发现其回显在了页面上,但是却没有弹框。

  这里可以看到标红的第1个点处我们的payload变成黑色了,那么第1个点肯定没希望了。

  

  这里再多放一个右键点击查看源代码的图,从这里我们才能看出来端倪,其中第一个点的尖括号是被实体编码了。

  F12看元素看不出来第一个点的尖括号是被实体编码了:

  

  从这里我们可以看出右键点击查看源代码和F12检查元素查看页面源代码有些许不同:

  右键查看页面源代码或F12查看网络中的响应包:就是别人服务器发送到浏览器的原封不动的代码,也就是最原始的代码。(F12)检查元素:看到的就是最终的html代码。即:源代码 + 网页js渲染 。<br style="outline: 0px;" /><br style="outline: 0px;" />【注】在源代码中找不到的代码,是在浏览器执行js动态生成的。<br style="outline: 0px;" />

  那么这里回到上面标红的第2个点,第2个点会把我们输入的payload原封不动、不进行过滤的变成keyword的value。

  那么这里我们把前面的"和input标签闭合:"&gt;,即可成功

  后台源代码分析

  

  echo的时候,采用htmlspecialchars函数把预定义的字符转换为 HTML 实体;然而获取浏览器提交的keyword值,未进行如此转换,输出在。

  如果是keyword提交的是,返回的就会是,javascript引擎并不会执行//,php处理后返回的html就会是 //"&gt;,//是注释的作用,javascript引擎执行,最后成功

  level3:事件绕过和单引号闭合

  过程

  输入payload"&gt;

  后台源代码分析

  

  对get请求的keyword参数,用str_replace()函数过滤掉尖括号,返回给keyword的值;

  采用htmlspecialchars函数把预定义的字符转换为 HTML 实体后用echo直接输出在返回的html中。

  less5:javascript伪协议绕过

  过程

  先右键查看原始的页面源代码,发现是双引号闭合,输入尖括号发现第一个输出点被实体编码,而第二个输出点没被实体编码,构造payload"&gt;alert(1)

  那么这里利用没有过滤尖括号,构造a标签再尝试利用a标签的href属性执行javascript伪协议,payload:"&gt;

  然后页面出现了xss,点击就成功了。

  

  后台源代码分析

<p>

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线