xss-labs (level1-16)保姆级教程

必看原理

目录

level1 不使用过滤器

level2 闭合标签

level3 单引号闭合并添加事件

 level4 双引号闭合并添加事件

leve5 javascript伪协议

level6 大小写绕过

level7  双重书写

level8 字符实体

​level9 检测关键字存在

level10 隐藏信息

level11 Referer信息

 level12 user-agent信息

 level13 Cookie信息

 level14 exif xss

level15 ng-include属性

level16 替换


level1 

分析页面可得,传参 name=test ,页面回显参数的值test,以及参数的长度

 分析源码,我们可以看到它将name的值赋给 $str 并在<h2></h2>标签中调用

那么 就很明显,这一关主要就是考察反射型xss

但是由于不知道服务器端对于提交的敏感字符有没有过滤,

所以这里直接在name参数中赋值一个简单的弹窗来进行测试。<script>alert('xss')</script>

我们可以看到 js的弹窗代码 顺利执行了 

level2

这关我们可以发现多了一个文本框,我们先用之前的语句填入文本框里面,发现不行

 分析源码,我们发现  htmlspecialchars($str) 对keyword参数的值进行了处理。

htmlspecialchars() 函数

        把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体 (html字符实体),把 < 和 > 转换为实体常用于防止浏览器将其用作 HTML 元素。但是用户又需要在页面上显示输入时,转换为HTML实体能防止代码的运行。如在xss的防御中就能够体现。

        这个函数是把预定义的字符转换为 HTML 实体,说明把<script>标签吃掉了,那么我们的突破口就在value这里。

 我们可以通过闭合标签,使得<input name=keyword value="'.$str.'">这一句就闭合掉,即在<script>alert('xss')</script>前面加">,对前面input标签进行闭合。

 再此尝试注入,成功

level3

        使用第二关的码测试一下,发现没用。

        分析源码,发现不仅对"号做了防御,并且value这里也加了htmlspecialchars函数

        虽然对了双引号做了防御,但是却放行单引号,这种情况我们可以通过事件标签触发表单执行。

 这种情况我们可以通过事件标签触发表单执行,即通过使用HTML的事件知识对其注入。

html事件https://www.runoob.com/tags/ref-eventattributes.html

这里我们用到了

onclick 

http://127.0.0.1/xss-labs/level3.php?keyword=test' onclick='alert("xss")'&submit=%E6%90%9C%E7%B4%A2

单引号闭合

提交url之后需要点击输入框,触发事件( onclick 当单击鼠标时运行脚本)

 level4

分析源码 我们发现 < 和 > 被替换成 空格

且 value 的闭合条件为 双引号 

与上一关一致,更改单引号为双引号

点击文本框触发事件 

leve5

我们发现它对<script和on的都做了特殊处理,而且还使用strtolower函数对所有字符串变成小写,单引号也不可用了

还是可以闭合语句,通过双引号加>闭合 ( 加 > 是因为要闭合input标签,之后写入自己的标签)

javascript伪协议以及标签进行注入
使用javascript伪协议以及标签进行注入,就是在代码前面加上javascript:,在这里的标签不一定只是链接标签,还可以其他标签,可以自己了解。

http://127.0.0.1/xss-labs/level5.php?keyword="> <a href='javascript:alert(/xss/)'>%E6%90%9C%E7%B4%A2

level6

尝试使用之前的注入方式失败

分析源码,我们发现他虽然过滤了很多,但相比较5关没有使用strtolower函数(对所有字符串变成小写) 所以可以考虑大小写绕过

http://127.0.0.1/xss-labs/level6.php?keyword="><a HREF='javascRIPT:alert(/xss/)'>

http://127.0.0.1/xss-labs/level6.php?keyword="><scRipt>alert(/xss/)</scRipt>

level7

分析源码,发现相比之前过滤的东西更多了,但是它却把特殊语义的字符串修改成了空字符串,且只过滤一次,我们可双写绕过

 "> 对input标签闭合

http://127.0.0.1/xss-labs/level7.php?keyword=test"><sscriptcript>alert(/xss/)</sscriptcript>&submit=%E6%90%9C%E7%B4%A2

level8

分析源码我们会发现之前的方法都不可以使用了

 但是我们会发现有一个友情链接,与我们之前与使用的javascript为协议一致

这里将是一个突破口,由于script被过滤了但是我们可以尝试将script实体化

实体化(转换工具自行百度)

javascript:alert(/xss/)

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#47;&#120;&#115;&#115;&#47;&#41;

 我们需要将这串字符写入 文本框中 再点击添加友情链接 最后点击友情链接 即可成功

(通过hackar提交是不可行,做这关的时候给我郁闷坏了,前几关都可以)

在浏览器中查看一下源码,验证一下我们的想法,和第五关使用的javascript伪协议一致

level9

分析源码发现 在第八关的基础上加了一个判断语句

strpos()函数,结合判断语句,我们必须在代码中加入http://  但是并没有过滤HTML实体编码,所以我们还是使用编码绕过。

 使用过滤HTML实体编码,但是由于需要加入http://,肯定不能在http://后面加代码,必须在前面,并且将http://注释掉才能执行。

javasc&#114;ipt:alert(/xss/)//http://

 level10

这一关使用之前的方法都无法成功,我们可以分析一下源码

我们通过url 传入的keyword参数只是处理了一下便输出了,没有可以注入的地方。

但是我们还会发现这里有三个input标签,三个钟只有最后一个标签可以下手。

这里有一个隐藏的参数t_sort,代码只是过滤了< 和>并没有其他操作。

我们可以从这里入手,我们可以使用触发事件标签进行。

还有一点要注意的是,由于页面上没有文本框,所以我们需要在url后面的添加 type="text"(或者修改源码将hidden,修改为text)

提交url 后页面上会显示一个文本框 ,点击即可过关。

http://127.0.0.1/xss-labs/level10.php?keyword=1&t_sort=" type="text" onclick="alert('xss')

 

level11

分析源码,我们发现有一句是之前没有见过的

$str11=$_SERVER['HTTP_REFERER'];

$_SERVER['HTTP_REFERER']可以获取当前链接的上一个连接的来源地址,即链接到当前页面的前一页面的 URL 地址,可以做到防盗链作用,只有点击超链接(即<A href=...>) 打开的页面才有HTTP_REFERER环境变量, 其它如 window.open()、 window.location=...、window.showModelessDialog()等打开的窗口都没有HTTP_REFERER 环境变量。

 简单来说呢,就是HTTP_REFERER会获取http请求头中的Referer字段,就是我们上一级网页的url。

那么我们就需要使用插件(或者burpsuite 进行抓包),修改Referer字段。

这里我使用了火狐的ModHeader插件修改,同样点击文本框触发事件执行脚本。

" type="text" onclick= "alert('xss')

 level12

网页查看源代码发现了,t_ua 的值为User-Agent,那么我们尝试上一关的方法修改User-Agent

 ModHeader插件或者burpsuite工具修改User-Agent,同样点击文本框触发

" type="text" onclick="alert(/xss/)

 level13

分析源码,我们发现了一条语句

$str11=$_COOKIE["user"];

 所以我们可以修改 cookie 来达到注入的目的

 老样子,使用火狐插件Cookie-Editor或者burpsuite来修改

" type="text" onclick="alert(/xss/)

 

 level14

跳过~

查了许多教程大部分都跳过了

据部分教程说与 Exif xss 有关

 

level15

在后台发现一个<!--ngInclude: 1.gif-->语句

  分析源码,发现ng-include,很有可能这个指令就是突破口,毕竟也没其他地方可以下手了

ng-include指令:

 利用ng-include指令的特性包含一个有漏洞的html文件,注意这里有对尖括号的过滤。

我们可以利用第一关的漏洞完成

http://127.0.0.1/xss-labs/level15.php?src='http://127.0.0.1/xss-labs/level1.php?name= "><a href="javascript:alert(/xss/)">'

 

level16

 分析源码

发现这一关得到过滤将空格、反斜杠、script都被str_replace函数替换成&nbsp了

我们可以将%0a或者%0D当成空格使用,在HTML中这样是合法的。

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ErYao7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值