xsslabs靶机解题_xss-labs通关攻略 1-10

本文详细介绍了在xsslabs靶机解题过程中,利用JavaScript的alert(), confirm(), prompt()函数进行XSS攻击的策略。通过分析源代码,绕过过滤机制,利用HTML实体编码、Unicode转码等方法,逐级攻破靶机的防御,最终完成所有关卡。" 128598866,11580445,《王道计算机组成原理》精要笔记,"['计算机系统', '数据表示', '运算器', '存储器', '计算机硬件']
摘要由CSDN通过智能技术生成

JavaScript几种常用的弹窗函数

alert() confirm() prompt()

alert()

其中alert是最常用的方法:alert引发的弹窗只有一个确定按钮,内容可以是变量也可以是字符串,字符串需要引号括起来;

alert()无返回值

confirm()

confirm 对比 alert,会多出一个“取消”按钮。而且 confirm 有一个返回值。如果点击了确定则是返货true,取消则是false

prompt();

prompt 的比 confirm 多一个输入框。同样,prompt 也是有返回值的。 如果按了确定,返回值是 输入的内容,字符串型。如果按了取消,返回值是:null。

level1

这是一个GET交互的xss漏洞

这就是我们可以利用的注入点

先通过构造js代码块的闭合,今天alert();弹窗,该靶机后台重写过方法,只要弹窗即可进入下一关,示意此关卡已经通过

这就是关卡完成界面

这就是后台为通关写的function()代码块

于是在这个靶机上面我们应该只能通过alert()方法弹窗从而进入下一关了

level2

先分析源代码:我们所输入的字符串变量$str有两处在html被显示出来,第一处我们碰到了这个函数:htmlspecialchars($str)

源自w3cschool

也即是说这段代码被实体化了,不再拥有注入的可能性了…

只能从下面这个输出字符变量下手:

我们可以看到这个输出的模块被input和value层层包裹,于是我们可以用闭合绕过他,在区块外面直接进行注入

"> 冒号用来闭合value,> 用来闭合input

幸福来得太突然

Level3

先进行代码审计,发现和level2一样需要构造闭合,然后进行源码审计:

发现唯一显示$str的地方都做了html实体化,也就是过滤掉了小于号和大于号 < >

这个时候我们可以借助点击的onclick事件:

通过onclick事件绕过input的闭合,然后源码显示value的闭合时单引号:

外面的一个

而且没有过滤掉注释符 // ,我们可以闭合完之后把后面的代码注释掉: 然后我们可以构造出该代码进行xss攻击:' οnclick=alert(1) //

Level4

这里直接把大于号小于号过滤成了空,但是我们onclick不需要大于号小于号(这里双写也无法绕过)

同level 3一致,只是value的闭合换了一下:"οnclick=alert(1) //

Level 5

有点恶心啊,直接变成这个鬼画符的东西

但这里大于小于号未被过滤:

这里可以构造A标签的伪协议

这里没有对<>和JavaScript进行过滤,所以可以构造闭合

Level 6

发现对script和onclick还有href再次替换。但是并没有过滤大于小于号

但是:

用了一招简单的,此乃 “ 乱拳打死老师傅 ”

Level 7

script整个白给,索性其他的符号没白给

试试大小写绕过:

这是大写的结果:一视同仁

on也不知所综

于是这也不行了……

尝试复写script: scrscriptipt:

level 8

我们发现在输入框中输入的内容会变成一个href连接插入到下面这儿:

我们这里可以构造A标签:

尝试双写大小写均失败。。

最后尝试html实体编码:

网上看了很多文章,一直没搞明白什么是html的实体编码;

后来研究了才发现,这个编码就是Unicode,转换的话需要把原本的ASCII码转换成Unicode编码

Level 9

发现无论是怎么添加,出来的友情链接都是这个:

太恶心了;

Unicode编码尝试失败

我们看一下源码:

这一块先对输入的自已进行一连串的过滤

然后通过strpos函数查询输入的有没有http;//这个字符串,没有的话直接跳转恶心人的网页……

最后用Unicode转码了script的T,然后在某位加了一个http://成功绕过

Level 10

看来是一个纯GET的xss注入

发现屏幕上输出的只有这个被实体化的html。。。<>都白给了

我们审计代码:

这就是前端中的一个技术,隐藏域

作用:

1 隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用。浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器。

2 有些时候我们要给用户一信息,让他在提交表单时提交上来以确定用户身份,如sessionkey,等等.当然这些东西也能用cookie实现,但使用隐藏域就简单的多了.而且不会有浏览器不支持,用户禁用cookie的烦恼。

3 有些时候一个form里有多个提交按钮,怎样使程序能够分清楚到底用户是按那一个按钮提交上来的呢?我们就可以写一个隐藏域,然后在每一个按钮处加上οnclick="document.form.command.value="xx""然后我们接到数据后先检查command的值就会知道用户是按的那个按钮提交上来的。

4 有时候一个网页中有多个form,我们知道多个form是不能同时提交的,但有时这些form确实相互作用,我们就可以在form中添加隐藏域来使它们联系起来。

5 javascript不支持全局变量,但有时我们必须用全局变量,我们就可以把值先存在隐藏域里,它的值就不会丢失了。

6 还有个例子,比如按一个按钮弹出四个小窗口,当点击其中的一个小窗口时其他三个自动关闭.可是IE不支持小窗口相互调用,所以只有在父窗口写个隐藏域,当小窗口看到那个隐藏域的值是close时就自己关掉。

因为xss-labs靶机只要弹窗就会成功进入下一关,我们在靶机上只要在f12里面,本地修改html代码就会弹窗:

我这里修改的是第二个没有拼接值得隐藏域,然后页面上出现了一个框,点击,即可弹窗….

我真的是长见识了,长知识了,大声叫好…. 妙!妙!妙哇!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值