XSS基础

发布于:2025-05-27 ⋅ 阅读:(18) ⋅ 点赞:(0)

xss:cross site scripting 跨站脚本攻击

定义

将脚本代码注入到网页上,其他浏览者浏览网页时执行脚本

相对于sql注入,xss的对象是网站用户,sql注入的对象是网站服务器

分类

反射型:需要用户点击链接的一次性攻击,通过GET方式把脚本附加在url中,可以通过短网址来隐藏脚本

存储型:脚本永久存储在目标服务器数据库或文件中,任何人浏览页面都会触发脚本

dom型:利用客户端浏览器对请求的网页进行dom渲染

实战流程

1. 制作并搭建接收远程cookie的页面和站点

2. 寻找目标网站的xss注入点

        反射型:使用get方式提交信息,寻找url中带?的页面

        存储型:使用post提交

3. 确认注入点

        在输入区提交js代码 <script>alert(11)</script>,如果成功被执行会出现弹窗,则存在注入点。

        如果网站留言需要管理员审核,则无法确认是否存在注入点。

4. 提交盗取管理员cookie的脚本

5. 等待管理员登录并查看留言

6. 使用收到的管理员cookie绕过身份验证,直接登录网站后台

防御绕过方法:

过滤关键字

        关键字大小写转换

        复写关键字

        使用其他html标签注入,如<img src=1 οnerrοr=alert(document.cookie)>

字符长度被限制

        前端限制

                改标签的maxlength属性

                删除js代码

                通过burpsuit抓包修改提交

        后端限制

                看不到源代码就没办法,蒙吧

实战举例1:

本地创建js文件,用于执行时向php代码提交获取到的cookie

本地创建php文件,用于将接收到的cookie写入到本地保存

通过在目标网站表单提交注入脚本。网站管理员在审核留言时执行脚本,将cookie写入到本地保存。

实战举例2:

dvwa中XSS (Reflected) medium级别

Php中str_replace函数区分大小写,改大写字母绕过过滤

Php中str_replace函数替换只做1次,不做递归替换,通过复写绕过过滤

dvwa中XSS (Reflected)  high级别

Preg_replace函数不区分大小写,并且通过正则递归匹配,无法使用script标签。使用img标签的错误事件来绕过

实战举例3:

dvwa中XSS (Stored) medium级别

Message中对特殊符号进行了过滤,无法使用script标签,但name只用str_replace做过滤。但name input标签对输入的长度进行了限制,将10删掉即可提交。

dvwa中XSS (Stored) high级别

Name使用了正则过滤,使用img标签加事件即可。

实战举例4:

dvwa中XSS (DOM) medium级别

查看页面源代码,发现下拉框是js操作dom画的,此时想执行注入的js,需要提前闭合option和select标签。同时php代码中使用了stripos函数过滤script标签,所以使用img标签加事件来注入js代码。

dvwa中XSS (DOM) HIGH级别

Php中使用switch语句,相当于开了白名单,任何其他标签无法都无法通过。此时使用#来跳过检测。Php中支持3种注释,js支持2种注释,所以#后的部分php不会执行,但js会执行。


网站公告

今日签到

点亮在社区的每一天
去签到