xss-lab靶场基础详解第1~3关

第一关

我去,还是得多学基础啊

复制代码
http://127.0.0.1/xss-labs/level1.php?name=<u>a</u>

这个看他的网站源码,可以看到他没有过滤,没有被编码

然后在name=<script>alert(1)</script>,就算过关了

第二关

这个是查看前端的源代码,可以看出来被实体化编码了,这个应该是前端编码的

前端点属性也能看到他是否实体化编码,

经过尝试,他直接将尖括号给实体化编码了,好像本来就是啊,有点废话了......

看了答案才知道他有两个输出,就是说我输入了一个,他返回了两个,第一个是被实体化了,但是第二个没有被实体化,但是被双引号括起来的,就是当做文本处理了,

为什么会有两个输出,只需要看浏览器页面就能够发现

思路:闭合双引号,重新写标签

但是有一点我非常疑惑的,到现在还是没有搞清楚,如果今天把这个搞清楚就下播

就是说我直接闭合了双引号,他还是没有下划线

<u>a</u>标签:给a字母下划线的意思

然后我想的是,会不会是闭合单引号,但是我只是闭合了单引号,我还在input标签内,所以就不能执行<u>标签

思路:闭合单引号,还要闭合标签,最后在自己输入<script>alert(1)</script>标签,就好了

所以最后答案是"><script>alert(1)</script>

第三关

也是想第二关一样的界面,我以为是和第二关一样的,其实不然

好像将双引号实体化编码了,我直接愣住了

这里我顶不住了,看答案发现,审查元素看字符是否被实体化有点不规范,而且也不能具体知道是用什么单引号,或者双引号括起来的,具体我也不知道为啥,

所以,之后建议直接审查网页源代码,也就是如下

例如,我输入的是"><script>alert(1)</script>,审查源代码的情况如下

这发现,他的闭合方式是单引号,而不是前端审查元素那个双引号!!!!这里是将双引号实体化编码成&quot;,然后单引号是不会被实体化的,我是看答案知道的,

继续闭合单引号,然后仔细的发现就是,单引号未被实体化,

<>尖括号被实体化了

意味着:标签不能用了,因为标签要有尖括号,但是标签里面的事件不需要尖括号啊(寻找<input>标签的其他事件)

继续测试,ok啊,还是大意了,虽然onfocus没有尖括号,但是有双引号,双引号也被实体化编码了,

' οnfοcus="alert('xss');" 这个不行,因为双引号被转义了,五个单引号也无法正确的进行匹配 的,单引号应该成对进行匹配,我是这么理解的,错了帮忙指正

' οnfοcus=alert('xss'); 这个也不行,我也不知道为啥,应该是单引号匹配问题

这里我看答案还有很多知识盲区,那就是

答案一

' οnfοcus='alert(123); //123不能写成英文,详解看思考一,末尾

' οnfοcus='alert(123) //有无分号均可,ai说的

理解(从网页源码理解)

关键源码如下:

<input name=keyword value=' ' οnfοcus='alert(123) '>

我直接将答案复制到源码里,便于理解

<input name=keyword value=' ' onlick='alert(123)'>

去掉部分,便于观看,这就是完整的攻击代码

<input value=' ' onlick='alert(123)'>

答案二

' οnfοcus=javascript:alert() '

一样的我直接拼接到源代码里面去

<input name=keyword value=' ' οnfοcus=javascript:alert() ' '>

仔细思考他的原理是什么,看了答案大概知道了

先看onfocus事件的整个处理流程

onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码

myfunction()函数可以替换成alert(1),这个就是执行alert(1),直接弹窗1,

也可以替换成javascript:alert(1),他的意思就是执行javascript:alert(1),也就是说用javascript来执行alert(1),也就是用js来执行alert(1)

区别:

<input name=keyword value=' ' οnfοcus=javascript:alert() ' '>

onfocus的语法规则,点击输入框会执行myfunction函数,也就是执行javascript:alert(1),

而javascript又使用伪协议(js语言)执行alert(1),也就是用js语言处理alert(1)

<input name=keyword value=' ' οnfοcus='alert(1) '>

属于input的语法规则,直接执行alert(1)

两者都差不多,换个形式而已

拓展思考

思考一:

<input value=' ' οnfοcus='alert(xss)'> //这是错误的xss语句,因为xss没加双引号,但是我还是 用这个通关了,我加了双引号,但是按理来说,他将双引号实体化编码之后,应该不识别 双引号才对啊,

<input value=' ' onlick='alert(xss)'> //正确的xss语句,xss里面不需要加双引号,就可以执行

ok,我懂了,

字符必须要加双引号,然后数字可以不加双引号,和onfocus和onclick无关

onclick和onfocus区别不大

思考二:

为啥javascript:alert(1),不加单引号,而οnfοcus='alert(1)'加了单引号,?

οnfοcus='alert(1)' 中的引号解释

可以不加引号,也就是onfocus后面的内容(属性值)有+-号,需要加引号,以免浏览器不识别,

javascript:alert(1)

这里为啥不加引号,看了a我的理解是不符合html规范,ai建议加引号 javascript:"alert(1)"

思考三:

单引号的区别,οnfοcus="alert('xss')" ?

这里的单双引号的用途都是一样的,也就是为了区分属性值和字符串常量的,也就是单双引号可以互换,这样也行οnfοcus='alert("xss")',

但是不能两个双引号一起写,这样浏览器会选择就近闭合,引发错误,如:οnfοcus='alert('xss')'

里面的字符换成数字的话,里面的双/单引号可以省略,如:οnfοcus='alert(1)'

其实外面的也可以省略的,也可以执行,但是少了代码的健壮性,所以最好加上单引号而已

如:οnfοcus=alert(1),也能执行

但是里面如果是字符或者字符串,里面就必须加引号,不然程序运行不了,因为这不符合语法规则

如:<input οnfοcus=alert(xss)>,执行错误

参考文章:

xss-labs靶场实战全通关详细过程(xss靶场详解)-CSDN博客

相关推荐
zhanshuo10 分钟前
不依赖框架,如何用 JS 实现一个完整的前端路由系统
前端·javascript·html
火柴盒zhang11 分钟前
websheet在线电子表格(spreadsheet)在集团型企业财务报表中的应用
前端·html·报表·合并·spreadsheet·websheet·集团财务
khalil13 分钟前
基于 Vue3实现一款简历生成工具
前端·vue.js
拾光拾趣录20 分钟前
浏览器对队头阻塞问题的深度优化策略
前端·浏览器
用户81221993672220 分钟前
[已完结]后端开发必备高阶技能--自研企业级网关组件(Netty+Nacos+Disruptor)
前端
万少24 分钟前
2025中了 聊一聊程序员为什么都要做自己的产品
前端·harmonyos
abigale032 小时前
webpack+vite前端构建工具 -11实战中的配置技巧
前端·webpack·node.js
专注API从业者3 小时前
构建淘宝评论监控系统:API 接口开发与实时数据采集教程
大数据·前端·数据库·oracle
Joker`s smile3 小时前
Chrome安装老版本、不同版本,自制便携版本用于前端调试
前端·chrome
weixin_416639973 小时前
爬虫工程师Chrome开发者工具简单介绍
前端·chrome·爬虫