网络安全-Web应用安全1
Web应用安全
Web安全概述
Web安全现状
Web安全统计数据
- 据全球知名IT调研与咨询服务公司Gartner的最新调查,信息安全攻击有75%都是发生在Web应用而非网络层面上。同时,数据也显示,三分之二的Web站点都相当脆弱易受攻击。
Web安全事件
CSDN网站六百万用户信息外泄
- 2011年12月21日,黑客在网上公开了CSDN的用户数据库,高达600多万个明文的注册邮箱账号和密码遭到曝光和外泄,成为中国互联网历史上一次具有深远意义的网络安全事故。
12306信息泄露
- 中国铁路公安机关证实,2014年12月25日犯罪嫌疑人蒋某某、施某某通过”撞库”方式非法获取12306用户数据。如今犯罪嫌疑人落网,但超过13万条12306用户账号密码已经在网上公开传播。
东方航空支付漏洞
- 中国东方航空股份有限公司支付系统验证漏洞可以1元认购10000积分(价值2500RMB)
Web体系结构图
Web体系漏洞图
OWASP TOP10
什么是OWSAP?
- 全称Open WebApplication Security Project,开放Web软件安全项目
- 一个开源的、非盈利的全球性安全组织
- 研究Web软件安全标准、工具与技术
- 目前OWASP全球拥有250个分部近7万名会员
- http://www.owasp.org.cn
OWSAP TOP10
XSS跨站脚本
XSS介绍
什么是XSS
- 全称Cross-Site Scripting,中文跨站脚本
- 攻击者利用网站漏洞把恶意脚本代码(JS脚本)注入到网页中
- 当其他用户浏览这些网页时,就会执行其中的恶意代码
- 产生的威胁包括窃取cookie中的用户资料、会话劫持、钓鱼欺骗等
- 属于前端漏洞
XSS分类
XSS根据特性和利用手法的不同,主要分成三大类型
- 反射型XSS
- 持久型XSS
- DOM型XSS
反射型XSS攻击原理
服务器相当于一面镜子
反射型XSS实例
1 |
|
GET提交运行的效果
持久型XSS概念
- 持久型跨站脚本也称存储型跨站脚本
- 此类XSS不需要诱导被攻击点击特殊链接
- 攻击者事先将恶意JS代码上传或存储到漏洞服务器中
- 当受害者浏览了包含恶意JS代码的页面时就会执行恶意代码
持久型XSS攻击原理
持久型XSS实例
基于pikachu靶场分析持久型XSS
- 进入pikachu靶场,点击持久型XSS标签,在主页面部分输入正常文本
- 可以看到有删除链接,说明用户数据存储到服务器上了
基于pikachu靶场分析持久型XSS
- 进入pikachu靶场,点击持久型XSS标签
- 在主页面输入payload:<script>alert(111)</script>,点击提交
DOM型XSS概念
什么是DOM?
- DOM全称Document Object Model,中文是文档对象模型
- DOM会将HTML文件的节点构成树状结构,以此反映html文件本身的层级结构
DOM型XSS原理
- 客户端的脚本程序可以通过DOM动态的检查和修改页面内容
- 程序执行不依赖于服务器端的数据
BeEF介绍
- BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具
- 使用Ruby语言开发
- 用于实现对XSS漏洞的攻击和利用
- 官网:https://beefproject.com
BeEF原理
- BeEF向网页中插入一段名为hook.is的JS脚本代码,如果浏览器访问了有hook.is(钩子)的页面,就会被hook(勾住),浏览器会执行初始代码返回一些信息
- 受害的浏览器,每隔一段时间(默认为1秒)就会向BeEF服务器发送请求询问是否有新的代码需要执行
BeEF功能介绍
- Online Browsers:在线的主机,现在该主机浏览器执行了JS脚本代码
- Offline Browsers:不在线的主机,该主机曾经执行过JS脚本代码
- Details:浏览器信息详情
- Logs:能记录你在浏览器上的操作
- Commands:你能对该浏览器进行哪些操作
- 绿色:命令模块可以在目标浏览器上运行,且用户不会感到任何异常
- 橙色:命令模块可以在目标浏览器上运行,但是用户可能会感到异常(例如弹窗、提示、跳转等)
- 灰色:命令模块尚未针对止一口此目标进行验证,不知道是否可运行
- 红色:命令模块不适用于此目标
XSS攻击的防御
业内防御跨站脚本攻击的方式一般有两种
- Input Filtering,在输入端过滤
- Output Filtering,在输出端过滤
输入验证
- “永远不要相信用户的输入”是网站开发的基本常识
- 对输入数据的过滤,具体可以从两方面着手:输入验证和数据消毒
- 输入验证要根据实际情况来设计,下面是一些常见的检测和过滤
- 输入是否仅仅包含合法字符
- 输入字符串是否超过了最大长度限制
- 输入为数字,数字是否在指定的范围
- 输入是否符合特殊的格式要求,如Email、IP地址等
数据消毒
- 除了在客户端验证数据的合法性,输入过滤中最重要的还是净化有害的输入,例如常见敏感字符:”<>、’’、””、#”
输出过滤
- 输出到网页前,进行输出编码
- PHP的Htmlspecialchars()函数可以将以下特殊字符转换成字符实体编码
特殊字符 | 字符实体编码 |
---|---|
< | < |
> | > |
& | & |
, | " |
“ | ' |
输入与输出过滤的对比
- 在数据存入数据库之前过滤和转义,顺便可以把SOL注入等其他漏洞一并检查,缺点是无法处理之前已经存在于数据库中的恶意代码
- 在数据输出到浏览器之前进行转义,很安全,缺点是必须对每一个细节的输出过滤,因此,会带来额外的工作量
另外,可以设置cookie的模式为http only禁止
- 使用JavaScript代码读取cookie
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Nicopilot!