level 1-10
Leevel1
打开第一关开启xss之旅
根据sql注入感觉,URL中的name=test貌似是注入点
不知道大佬为什么感觉这是注入点,我就是觉得URL就是注入点
看别人的是name=通关了说明是可以的
OK!下一题
Level2
查看被input和value包含着
所以采用把前面的闭合的方式
">
Level3
onclick 事件
Event 对象
定义和用法
onclick 事件会在对象被点击时发生。
请注意, onclick 与 onm ousedown 不同。单击事件是在同一元素上发生了鼠标按下事件之后又发生了鼠标放开事件时才发生的。
语法
οnclick=“SomeJavaScriptCode”
参数 描述
SomeJavaScriptCode 必需。规定该事件发生时执行的 JavaScript。
支持该事件的 HTML 标签:
<a>, <address>, <area>, <b>, <bdo>, <big>, <blockquote>, <body>, <button>, <caption>, <cite>, <code>, <dd>, <dfn>, <div>, <dl>, <dt>, <em>, <fieldset>, <form>, <h1> to <h6>, <hr>, <i>, <img>, <input>, <kbd>, <label>, <legend>, <li>, <map>, <object>, <ol>, <p>, <pre>, <samp>, <select>, <small>, <span>, <strong>, <sub>, <sup>, <table>, <tbody>, <td>, <textarea>, <tfoot>, <th>, <thead>, <tr>, <tt>, <ul>, <var>
支持该事件的 JavaScript 对象:
button, document, checkbox, link, radio, reset, submit
’ οnclick=alert(1) //
level4
keyword提交
查看源码,
原来如此,在服务器端先是将传递过来的keyword参数的值赋给str变量,然后经过箭头1和箭头2处的处理将变量值中包含的<、>符号删除。最后在箭头3处对变量值进行编码处理之后显示在页面之上,在箭头4处将去除特殊符号后的变量值插入到标签的value属性值中。
Level5
查看源码
从源码来看,服务器端先是将传递过来的参数值转换为全小写之后赋值给变量str,接着就是通过str_replace()函数来破坏变量值中的敏感字符的语义。最后在箭头4处通过htmlspecialchars()函数处理之后显示到网页上,在箭头5处直接将进行敏感字符处理之后的变量值插入到标签的value属性值中。
从图中看到在第一处显示位应该还是被htmlspecialchars()函数处理过才返回到浏览器显示的。而在第二处显示位可以看到在第一个
从此时的页面响应可以看到出现了一个xss字样的链接,点击该链接即可触发执行弹窗的js代码
Level6
查看源代码,和上一关一样进行了函数处理,这次比较多,前面用到的都进行了处理
可以试试大小写混写来尝试能不能绕过。因为这里没有对<、>进行过滤,但是对script、on、href这样的字符应该是进行了字符替换
可以看到这一次点击页面响应中超链接成功弹窗了。这里值得一提的是因为我们改动的是标签中的href属性的大小写,而在html中对大小写是不敏感的。因此在浏览器端我们的恶意代码才能成功执行。
Level7
查看源代码
可以看到因为在箭头1处首先是对参数值转换成了小写,大小写应该是无效的。而在箭头2处又将基本的关键字都删除了。但是这里的字符替换操作仅仅执行了一次,因为比如在javascrscriptipt中在匹配的时候仅仅匹配到了一个script字符,所以也就只是将中间该字符删除而并不会接着再对结果字符串进行同样的操作了。
看来这次直接九吃掉了,而且大小写还不通过
那就试试双写
这样双写也是会被吃掉的
" oonnfocus=javascrscriptipt:alert(‘xss’) > //
Level8
查看源代码
从箭头1处可以看到对参数值做了小写处理,在箭头2处对常见的关键字做了过滤处理,在箭头3处还将用来起闭合作用的引号做了字符实体替换。
查看页面和之前不一样,这里有友情链接
可以看到提交的参数值一个会插入到标签的value属性值中,一个会插入到下方标签的href属性值中。
之前看源代码知道有过滤函数和闭合点实体化,这里试验一下
和代码一样被过滤掉,大小写绕过也是·没戏
那就试试编码绕过
使用编码过的语句,点击添加链接,会发现网页源码
解码过后为正常的语句并执行,点击友情链接,通过
Level9
查看源代码
可以看到在箭头1处就是对参数值进行小写处理,然后就是对关键字的过滤,跟前面几关的做法是一样的。唯一不同之处就是在下面对处理过后的字符还做了一个查找,如果该字符中含有http://就返回第一次出现的位置,也就可以将该字符插入到href属性值中了,但是如果字符中没有http://的话就会返回false,接着在href属性值中就会出现链接不合法这样的字样。
既然说没有http://的话就不行,那用一个正常的http网址试试
正常的并可以正常跳转到网页
试试放入语句,既然需要i的语句已经过滤,那试试双写
还是被分家了
试试编码
可以的,但是alert(‘xss’)后需要加//注释掉后面的东西
Level10
查看源代码
服务器端在箭头1处说明是接收t_sort参数值的。然后在箭头2处会删除t_sort参数值中的<、>。从这里来看的话这一关就只能是将js代码插入到标签的属性值中来执行而不能通过闭合标签引入新的标签来触发XSS了。
和之前大不一样
隐藏了三个表单,
其中含有t_link、t_history、t_sort这样三个隐藏的标签。
既然这里有三个标签的话,也就意味着是三个参数。那么看看能不能从此处下手。先看看哪一个标签能够被突破吧,构造语句如下
从页面响应来看,有一个标签的状态可以被改变。这个标签就是名为t_sort的标签,之前都是隐藏状态,但是通过构造参数响应发现只有它里面的值被改变了。因此可以从该标签进行突破,尝试能不能注入恶意代码进行弹窗。