xss-labs初学者通关详解1-18

很久的一篇文章

有错误请指正~

目录

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漏洞

xss-labs初学者通关详解1-18_第1张图片

 xss-labs初学者通关详解1-18_第2张图片

 非持久性

get​xss-labs初学者通关详解1-18_第3张图片

 持久性
post
先存储再拿出的一个过程
​  ​

 前端直接发送给前端​xss-labs初学者通关详解1-18_第4张图片

xss-labs初学者通关详解1-18_第5张图片 xss-labs初学者通关详解1-18_第6张图片

 level1-无过滤机制

 get型注入
传入name的值会在页面产生回显
如果我们修改test值显示的值也会被修改xss-labs初学者通关详解1-18_第7张图片

它向服务器提交了一个name参数,值为"test"
从页面回显看将name参数的值显示在了页面上,并且显示了name参数值得字符长度

xss-labs初学者通关详解1-18_第8张图片

他是没有任何防护的所以我们在test这个地方插入js语句他就会被执行
查看源码。xss-labs初学者通关详解1-18_第9张图片

 从源码可以看出,箭头1将从服务器获得的name参数的值赋值给str变量,箭头二又将str变量直接插入到

标签之间
因此服务器并没有对name参数的值进行严格的管理,并且这个值还是用户可控的,所以存在反射型xss漏洞
将name参数重新赋值  ​

 xss-labs初学者通关详解1-18_第10张图片

 成功​

level2-闭合标签

从url看还是get方式传递参数应该还是反射型xss
这关加入了输入框和搜索

xss-labs初学者通关详解1-18_第11张图片

 查看网页源码​

xss-labs初学者通关详解1-18_第12张图片

  从源码来看,它的功能就是通过点击“搜索”按钮,将输入框内的内容以get方式提交给服务器上的level2.php
经过服务器的动态处理之后又会将参数keyword的值插入到

标签之中以及添加到标签中的value属性的值内。
尝试使用上一关的恶意语句弹窗报错  ​

xss-labs初学者通关详解1-18_第13张图片

再次查看网页源码​

xss-labs初学者通关详解1-18_第14张图片

 可以看到在

标签中的恶意代码被转义了,盲猜在服务器端用 htmlspecialchars() 函数对 keyword 参数的值进行了处理。
接着可以看到插入到 value 参数中的恶意代码并没有被转义而是直接原样返回的,那么就从这里入手,要想程序在这里执行弹窗代码,只需要将属性的标签闭合就可以了,输入 ">  ​

xss-labs初学者通关详解1-18_第15张图片

 成功弹窗​xss-labs初学者通关详解1-18_第16张图片

 level3-单引号闭合+添加事件

还是先尝试一下基本的弹窗代码​

xss-labs初学者通关详解1-18_第17张图片

 没有成功
查看一下网页源码  ​

xss-labs初学者通关详解1-18_第18张图片

 发现两处都将<,>转义了。猜测服务器端在这两处都用htmlspecialchars()函数进行了处理
浏览器中有一些事件可以执行js代码,这里可以使用onclick事件
观察源代码为单引号闭合,把value闭合掉构造playload
'οnclick='javascript':alert(1)'
在提交后,没有立刻弹出这里还需要点一下文本框让事件触发

xss-labs初学者通关详解1-18_第19张图片

xss-labs初学者通关详解1-18_第20张图片

成功通过
或者用其他事件
level3.php?keyword='οnfοcus=javascript:alert('xss') > //&submit=搜索

xss-labs初学者通关详解1-18_第21张图片

 xss-labs初学者通关详解1-18_第22张图片

 level4-双引号闭合+添加事件

还是尝试弹窗​

xss-labs初学者通关详解1-18_第23张图片

 上方显示位没有什么变化但是下方搜索框中的<,>标签都被过滤了
查看网页源码

 对上方显示位仍猜测是 htmlspecialchars 函数处理,下方显示位应该是用函数替换掉了删除了,并且下方的闭合标签为双引号。那么仍使用上关的思路,用事件触发。事件触发不需要使用<>
构造payload:" οnclick='javascript:alert(1)'

xss-labs初学者通关详解1-18_第24张图片

 成功通过
查看文件源码  ​xss-labs初学者通关详解1-18_第25张图片

 第二个显示位经过两个str_replace()函数对<>进行了过滤
但是不够全面从而存在xss隐患

level5-新建标签

同样先按照原来方法测试弹窗​

xss-labs初学者通关详解1-18_第26张图片

 弹窗失败
上方显示位没有什么变化,下方显示位从这一类的恶意代码。
箭头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属性值中
xss-labs初学者通关详解1-18_第37张图片
  ​成功弹窗​

 level7-双写绕过

还是先用老方法测试一下​xss-labs初学者通关详解1-18_第38张图片

 发现script被过滤了
尝试一下大小写绕过同样被过滤
尝试"οnclick='javascript:alert(1)'

 on也被过滤了大小写同样不行
尝试">xssxss-labs初学者通关详解1-18_第39张图片

 

 href也被过滤了
查看后台源码  ​xss-labs初学者通关详解1-18_第40张图片

 对参数值转换成了小写
然后将基本的关键字都删去,但是他只执行了一次所以可以通过双写绕过
有敏感字符去除所以可以双写绕过  ​xss-labs初学者通关详解1-18_第41张图片

 成功弹窗​

level8-编码绕过

xss-labs初学者通关详解1-18_第42张图片

 查看网页源码
提交的参数值一个会插入到标签的value属性值中,
一个会插入到下方标签的href属性值中。  ​

 <>被编码了
在href属性值中script字符也被插入了_字符破坏语义

xss-labs初学者通关详解1-18_第43张图片

 "也被编码了
on也被破坏
大小写绕过失败
试试编码
程序将script变为scr_ipt所以可以对r和i编码(也可以将script都编码)
将ri转化为html实体编码(10进制或者16也可以使用url编码等其他网页语言)  ​

 xss-labs初学者通关详解1-18_第44张图片

​弹窗成功
查看源码  ​

xss-labs初学者通关详解1-18_第45张图片

 过滤了许多
没有敏感字符去除不能双写绕过

​level9-检测关键字

和上一关一样先尝试一下失败​

xss-labs初学者通关详解1-18_第46张图片

 查看网页源码​

 有文字
看一下后台代码  ​

xss-labs初学者通关详解1-18_第47张图片

 和上一关相比多了strpos函数
此函数的意思是输入的字符串内必须有http://字符
我们可以给他加上然后注释掉
//http://

xss-labs初学者通关详解1-18_第48张图片

 通过​

level10-隐藏信息

我们看到第十关没有输入框了所以我们在url栏里输入​

xss-labs初学者通关详解1-18_第49张图片

 先用老方法尝试一下​

xss-labs初学者通关详解1-18_第50张图片

 无法弹窗
查看一下网页源码  ​

xss-labs初学者通关详解1-18_第51张图片

 在源码中有一个隐藏的表单其中含有t_link t_history t_sort这样三个隐藏的标签
现在不仅能给keyword传参还能给三个input传参
先尝试一下给三个input传参

xss-labs初学者通关详解1-18_第52张图片

 xss-labs初学者通关详解1-18_第53张图片

 发现只有t_sort接受了我们传的参数
所以我们可以从t_sort下手同时想要使用这个标签就需要注视点后面原有的hidden类型
把他改为其他类型button或者type
因为过滤了<>所以我们用onclick事件

xss-labs初学者通关详解1-18_第54张图片

 成功
查看后台源码

xss-labs初学者通关详解1-18_第55张图片

​观察代码,如我们料想的那样,str 被 htmlspecialchars 过滤了,也只有 t_sort 接受参数值,对 t_sort 的过滤只有左右尖括号,所以注入显得很容易

​level-11Referer信息

查看网页源码​

xss-labs初学者通关详解1-18_第56张图片

 可以发现这关隐藏了四个输入框然后第四个隐藏输入框t_ref已经有值存在还可以看出是第十关我们输入的playload
尝试老方法  
​  ​xss-labs初学者通关详解1-18_第57张图片

 xss-labs初学者通关详解1-18_第58张图片

 我们输入的代码应该被htmlspecialchars函数转义了
我们测试一下哪个输入框能传参  

xss-labs初学者通关详解1-18_第59张图片
​  ​xss-labs初学者通关详解1-18_第60张图片

 可以看到只有t_sort被赋值成功同时t_ref的值没有了尝试对t_sort的属性进行闭合​

 xss-labs初学者通关详解1-18_第61张图片

 发现" 和>都被转义函数了
猜测还是htmlspecialchars函数过滤.双引号不能用就不能闭合标签去创造自己的事件。
前面记得t_ref是第十关palyload网址,而ref又可能是http头中的referer属性我们可以尝试抓包注入

 修改referer属性传入值为1放包查看源码​xss-labs初学者通关详解1-18_第62张图片

 t_ref的值变为了1,那我们就可以从这入手
尝试闭合value创造自己的事件放包

 xss-labs初学者通关详解1-18_第63张图片

 弹窗成功
查看后台源码  ​

xss-labs初学者通关详解1-18_第64张图片

 可以看到 keyword 进行了 htmlspecialchars 处理,t_sort 参数也被 htmlspecialchars 处理再次赋给value,接受 HTTP_Referer 头部参数进行了除尖括号处理,只要没有特殊字符转义,没有双引号去除,那么这个标签的属性就可能是危险的。

 level-12user-agent信息

xss-labs初学者通关详解1-18_第65张图片

 

 四个隐藏框
t_ua联想到http请求头部的user-agent应该与上一题是一个类型
尝试抓包修改

 

 放包​

xss-labs初学者通关详解1-18_第66张图片

 成功弹窗
查看后台源码

xss-labs初学者通关详解1-18_第67张图片

跟上一关一样
想让我们了解不同的注入位置

xss-labs初学者通关详解1-18_第68张图片

 level3-cookie信息

xss-labs初学者通关详解1-18_第69张图片

 xss-labs初学者通关详解1-18_第70张图片

 还是四个隐藏框
t_cook可能是cookie
抓包仍然是相同的方式

xss-labs初学者通关详解1-18_第71张图片

 给user赋cookie值构造payload(试试test)​

xss-labs初学者通关详解1-18_第72张图片

 查看后台源码​

xss-labs初学者通关详解1-18_第73张图片

 可以看到设置了一个cookie,user : call me maybe?,keyword 和 t_sort 都经过 htmlspecialchars 函数处理,cookie 只有标签去除,没有其他过滤,一样的注入,同上。

 xss-labs初学者通关详解1-18_第74张图片

level14-exif xss

xss-labs初学者通关详解1-18_第75张图片

 

 查看源码通过iframe标签引入了一个网址但是打不开
我们可以自己写一个简单的放在 本地服务器上引用对应的url就行
同时需要打开php_exif开关

level15-ng-include属性

xss-labs初学者通关详解1-18_第76张图片

 查看源码
看到src的参数在这儿显示了
还有ng-include
ng-include的用法:
ng-include 指令用于包含外部的 HTML文件。
包含的内容将作为指定元素的子节点。
ng-include 属性的值可以是一个表达式,返回一个文件名。
默认情况下,包含的文件需要包含在同一个域名下。

值得注意的是:
如果单纯指定地址,必须要加引号
加载外部html,script标签中的内容不执行
加载外部html中含有style标签样式可以识别
可以包含同一域名的 html 文件,那也就是说可以包含之前做过的有xss漏洞的文件,但是不能执行script中的代码.
?src='level1.php?name='    ​xss-labs初学者通关详解1-18_第77张图片

 xss-labs初学者通关详解1-18_第78张图片

 level16-空格实体转义

老方法先测试​

xss-labs初学者通关详解1-18_第79张图片

xss-labs初学者通关详解1-18_第80张图片

 发现script和/被替换成了 ;(空白符)
尝试一下不带script和/的payload

xss-labs初学者通关详解1-18_第81张图片

 查看源码发现空格也被替换了可以使用其他方法代替空格
在html换行可以代替空格
使用url编码将回车转换为%0d或者换行符%0a替代
xss-labs初学者通关详解1-18_第82张图片

 成功弹窗
查看后台源码

xss-labs初学者通关详解1-18_第83张图片

 对关键字进行了空白实体代替​

level17-参数拼接

xss-labs初学者通关详解1-18_第84张图片

 这题图也没有点连接直接进下一关了
查看一下网页源码  ​xss-labs初学者通关详解1-18_第85张图片

 从url框内看到是通过arg01和arg02两个参数进行传参传参之后对两个参数进行了拼接可以直接使用事件来触发
标签就是引入一个swf文件到浏览器端,并且它的src属性值没有添加引号,所以不用闭合
?arg01= onmouseover&arg02=alert(1)

 由于图片加载不出来无法点击所以没办法使用onclick事件
onmouseover:(表示当鼠标移动到该标签上时就会触发执行某项动作)。

level18-参数拼接

与上一关一致​

你可能感兴趣的:(初学者靶场通关,xss,安全,web安全)