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
有点恶心啊,直接变成这个鬼画符的东西
但这里大于小于号未被过滤:
这里没有对<>和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代码就会弹窗:
我这里修改的是第二个没有拼接值得隐藏域,然后页面上出现了一个框,点击,即可弹窗….
我真的是长见识了,长知识了,大声叫好…. 妙!妙!妙哇!