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