wys的个人博客

你有很多事放不下?做人要潇洒一点~

0%

XSS笔记

XSS笔记

XSS简介

反射型XSS只会中招一次,存储型XSS每次打开都会中招,很烦人。DOM型XSS接触的不多。

反射型XSS漏洞

低等级

代码直接引用了name参数,并没有做任何过滤和检查,存在明显的XSS漏洞。

在对话框键入<script>alert("111")</script> 就完成了一次低等级的XSS攻击。

可以看到浏览器上方弹出

中等级

观察代码发现对输入的数据进行的过滤,将script关键词删除,但是这种机制很容易被绕过。

  1. 这时我们可以通过输入<scr<script>ipt>alert(1)</script> 伪装外部的<script> 进行攻击。

可以看到浏览器成功弹窗

  1. 我们还可以通过混用大小写的方式进行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)>

放包可以看到成功进行了弹窗