XSS笔记
XSS简介
反射型XSS只会中招一次,存储型XSS每次打开都会中招,很烦人。DOM型XSS接触的不多。
反射型XSS漏洞
低等级
代码直接引用了name参数,并没有做任何过滤和检查,存在明显的XSS漏洞。
在对话框键入<script>alert("111")</script>
就完成了一次低等级的XSS攻击。
可以看到浏览器上方弹出
中等级
观察代码发现对输入的数据进行的过滤,将script关键词删除,但是这种机制很容易被绕过。
- 这时我们可以通过输入
<scr<script>ipt>alert(1)</script>
伪装外部的<script>
进行攻击。
可以看到浏览器成功弹窗
- 我们还可以通过混用大小写的方式进行XSS攻击
我们输入<ScriPt>alert(111)</script>
,点击$submit$ 进行提交也可以看到成功弹窗。
高等级
观察代码发现使用黑名单过滤输入,其中preg_replace()函数用于正则表达式的搜索和替换,这使双写绕过和大小写混写绕过全部失效。
我们可以通过 $img$ , $body$ 等标签注入js代码。
我们在对话框中输入代码: <img src=1 onerror=alert(document.cookie)>
提交后可以看到成功进行了弹窗
存储型XSS漏洞
低等级
strip_tags()函数可以剥去字符串中的HTML,XML以及PHP的标签,但允许使用标签。 addslashes()函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加 反斜杠的字符串。 可以看到,由于对message参数使用了htmlspecialchars函数进行编码,无法在使用 message参数注入XSS代码,但是对于name参数,只是简单过滤了标签,所以仍存在存储型的XSS 。
在message进行xss攻击
在message栏输入<script>alert("/xss/")</script>
可以看到浏览器上方弹出
在name进行xss攻击
由于name进行了输入字数的限制,我们用burp进行抓包。
在name栏输入123,message栏输入123。在burp中的proxy栏打开intercept is on进行抓包。
抓包结果如下:
将txtname改为<script>alert("/xss/")</script>
,放开包,发现浏览器成功弹窗。
中等级
基于黑名单思想,使用str_replace()函数,将script关键词删除,但是这种机制是很容易绕过去的。
同理用burp进行抓包
将message改为 <scr<script>ipt>alert(1)</script>
可以看到成功弹窗
高等级
同理进行抓包
改为 <img src=1 onerror=alert(document.cookie)>
放包可以看到成功进行了弹窗