XSS-Lab Writeup

XSS-Lab Writeup

XSS原理简述

XSS 又叫 CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往 Web 页面里插入恶意 html 代码,当用户浏览该页之时,嵌入其中 Web 里面的 html 代码会被执行,从而达到恶意用户的特殊目的。它与 SQL 注入攻击类似,SQL 注入攻击中以 SQL 语句作为用户输入,从而达到查询 / 修改 / 删除数据的目的,而在 XSS 攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。原理是 WEB 应用程序混淆了用户提交的数据和 JS 脚本的代码边界,导致浏览器把用户的输入当成了 JS 代码来执行。XSS 的攻击对象是浏览器一端的普通用户。

题目在BUUCTF平台上有,也可以自行搭建,建议在建议在谷歌或者Edge做吧,亲身体验用火狐有些payload打不通

level 1

这道题先找注入点,发现可控参数只有name,f12查看源码,name的值被直接拼接在html标签中。直接?name=<script>alert(1)</script>,弹出窗口,xss注入成功。

level 2
  1. 看到输入框,我们输入<script>alert(1)</script>后提交,发现没有弹窗,查看源码即可发现,输入的值在属性value里面,这里面的值是不会被执行的,那我们可以构造闭合input标签,即"/><script>alert(1)</script>,提交后即可。

  2. 此外,还可以闭合value属性并添加事件属性的方式弹窗,输入

    " οnclick="alert(1)
    

    提交后点击输入框即可弹窗。

level 3
  1. 在输入框中输入<script>alert(1)</script>看看代码将被嵌入到何处,会被怎么处理
  2. 查看源码后可以发现输入的<>被 htmlspecialchars 函数过滤,这里考察绕过html实体编码,这个函数会对尖括号和双引号实体编码,但对单引号无效,而且值得注意的是,这里的value属性是使用单引号闭合的
  3. 查看源码可以看到注入成功,点击输入框即可弹窗
level 4
  1. 照常输入<script>alert(1)</script>,查看源码后发现尖括号被过滤为空,多用几个尖括号也无法绕过
  2. 那么尝试添加事件属性的方法闭合
level 5
  1. 和之前一样,输入的值还是在value属性中,这次可以发现script被过滤为scr_ipt,尝试大小写绕过无效

  2. 尝试使用第二种办法发现onclick中的on被过滤为o_n,添加事件属性的方法无法使用

  3. 两种方法都被过滤了,那我们可以使用herf标签试试,点击图片后即可弹窗

    "/><a href="javascript:alert(1)"
    
level 6
  1. 和 level 5 一样,script被过滤,但大小写绕过成功bypass

  2. 那么直接闭合input标签即可

    " /><scRipt>alert(1)</scRipt>
    
level 7
  1. 这里将script替换为空,尝试双写绕过,看看是不是回溯过滤

    <sscriptcript>alert(1)</sscriptcript>
    
  2. 发现经处理后外面一层script成功存活,那么直接构造闭合即可

    " /><sscriptcript>alert(1)</sscriptcript>//
    
level 8
  1. 可以发现输入的值到了a标签的herf属性中,并且script被过滤,大小写绕过无效

  2. 尝试上面介绍的方法后发现都被过滤掉了,观察源码后发现,value中被html实体编码,而href里面没有,那猜想可以用html实体编码后写进去

    java&#115;&#99;&#114;&#105;&#112;&#116;:alert(1)
    
  3. 点击友情链接即可弹窗

level 9
  1. 和 level 8 不同的是多了检查是否为合法链接,通过尝试后可以发现,需要在传入的值中含有http://

  2. 那么payload可以为

    java&#115;&#99;&#114;&#105;&#112;&#116;:alert('http://')
    

    如果使用双引号会被html实体编码

level 10
  1. 这道题的输入框没有给出来,查看代码发现有几个input标签被隐藏了,GET传入参数值,经尝试只有t_sort在源码有显示

    t_sort=" /><scRipt>alert(1)</scRipt>//
    
  2. 发现尖括号被过滤,input标签无法被闭合,尝试添加事件属性,但input标签被隐藏,不能直接使用事件

  3. accesskey 属性规定激活(使元素获得焦点)元素的快捷键,可以利用这个属性进行激活

    t_sort=2" accesskey="x" onclick="alert(1)
    

    注意:不同浏览器激活方式不同,设置快捷键的时候尽量不和其他预设快捷键冲突
    图片出自菜鸟教程

  4. 还可以添加type属性,使得事件属性可以被触发

    t_sort=" onclick='alert(1)' type="text
    
level 11
  1. 查看源码可以发现t_ref的值是Referer头,而Referer头内容可控

  2. 那么存在Referer头XSS注入,利用HackBar或者Burp Suite均可修改

    Referer: " onclick='alert(1)' type="text
    
level 12
  1. 和 level 11类似,只是t_ua的值是User-Agent头,且内容可控

  2. 存在UA头XSS注入

    User-Agent: " onclick='alert(1)' type="text
    
level 13
  1. 有了前面的经验,我们很容易想到这里存在cookie头XSS注入

  2. 将cookie修改值构造xss注入即可

    Cookie: user=">onmouseover='alert(1)' type="text"
    
level 14,level15

都没有正常显示作者writeup该有的东西,奇奇怪怪

level 14考察的是利用文件在网页中解析触发payload

level 15考察的是AngularJS的javascript框架漏洞,包含其他页面的xss漏洞对本页面造成影响

level 16
  1. 正常进入level 16是有一个GET参数,查看源码也没看到别的注入点,直接尝试一手

  2. 可以发现script和/被过滤,那么可以添加一个不含这俩的标签利用事件属性弹窗

    <img src=1 onerror=alert(1)>
    
  3. 查看源码可以发现空格被转义&nbsp;,可以使用%0a换行符绕过

    <img%0asrc=1%0aonerror=alert(1)>
    
level 17
  1. 查看源码不容易看出参数拼接在代码中的位置,直接修改为

    ?arg01=aaaaa&arg02=bbbbb
    
  2. 可以发现源码中有这样一段

    <embed src=xsf01.swf?aaaa=bbbb width=100% heigth=100%>
    
  3. 由此可添加事件属性

    ?arg01=a&arg02=b onmouseover=alert(1)
    
  4. 我在火狐中不知道为啥激活不了这个标签,建议在谷歌或者Edge吧

level 18

payload和 level 17 一致

level 19

未完待续,这题我感觉难度陡增

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值