前言
0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
0x0A
0x0B
0x0C
0x0D
0x0E
0x0F
0x10
0x11
0x12
xss实战第一部曲, 实战的靶场是部署在github上的, 所以可能有些延迟(你懂的), 然后给出地址:
https://xss.haozi.me/
玩法很简单, 进行xss注入直至alert(1)成功。
fight!
首先看看布局:
看到源码什么防护都没有, 直接抛一个常规payload过了(过马路一般):
看到注入点是在标签中, 所以用上一题的方法是不会被解析的, 故需要去构造标签, 闭合, 就可以注入了:
或者, 利用error事件也可以:
![]()
由于src是空, 所以肯定会报错, 故通过错误调用事件成功注入xss:
这题的注入点是把值转化为字符串, 然后显示在输入框内, 这样前两题的标签闭合注入也就失效了
提到闭合, 那么就好办了, 我们可以借鉴sql注入的方法, 将前面的双引号闭合, 然后注入新的标签:
" >
同样, 利用error也可以, 方法有很多, 但思路都一样
发现括号, 方括号都被过滤了:
但是可以用 `` 来代替:
这题把括号、正括号和引号都过滤了:
可以考虑用html编码来绕过, 对编码不熟悉的可参考: 一次对浏览器解析和XSS的深度探究
将(1)进行html编码:
![]()
此题的注入点处于注释符之间, 而注释符的后半部被无情的替换为一个, 从而防止了注释被闭合:
这题涉及的知识比较牛, 就是注释方式有两种:
所以就可以用第二种方法:
--!> 注释掉'):
alert(1);
-->
0x0E
这题的正则表达式匹配情况:
也就是将尖括号后面追加一个下划线, 并且将所有字符大写:
比如: 变为: <_A
这几乎过滤了所有标签, 包括
尝试了一下在script中间html编码, 发现并不能被html解码, 因为它不在html标签中:
这题将一些常用的注入字符进行了html编码处理:
但是, 它忽略了一点, 由于编码后处于html标签中, 所以当解析代码的时候, 被过滤编码的字符仍然会被还原来执行, 所以可以说, 被过滤的字符可以用
发现input值处于单引号和括号中间,
注入使其闭合, 在注释掉后面的内容即可:
'); alert(1); //
或者也可闭合后面的单引号:
'); alert('1
没有过滤, 随意给window.date一个值, 再注入:
''; alert(1);
发现所有一些字符被转义了, 就连换行符等也被转义了:
但是发现竟然还可以用....原因是:
//虽然被转义成了\/\/, 但转义之后还是//, 在js中还是注释符 (勿与正则弄混)
"); alert(1); //
或者:
"); alert("1
这题将双引号转义了, 就不能好好闭合了:
但是, 换个思路, 它并没有将转义符转义, 那么我们可以将转义符转义:
\"); alert(1); //
补充一个的答案(github上看大佬的答案):
通过闭合前面的script标签, 内嵌一个script标签即可: