xss-labs
如果这些靶场很有疑惑,可以去看b站,天欣师傅的这个靶场讲解,全网最细的讲解
bhttps://www.bilibili.com/video/BV1vQ2WYEEhV/?spm_id_from=333.1387.homepage.video_card.click
第一关
没有任何防备 直接过
<h1>1</h1>
<script>alert()</script>
第二关
查看源代码 可以看出 利用了 html编码表
htmlspecialchars 这个函数的话是这个东西,只是对 < > 这两个符号 进行 html编码
htmlspecialchars() 是 PHP 中的一个函数,用于将一些预定义的字符转换为 HTML 实体,以确保这些字符在网页中被正确且安全地显示,而不是被解释为 HTML 标签或实体。这个函数会转义以下五个字符:
-
< (小于号)被转换为 < -
> (大于号)被转换为 > -
& (和号)被转换为 & -
" (双引号)被转换为 " -
' (单引号)被转换为 ' 或 ' (根据 PHP 版本和配置,早期版本可能使用 ')第三关 不会被过率 -
但是这里的靶场 对 单引号 不过率 如果 看到 value的值 是被 单引号 保住的 就可以考虑 单引号 过滤
这些转换有助于防止跨站脚本(XSS)攻击,因为攻击者无法直接在网页中插入执行脚本的HTML标签或JavaScript代码。通过使用 htmlspecialchars(),可以安全地展示用户提供的数据,确保数据被浏览器作为普通文本而非HTML代码解析。
所以如何绕过 闭合标签绕过
"><script>alert(xx)</script>
第三关
闭合过滤
如果还用 第二关的 答案 这个小于大于符号会被实体化 htmlspecialchars 这个函数的话是这个东西,只是对 < > 这两个符号 进行 html编码
会被实体化 没办法 进行闭合 操作
如何绕过 找到一些 没有 尖括号的 攻击代码就可以
'""" onBlur='Javascript:alert()'
onfocus,onbler,onblick 事件绕过
虽然还是要让 闭合 但是 里面 没有 大于小于 符号 所以 就不会被 html编码
拿下
第四关
与第三关 基本相同 就是 用到 双引号 闭合
$str2= str_replace(">","",$str);
:这一行代码的作用是在字符串$str中查找所有的右尖括号(>)并替换为空字符串,也就是删除它们。执行这行代码后,结果保存在新的变量$str2中。
$str3=str_replace("<","",$str2);
:接着,这一行代码对上一步得到的$str2(已经没有右尖括号了)进行操作,查找并移除所有的左尖括号(<),同样替换为空字符串。执行后,最终的结果存储在$str3中。
所以 如果你想用到 第二关的方法 闭合标签,让后写入 攻击代码 是不行的
" onBlur='Javascript:alert()'
拿下
第五关
a_herf 过滤
先看源代码
如何绕过
这一关 可以借鉴第二关
可不是和第二关的攻击代码一摸一样的 要 避免 有 on script 不然 会被 变了
先闭合 后利用 a href 标签 进行 攻击
拿下
第六关
大小写绕过
"> <aHREF=javascript:alert()>xxx</a> <"
拿下
第七关
双写过滤
双拼写 就是
on o [on]n scri[script]pt 这样的就是双拼写 就是 将 完整的插入到 原本拼写 当中
先闭合 因为 没有去除 大于小于号 的函数 然后利用 双写
"> <ahrehreff=javasscriptcript:alert()>x</a> <"
拿下
第八关
编码过滤
先输入看看啥玩意
输入的值插入了两个地方,第一个是input标签,第二个是href属性,老方法,先看看过滤了啥关键字
" sRc DaTa OnFocus <sCriPt> <ahReF=javascript:alert()>
可以发现,input标签添加了html实体转化函数还把双引号也给实体化了, 添加了小写转化函数,还有过滤掉了src、data、onfocus、href、script、"(双引号),难搞哦,看一下这关的源码
查看源代码
所以这里就可以采用 Unicode 编码
在属性值里面的利用 Unicode编码 服务器 就能认识 ,但是如果 是属性,用这些 编码 ,浏览器可是不认识的
Unicode 编码是一种可以让服务器不认识但浏览器能正常解析的编码方式,这在XSS编码绕过中较为常见。
服务器不认识就不能 进行过滤 ,再通过浏览器能正常解析 所以 就很可以
在线Unicode 编写工具 在线Unicode编码解码 - 码工具 (matools.com)
只用 将 javascript:alert()用 Unicode 编码编码 然后插入到 herf 标签里面就行
也可以使用 ASCII编码 使用 。
javascript:alert()
拿下
第九关
要求格式过滤
看一看先过滤什么
查看源代码
所以 在构建 攻击代码的时候 就需要 有http:// 才行 所以怎么构建呢
javascript:alert()/* http:// */
这个攻击代码中包含 了 http:// 在前端页面解析的时候 http:// 两边是 注释符会把 中间给注释掉 这样 攻击代码 就 等同于 与第八关的 攻击代码一样
第十关
隐藏过滤
看一看都过滤什么
" sRc DaTa OnFocus <sCriPt> <ahReF=javascript:alert()> j
而且 可以看到 三个input 标签 会被隐藏了
查看源代码
'" type="text" onclick='alert(123)'
前面的 单引号 双引号 闭合钱买你的 value 值 然后 加上 type 的话 浏览器默认 就会 执行 前面 tpye 属性值 显示为 text 文本框的格式 不会被隐藏 , 然后 加入 onclick 事件 就拿下了
第十一关
利用前一个跳转之前的地址攻击
源码查看
操作
攻击代码
'" type="text" onclick='alert(123)'
拿下
第十二关
UA头攻击
源码
攻击代码
'" type="text" onclick='alert(123)'
拿下
第十三关
源码
这几关 主要是 告诉我们 xss 可能在 哪些位置
攻击代码
'" type="text" onclick='alert(123)'
拿下
第十五关
ngInclude 是 AngularJS 框架中的一个指令,用于将外部HTML文件包含到当前页面中。由于它允许动态加载和渲染外部内容,如果没有恰当的安全控制,
ngInclude 可能成为XSS(跨站脚本攻击)的潜在入口点。以下是一些可能的XSS利用方式和防范措施
意思就是说 这个 ngnclude 后面写入网址(需要加单引号) ,该网站 会加载 网址页面的内容 演示 :
源码展示
有人会觉得 我都这样整,我自己攻自己是不是太sb了
其实不然 如果 leve15 是一个大型网站的域名 后面的 leve1 是攻击者的一个攻击载荷地址,后面刚好包含攻击代码
如果你刚好 要点这样的链接就点 leve15 忽略了后面的链接的书写方式,当点进去同时,就会 实施攻击
你的leve 15 的 cooke session 什么的 重要的 身份验证信息是不是就会丢失
http://127.0.0.1/xss1/xss/level15.php?src=%27http://127.0.0.1/xss1/xss/level1.php?name=%3Cimg%20src=1%20onmouseover=alert()%3E%27
拿下
第十六关
看什么过滤
?keyword=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <ahReF=javascript:alert()> j
源码
果然给过掉了,如果 空格不会被识别出来 再用第十五关的触发机制 是不是就能过,但是我如何不会识别 这里想到空格可以用回车来代替绕过 所以回车url编码代替空格的url编码 %0a是回车的url编码
操作
攻击代码
<img%0asrc=1%0aonmouseover=alert()>
拿下
第十七关
源码
攻击代码
" onmouseover=alert("123")
拿下
第十八关
攻击原理与上一关一样
第十九,二十关需要用到插件 但是插件已经过时 基本不用 这里就不讲了
burp靶场
这个打完消化完就可以尝试打打这个靶场
尽量消化原理,而不是插入payload,有视频讲解,但是需要挂个魔法。内容挺好的
All labs | Web Security Academy
原文始发于微信公众号(嵩艺):xss靶场
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论