xss-labs靶场基础8-10关(记录学习)

发布于:2025-05-14 ⋅ 阅读:(12) ⋅ 点赞:(0)

 前言:

内容:

第八关

关卡资源网站,html编码网站(两个网站,一个是实体编号转义(只对特殊字符有效,字母无效)、实体符号转义)

         在线Html实体编码解码-HTML Entity Encoding/Decoding   //实体化符号编码

htmlb编码表

HTML字符集| HTML字符代码和符号

简单解释区别,

        一种是方便记忆(实体符号编码,但是不能保证所有浏览器都支持)

         另一种浏览器通用,记忆难度大(实体符号编码)

网站解析的解码的顺序:html解码、url解码、js解码

什么都被那个替换了,所有的字段都被替换了,相当于没用了,我看的用编码可以绕过

但是不知道为啥能这样,

问题思考:为啥<>被实体化编码了,还是能够正常解析弹窗语句,与平常的说的xss防御应该要实体化编码,两者的区别是什么?

解:忘求了,好像是对<a href="实体化编码">test</a>,对里面实体化编码,但是浏览器解析,会先解码,在解析

如果是对<>,这类实体化编码了,就想不到办法进行弹窗了。

构造payload:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

总结思路:

未对<>进行过滤了,但是使用了href字段,这个可以执行js语句,虽然对里面的大多数语句进行过滤,但是未对编码后的字段进行过滤,将javascript:alert(1)进行html编码,进行绕过

第九关

首先的思路肯定是把上一关的payload写进去,然后就看一下什么反应

链接不合法?  我本来就没有输入合法的内容,但是检测出我的payload还是什么

我继续检测,尝试看题目说的是什么,添加友情链接,难道要添加链接?

我先尝试写一个正常的链接,http://127.0.0.1,发现关键字必须要http://才行

然后构造payload:

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;//http://

思考

为什么前面加上//,才能正确的弹窗,?

我的理解是在浏览器上,//是注释后面的内容,然后我去验证这个论点

javascriopt协议中,//是单行注释的符号,就是不执行后面的内容,什么是javascript协议,就是上面写的,javascript:alert(1),就是冒号后面的内容都是用js执行的,也就是  //为单行注释符的意思,为什么是js执行,因为前面说了用javascript语句执行

无javascript协议,普通的http://127.0.0.1,那就是普通的url协议,并不会是单行注释的

扩展思考

在html协议中,也是在浏览器中,有两种协议,一种是html协议,另一种是javascript协议

javascript协议是单行注释

html主题中,是没有任何含义的,直接渲染出来了

那么html主体中,靠什么注释,我查了,是这个方法,<!-- 注释内容 -->

总结思路

漏洞的前提条件:1、http://可以放到最后

2、在href字段内,导致里面的内容,是js代码执行的,然后js代码里面的//是注释的意思

3、没有注释//

4、没有检测html编码后的javascript:alert(1)

第10关

前言:我觉得用burp抓包更好理解,这个是有交互的,就是和web交互,而sql注入没有web交互,直接和数据库进行交互,所有的操作都是可以在burp抓包完成

但是xss如果在burp上完成,方便理解是服务器过滤了,还是web本身前端过滤了,但是前端过滤了,好像就进不了后端了,所以的话,一般都是后端过滤,

但是还是不理解为什么dom型不进入后端,也就是用burp抓不到包吧。

废话一大推

正题:

进入靶场页面,一个输入点都没有?????奇怪不是说好要有输入和输出吗,现在输入都没有了。我找一下

废了,我直接看源代码,看到有个hidden,然后我就直接删掉了,集出现一个框,输入就按enter键提交了,

然后就在前端元素里,就直接删掉,就好了,但是由于type的隐藏属性,就不会有框的,提交之后也不会有框的,

但是onclick,就需要点那个框,才会有弹窗的

构造payload:

"οnclick=alert(1) type="text

思考

为啥要显示才能弹窗?

由于,input标签本身就是用来输入的,所以他也就是要有输入框的,如果没有输入框,那就是相当于浏览器并不会执行input标签的语句,也就是并不会输出在前端,如果没有输出,那么漏洞本身也就不存在了,也就是说必须要前端页面显示了那个输入框,才会正常弹窗,如果是hidden属性,隐藏了那个框,就算xss攻击语句正确,也不能进行弹窗

所以,漏洞是否存在,取决于这个 input 元素是否能够引发一个交互事件。若该元素是隐藏的并且没有交互行为,XSS 攻击就无法触发。

成功的条件:

1、过滤了<>尖括号,但是没有过滤”双引号,依然可以用input里,onclick可执行js代码

3、为过滤on*语句

2、需要将标签的内容显示出来,用type="text显示出来,因为他可以拼接到浏览器的html代码里


网站公告

今日签到

点亮在社区的每一天
去签到