很久的一篇文章
有错误请指正~
目录
xss漏洞
level1-无过滤机制
level2-闭合标签
level3-单引号闭合+添加事件
level4-双引号闭合+添加事件
level5-新建标签
level6-大小写绕过
level7-双写绕过
level8-编码绕过
level9-检测关键字
level10-隐藏信息
level-11Referer信息
level-12user-agent信息
level14-exif xss
level15-ng-include属性
level16-空格实体转义
level17-参数拼接
level18-参数拼接
非持久性
持久性
post
先存储再拿出的一个过程
get型注入
传入name的值会在页面产生回显
如果我们修改test值显示的值也会被修改
它向服务器提交了一个name参数,值为"test"
从页面回显看将name参数的值显示在了页面上,并且显示了name参数值得字符长度
他是没有任何防护的所以我们在test这个地方插入js语句他就会被执行
查看源码。
从源码可以看出,箭头1将从服务器获得的name参数的值赋值给str变量,箭头二又将str变量直接插入到
成功
从url看还是get方式传递参数应该还是反射型xss
这关加入了输入框和搜索
查看网页源码
从源码来看,它的功能就是通过点击“搜索”按钮,将输入框内的内容以get方式提交给服务器上的level2.php
经过服务器的动态处理之后又会将参数keyword的值插入到
再次查看网页源码
可以看到在
还是先尝试一下基本的弹窗代码
没有成功
查看一下网页源码
发现两处都将<,>转义了。猜测服务器端在这两处都用htmlspecialchars()函数进行了处理
浏览器中有一些事件可以执行js代码,这里可以使用onclick事件
观察源代码为单引号闭合,把value闭合掉构造playload
'οnclick='javascript':alert(1)'
在提交后,没有立刻弹出这里还需要点一下文本框让事件触发
成功通过
或者用其他事件
level3.php?keyword='οnfοcus=javascript:alert('xss') > //&submit=搜索
还是尝试弹窗
上方显示位没有什么变化但是下方搜索框中的<,>标签都被过滤了
查看网页源码
对上方显示位仍猜测是 htmlspecialchars 函数处理,下方显示位应该是用函数替换掉了删除了,并且下方的闭合标签为双引号。那么仍使用上关的思路,用事件触发。事件触发不需要使用<>
构造payload:" οnclick='javascript:alert(1)'
第二个显示位经过两个str_replace()函数对<>进行了过滤
但是不够全面从而存在xss隐患
同样先按照原来方法测试弹窗
弹窗失败
上方显示位没有什么变化,下方显示位从这一类的恶意代码。
箭头3:可以看到是用字符on去匹配参数值,如果匹配到了就进行替换
破坏原有语义。
这里主要防范的是利用带有on字符的事件来触发恶意代码
比如前面用到过的onfocus事件。
箭头4:可以看到是用字符src去进行匹配
得提到标签了。
熟悉html的人都会知道在标签中引用图片会用到一个属性就是src。正常的引用图
片就是将待引用图片的地址赋值给src属性。但是在js中如果src属性的值不正常或者无法
访问到时就可以触发一个onerror事件来执行js代码。
标签代码:?name=
箭头5:用字符data进行匹配的,同上面一样该字符在之前的演示中也没有
出现过。现在一般有点XSS意识的管理员都懂得过滤javascript与script等关
键字。但是对于data的认识却并不多,也就很少有对它进行过滤的。
Data在我看来就是对字符进行编码的一种设定,比如如果在实际情况中
javascript、script等关键字被过滤掉了之后,可以用如下语句进行尝试
data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=
这条语句和javascript:alert("xss") 或者 的作用是一样的。
箭头6:可以看到是用 标签中的字符href来进行匹配了,防止的
就是通过在href属性中插入js代码来点击执行。
箭头7:用htmlspecialchars()函数对变量str进行处理后显示到网页上。
箭头8:直接将str变量值插入到了标签的value属性值中
成功弹窗
发现script被过滤了
尝试一下大小写绕过同样被过滤
尝试"οnclick='javascript:alert(1)'
on也被过滤了大小写同样不行
尝试">xss
对参数值转换成了小写
然后将基本的关键字都删去,但是他只执行了一次所以可以通过双写绕过
有敏感字符去除所以可以双写绕过
成功弹窗
查看网页源码
提交的参数值一个会插入到标签的value属性值中,
一个会插入到下方标签的href属性值中。
<>被编码了
在href属性值中script字符也被插入了_字符破坏语义
"也被编码了
on也被破坏
大小写绕过失败
试试编码
程序将script变为scr_ipt所以可以对r和i编码(也可以将script都编码)
将ri转化为html实体编码(10进制或者16也可以使用url编码等其他网页语言)
弹窗成功
查看源码
过滤了许多
没有敏感字符去除不能双写绕过
和上一关一样先尝试一下失败
查看网页源码
有文字
看一下后台代码
和上一关相比多了strpos函数
此函数的意思是输入的字符串内必须有http://字符
我们可以给他加上然后注释掉
//http://
通过
我们看到第十关没有输入框了所以我们在url栏里输入
先用老方法尝试一下
无法弹窗
查看一下网页源码
在源码中有一个隐藏的表单其中含有t_link t_history t_sort这样三个隐藏的标签
现在不仅能给keyword传参还能给三个input传参
先尝试一下给三个input传参
发现只有t_sort接受了我们传的参数
所以我们可以从t_sort下手同时想要使用这个标签就需要注视点后面原有的hidden类型
把他改为其他类型button或者type
因为过滤了<>所以我们用onclick事件
成功
查看后台源码
观察代码,如我们料想的那样,str 被 htmlspecialchars 过滤了,也只有 t_sort 接受参数值,对 t_sort 的过滤只有左右尖括号,所以注入显得很容易
查看网页源码
可以发现这关隐藏了四个输入框然后第四个隐藏输入框t_ref已经有值存在还可以看出是第十关我们输入的playload
尝试老方法
我们输入的代码应该被htmlspecialchars函数转义了
我们测试一下哪个输入框能传参
可以看到只有t_sort被赋值成功同时t_ref的值没有了尝试对t_sort的属性进行闭合
发现" 和>都被转义函数了
猜测还是htmlspecialchars函数过滤.双引号不能用就不能闭合标签去创造自己的事件。
前面记得t_ref是第十关palyload网址,而ref又可能是http头中的referer属性我们可以尝试抓包注入
t_ref的值变为了1,那我们就可以从这入手
尝试闭合value创造自己的事件放包
弹窗成功
查看后台源码
可以看到 keyword 进行了 htmlspecialchars 处理,t_sort 参数也被 htmlspecialchars 处理再次赋给value,接受 HTTP_Referer 头部参数进行了除尖括号处理,只要没有特殊字符转义,没有双引号去除,那么这个标签的属性就可能是危险的。
四个隐藏框
t_ua联想到http请求头部的user-agent应该与上一题是一个类型
尝试抓包修改
放包
成功弹窗
查看后台源码
跟上一关一样
想让我们了解不同的注入位置
还是四个隐藏框
t_cook可能是cookie
抓包仍然是相同的方式
给user赋cookie值构造payload(试试test)
查看后台源码
可以看到设置了一个cookie,user : call me maybe?,keyword 和 t_sort 都经过 htmlspecialchars 函数处理,cookie 只有标签去除,没有其他过滤,一样的注入,同上。
查看源码通过iframe标签引入了一个网址但是打不开
我们可以自己写一个简单的放在 本地服务器上引用对应的url就行
同时需要打开php_exif开关
查看源码
看到src的参数在这儿显示了
还有ng-include
ng-include的用法:
ng-include 指令用于包含外部的 HTML文件。
包含的内容将作为指定元素的子节点。
ng-include 属性的值可以是一个表达式,返回一个文件名。
默认情况下,包含的文件需要包含在同一个域名下。
值得注意的是:
如果单纯指定地址,必须要加引号
加载外部html,script标签中的内容不执行
加载外部html中含有style标签样式可以识别
可以包含同一域名的 html 文件,那也就是说可以包含之前做过的有xss漏洞的文件,但是不能执行script中的代码.
?src='level1.php?name='
老方法先测试
发现script和/被替换成了 ;(空白符)
尝试一下不带script和/的payload
查看源码发现空格也被替换了可以使用其他方法代替空格
在html换行可以代替空格
使用url编码将回车转换为%0d或者换行符%0a替代
成功弹窗
查看后台源码
对关键字进行了空白实体代替
从url框内看到是通过arg01和arg02两个参数进行传参传参之后对两个参数进行了拼接可以直接使用事件来触发
由于图片加载不出来无法点击所以没办法使用onclick事件
onmouseover:(表示当鼠标移动到该标签上时就会触发执行某项动作)。
与上一关一致