xsslab随笔

这里采用火狐浏览器本地环境搭建,项目地址:https://github.com/do0dl3/xss-labs

lab1

查看源代码

和url对照

是直接将传入的name在插入在标签之间,而且返回了字符串长度,所以这里尝试反射性xss,?name=<script>alert('xss')</script>,其实若分析对应php代码,发现,他将name使用get方式传入字符串放入<h2></h2>中,未进行防护过滤,所以存在反射性xss。

lab2

感觉像lab1类似,只不多了搜索框,填入<script>alert('xss')</script>,并无弹窗,查看源代码:

可以看到这里其实将我们传入的字符串进行了重新的过滤编码<与>都进行了编码成html实体,一般通过htmlspecialchars()实现,所以流程为先将我们传入的字符串进行编码,再放入<h2></h2>,然而value并未进行过滤编码,那么可以对value前面的">进行前闭合,后面加上//进行注释处理,又可执行xss:"><script>alert('xss')</script>//

lab3

简单的看起来与lab2差不多,先输入<script>alert('xss')</script>,查看情况,没有弹窗,这里查看源代码:

这次两边都进行了过滤,这时可以考虑特殊情况触发执行,这篇文章里有较为详细的说明:https://blog.csdn.net/qq_36374896/article/details/82755793

这里使用onfocus进行构造keyword='οnfοcus=alert('xss') '

在点击输入行,即可触发。

lab4

这里还是老办法,使用<script>alert('xss')</script>

输入框的代码已经有了错误,看源代码:

和lab3差不多,只不过是把那些< >在输入框中删除了,继续使用lab3的payload,keyword="οnfοcus=alert('xss') " (这里双引号与源代码一致)。

lab5

老规矩,先试试<script>alert('xxx')</script>,无弹窗,看看源代码

上面先对我们写的<>作了编码,然后下面对第一个script做了替换,尝试使用异常响应"οnfοcus=alert('xss')"

依然不行,对onfucus也进行了过滤,这里考虑使用标签来执行,即不考虑直接弹出,而且添加标签再触发:?keyword="> <a href=javascript:alert('xss') > xss</a> //

前面使keyword闭合,后面添加javascript标签,并注释后面。完成。

lab6

<script>alert('xss')</script>填入

和lab5差不多,试试lab5的payload:?keyword="> <a href=javascript:alert('xss') > xss</a> //

发现并不能产生点击条件,看代码:

对href和也进行了替换,那么这里尝试大小混写:

?keyword=">  <a hREF="javascript:alert('xss')">xss</a>//

完成。

其实观察源代码会发现,这里还对data做了过滤,索性就详细的说一下其他的xss触发。图片img标签如果src正常就会显示图片,如果错误的话,就会执行,onerror事件,所以有时候可以这样构造:

?name=<img src=111     οnerrοr=alert('xss')>

data是进行编码然后执行的一种方式,如:

?name=<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=">test</a>

当然也支持其他编码。

lab7

还是<script>alert('xss')</script>填入

这次直接删除了,试试大小写绕过:

并不行,那么试试双写绕过,sql注入也常用

"oonnfocus=javascrscriptipt:alert('xss') '

成功。

源代码是把所有转化成了小写做处理,利用双写绕过。

lab8

我们先试试大小写:?keyword=javaSCRIPt:alert(‘xss’)

绕不过,且没有删除敏感字,自然不能使用双写,这里使用js编码

javascript:alert('xss')

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

成功。

观察源码还会发现,他对“闭合也做了过滤。

lab9

界面和lab8的差不多,不如直接试试lab8的payload:

显示不合法,可能对http作了检测,那么此时就在后跟上正确的连接试一下

keyword=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#115;&#39;&#41;//http:baidu.com

lab10

看页面好像就一个显示位置,那么看看源代码:

有四个位置可以进行展示,只不过hidden了,那我们试试开发者工具能不能把haiden变为text:

t_sort=" type="text"可以

payload:name=/script>&t_sort=" type="text" οnclick="alert('xss')

成功。

lab11

尝试将隐藏标签

?t_link="tpye"=text&t_history="type"=text&t_sort="type"=text&t_ref="type"=text

可与发现可以更改,只不过,对我们的引号进行了过滤,无法闭合。

看来直接改有些困难,用burp抓包试一下。

在请求里没有发现referer,那么我们先随便加一个:

发现可以改变值,那么不如在这填入恶意代码。

" type="text" οnclick="alert('xsss')

在看源代码referer头的值出现在了t_ref标签的value属性值。

源代里看到,是把referer值传到里面。

lab12

看看源代码:

看看t_ua,有点像数据包uer agent的格式(甚至缩写都是提示),那么我们就像lab11一样

好像构造成功了,来试试:

完成,思路和lab差不多。

lab13

这肯定猜cookie啊,直接试:

注意这里不能直接覆盖cookie,可能对cookie做了检测,最后成功过关。

lab14

暂时没法做,大致思路是利用上传图片,更改图片信息触发xss。

lab15

这个刚开始看不出所以然,不如直接看页面代码:

根据初始的url和页面代码可以看到,这次我们需要控制的大概就是src,他会在最后一行起作用,最简单的思路大概就是关闭标签的操作,scr="><script>alert('xss')</script>

看来进行了字符的替换,我么注意到有ng-include,这个是包含外部的html文件的,有这样的特点:

1.ng-include,如果单纯指定地址,必须要加引号。

2.ng-include,加载外部html,script标签中的内容不执行。

3.ng-include,加载外部html中含有style标签样式可以识别。

那我们就考虑把lab1的变换给出,且要绕过script关键字,就用onerror进行触发:

?src='level1.php?name=<img src=1 οnerrοr=alert(1)>'

成了。

lab16

16了,进行简单的应该不是太行,我们还是要进行简餐测试下:<script>alert('xss')</script>

这里值得注意,把空格都编码了,这就有些难受了,且无法闭合。

空格的问题可以用回车代替:%0a

然后其他的用onerror。

payload:?keyword=<img%0Asrc=1%0Aοnerrοr=alert('xss')>?keyword=<img%0Asrc=1%0Aοnerrοr=alert('xss')>

lab17

这里因为flash插件不支持的原因就没往下做(因为懒得下flash)。

看网上其他师傅的说法是<embed></embed里触发条件,比较简单。

lab18

和lab17的方法一模一样。

lab19

这次是flash xss,知识盲区,看网上师傅 的思路。

flash有可以调用js的函数,这些函数如果使用不当也是会造成xss的。常见的可触发xss的危险函数有:

getURL、navigateToURL、ExternalInterface.call、htmlText、loadMovie等等。

这次需要一个代码分析的工具进行反编译:jpexs-decompiler。

另存为swf,进行反编译:

里面有getURL

对于这个来说,他可对于我们传入参数进行解析,但还要内容是不是link:

对于这个来说Link就是在<a></a>里包含的内容,这里附上大佬的payload:

arg01=version&arg02=<a

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

lab20

放大佬的payload:?arg01=id&arg02=xss"))}catch(e){alert(/xss/)}//%26width=123%26height=123

这里着重说下:通过url编码之后的%26的话,服务器端就会将其后的所有字符当做是arg02参数的值,然后将其添加到<embed>标签的src属性值中去。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值