Pikachu:XSS-盲打、过滤、htmlspecialchars、href与js输出
1 XSS-盲打
前端数据交互的地方,输入信息,输入后的结果不在前端显示,也就是
只有后台能看到输入的内容,从前端无法判断是否存在XSS,这种情况下,我们直接往里面插入XSS代码,然后等待
我们在pikachu平台随便输入信息,输入的内容并不会在前端显示,而是提交到了后台,只有后台管理员可以看见。
接下来我们要做的就是,输入一个JS代码,管理员登录后台管理界面,如果后台把我们的内容输出,那后台管理员可能遭受到我们的XSS攻击,我们提交以下内容
提交之后,登录后台管理界面(账号密码为admin,123456)登录地址如下
点击Login 登陆之后会弹出小窗,说明后台受到了XSS攻击
这种就是也是存储型的,将前端的数据存储到后台,后台如果没有进行过滤的话会使攻击者嵌入恶意代码进行登录获取到后台的信息。这种漏洞属于随机性质的,刚好后台没有做处理,攻击者就可以采取这种方式进行 暗箱操作。
2 过滤
这是系统防止恶意代码的执行,设定的安全措施,主要是过滤特殊的头文件,这些安全措施也能方法、逻辑不严谨,可以被绕过。
转换的思路
----前端限制绕过,直接抓包重放,或者修改html前端代码。比如反射型XSS(get)中限制输入20个字符。
----大小写,比如<SCRIPT>aLeRT(111)</sCRIpt>
。后台可能用正则表达式匹配,如果正则里面只匹配小写,那就可能被绕过。
----双写(拼凑),<scri<script>pt>alert(111)</scri</script>pt>
。后台可能把<script>
标签去掉换,但可能只去掉一次。
----注释干扰,<scri<!--test-->pt>alert(111)</sc<!--test-->ript>
。加上注释后可能可以绕过后台过滤机制
比如你输入<script>alert(1)</script>
提交过后不会出现弹窗
这个时候我们点击F12查看页面源码。
可以看见我们所写的代码没有实现,这说明我们<script>
被过滤掉了。
接下来我们使用大小写混合的方法输入<SCrIPT>alert(1)</ScRiPt>
这样我们可以看见弹窗,说明我们可以绕过后台的安全措施。
3 XSS之htmlspecialchars
htmlspecialchars()是PHP里面把预定义的字符转换为HTML实体的函数
预定义的字符是
------& 成为 &
------" 成为 "
------' 成为 '
------< 成为 <
------> 成为 >
可用引号类型
------ENT_COMPAT:默认,仅编码双引号
------ENT_QUOTES:编码双引号和单引号
------ENT_NOQUOTES:不编码任何引号
首先我们输入带有特殊字符的和唯一标识符 '"<>6666
点击F12查看页面源码
发现只有单引号没被转义,那我们就构造一个特殊字符只有单引号的句子输入 ' onclick='alert(111)'
,回车之后需要点击蓝色的记录,成功出来弹框
4 XSS之herf输出
我们输入网址www.baidu.com
试着让它出现弹窗,发现之前常用的语句都不行,说明都被转义了
查看源码
发现a标签的href属性里面,可以使用javascript协议来执行js
输入 javascript:alert(111)
看见弹窗
5 XSS之js输出
任意输入
右键查看页面源码
它会把我们的输入放到js中,然后对这个变量进行判断,然后再输出
我们可以构造一个闭合,先用一个单引号和</script>
闭合掉页面中的<script>
,然后再插入自己的js代码
于是构造如下payload:'</script><script>alert('xss')</script>
弹窗成功。