浅谈XSS
首发地址:我的个人博客
前言
本文章产生的缘由是因为专业老师,让我给本专业的同学讲一哈SQL注入和XSS入门,为了备课,于是产生了这篇文章。
一、课程目标
听完这节课你能学到些什么
- 知道什么是Xss
- 实现最基础的Xss
- 学会使用Beef Xss工具
- 了解一些Web安全基本知识
? XSS(Cross Site Script),跨站脚本攻击,OWASP Top10之一
? 向网页内嵌入恶意Java script代码
2 XSS分类
? 反射型 -- 前端->后端->前端
? 存储型 -- 前端->后端->数据库->前端
? DOM型 -- 前端
3 XSS常用攻击手段
- 窃取网页浏览中的cookie值
- 钓鱼欺骗:
- 网站挂马
- 垃圾信息发送
- 劫持用户 Web 行为
- XSS 蠕虫
三、初试XSS 1 XSS初体验
往DVWA靶场插入下方JS,会弹框
;
当然还可以嵌入HTML和CSS,但是用处不大
文章图片
image
文章图片
image 默认hook js:http://ip:3000/hook.js
默认hook页面: http://ip:3000/demos/basic.html//访问即可被hook
往存在XSS漏洞的地方插入以下代码
;
举个例子:往DVWA靶场插入xss代码
;
文章图片
image 那么在beef上可以看到被嵌入hook.js的浏览器已经上线了
文章图片
image 然后你可以选择各种攻击模块进行操作了
文章图片
image 每个模块前面的颜色代表着不同的意义
文章图片
image 实用攻击模块
使用下面模块的前提是你使用;
控制了浏览器。
被控浏览器弹框
模块:Browser--->Hooked Domain--->Create Alert Dialog
文章图片
image
文章图片
image 获取cookie
模块:Browser--->Hooked Domain--->Get Cookie
文章图片
image 重定向
模块:Browser--->Hooked Domain--->Redirect Browser
将当前页面重定向至指定页面,有可能导致当前权限丢失
Rediret Browser(iframe)模块:将当前页面重定向至指定页面,同时保留当前连接,可以维持当前浏览器权限
方法:右侧填写木马的路径,可以配合插件升级攻击
文章图片
image
文章图片
image 社工弹窗
模块:Social Engineering ---> Pretty Theft
弹出一个登录框,用户输入密码点击登录之后,beef可以获取到密码
文章图片
image
文章图片
image
文章图片
image 社会工程学攻击
模块:Social Engineering ---> Fake Flash Update
在社工这一栏,可以选择flash更新这类功能来诱使用户升级Flash,当用户点击之后,会下载我们的恶意文件执行,这样我们就可以用c2(command&control)控制用户的系统.
文章图片
image
文章图片
image 持久化
模块:Persistence--->Create Foreground iFrame
使用之后,被控浏览器无论点击哪里,都无法跳转到该系统到其他页面
文章图片
image 内网扫描
模块:Network--->Port Scanner
Network用于收集内网信息,比如ping、端口扫描
注入隐藏的iframe框架
Misc --> Create Invisible Frame
其他模块
Simple Hijacker模块
劫持网页上面的所有链接,当用户点击任意链接时弹出诱骗消息,如果用户接着点击会跳转到指定域名
Clippy模块
创建一个浏览器助手提示用户点击
TabNabbing模块
当检测用户不在当前页面时启动定时器,倒计时结束后自动重定向至指定页面
Clickjacking模块
可以使用multi-click clickjacking,判断当前用户鼠标位置,在不同位置可触发不同JS代码如图,鼠标后面跟随一个iframe
Create Pop Under模块
创建一个新窗口
Confirm Close Tab模块
当用户关闭当前页面时,反复弹出确认是否关闭页面的消息
hook手机
由于手机打开网址持续的时间很短,关闭当前页面后BeEF的shell就会下线,因此我们可以使用BeEF API,用户上线后能够自动执行批量命令,结合Persistence模块能够极大提高shell存活时间。除了与windows系统相关的信息无法获取,其他操作均能成功执行,并且BeEF为手机劫持提供了专门的模块系列——Phonegap
1、弹框
2、重定向
3、查看是否访问过某些网站
4、Creates an invisible iframe
5、Social Engineering系列,如下图,仅作演示
6、msf系列
7、NetWork系列,可以用来扫描同一内网下的windows主机
五、修复建议
- 将用户所提供的内容输入输出进行过滤。可以运用下面这些函数对出现XSS漏洞的参数进行过滤:
- PHP的htmlentities()或是htmlspecialchars()
- Python的cgi.escape()
- ASP的Server.HTMLEncode()
- ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library
- Java的xssprotect(Open Source Library)
- Node.js的node-validator
六、XSS靶场
DVWA
Xss(reflected)-Low
点击右下角的view source,查看源码
文章图片
image 分析:
arrary_key_exists()函数:判断$_GET的值中是否存在“name”键名。并且$_GET[‘name’]的值是否不为空,满足这些条件,直接输出下面的输出语句。可以看到,代码直接引用了name参数,并没有任何的过滤与检查,存在明显的XSS漏洞。
payload:
Xss(reflected)-Medium
源码:
文章图片
image 分析:
这里对输入进行了过滤,基于黑名单的思想,使用str_replace函数将输入中的
Payload:
2.双写绕过
Payload:
3.构造不使用
,成功弹框:
文章图片
name栏的利用:
发现前端html中对name有字数长度限制:
Burpsuite 抓包改为
文章图片
image-20200403140251503.png 点击Bp中Forward 后,成功弹窗:
文章图片
image-20200403140311971 XSS(Stored)-Medium
文章图片
image-20200403140334188 strip_tags()函数剥去字符串中的HTML、XML以及PHP的标签,但允许使用标签。addslashes()函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。
分析:
可以看到,由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码,但是对于name参数,只是简单过滤了
文章图片
image-20200403140440550.png 2.大小写混淆绕过
Burpsuite抓包改name参数为:
文章图片
3.使用非 script 标签的 xss payload:
eg:img标签:
Burpsuite抓包改name参数为:
文章图片
image-20200403140509371.png 其他标签和利用还有很多很多….
以上抓包修改数据Forward后,均成功弹窗:
文章图片
image-20200403140524097.png XSS(Stored)-High
文章图片
image-20200403140538783.png 分析:
这里使用正则表达式过滤了
标签,但是却忽略了img、iframe等其它危险的标签,因此name参数依旧存在存储型XSS。
Exploit
Burpsuite抓包改name参数为
文章图片
image-20200403140643833.png
Forward后,成功弹窗:
文章图片
image-20200403140524097.png
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Spark|Spark 数据倾斜及其解决方案
- 性能测试中QPS和TPS的区别
- 晚期手记(“敦刻尔克”…)
- 浅谈教育与医学之本质和医学生培养之三观
- 浅谈朋友圈
- 你我都不过生活二字
- 《浅谈减压方式在趣味首饰中的表现》
- 浅谈iOS|浅谈iOS 11.0中UITableView 都更改了什么( (二))
- 浅谈智慧课堂
- 浅谈如何赏析诗词