博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
web安全、XSS、CSRF、注入攻击、文件上传漏洞
阅读量:6428 次
发布时间:2019-06-23

本文共 4699 字,大约阅读时间需要 15 分钟。

  hot3.png

作者:汪娇娇

时间:2017年8月15日

当时也是看了一本书《白帽子讲web安全》,简单的摘录然后做了个技术分享,文章不是很详细,建议大家结合着这本书看哈。

web安全

一、世界观安全

1、黑帽子、白帽子

2、安全三要素:

  • 机密性
  • 完整性
  • 可用性

3、如何实施安全评估

  • 资产等级划分
  • 威胁分析(STRIDE) image
  • 风险分析(DREAD) image
  • 设计安全方案

4、白帽子兵法

  • Secure By Default原则(白名单黑名单、最小权限)
  • 纵深防御原则(各个层面、对症下药)
  • 数据与代码分离原则(漏洞成因,注入)
  • 不可预测性原则(克服攻击方法,各个算法)

二、客户端脚本安全

第一章、浏览器安全

1. 同源策略

(1)影响“源”的因素:

  • host(域名或IP地址)
  • 子域名
  • 端口
  • 协议
"http://store.company.com/dir/phther.html""http://customer.com/dir/phther.html""http://news.company.com/dir/phther.html""http://store.company.com:81/dir/phther.html""https://store.company.com/dir/phther.html"

(2)对当前页面来说,页面内存放JS文件的域并不重要,重要的是加载JS所在的域是什么。

(3)<script>、<img>、<iframe>、<link>等都可以跨域加载资源。=> get请求

(3)

2. 浏览器沙箱

image

3. 恶意网址拦截

image

三、XSS(跨站脚本攻击)

1、XSS简介

通常指黑客通过“HTML注入”篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

分类:

  • 反射性XSS:简单的把用户输入的数据“反射”给浏览器。
  • 存储型XSS:会把用户输入的数据“存储”在服务端。
  • DOM Based XSS:修改DOM节点形成的xss。

2、XSS攻击

(1)cookie劫持

(2)构造GET和POST请求

(1)GET:

例:正确删除谋篇文章的链接是:

http://blog.sohu.com/menage/entry.do?m=delete&id=123456

攻击者通过插入一张图片发起一个GET请求:

var img = document.createElement("img");img.src = "http://blog.sohu.com/menage/entry.do?m=delete&id=123456";document.body.appendChild(img);

(2)POST:

  • 构造表单自动提交
  • XMLHttpRequest

(3)xss钓鱼

窃取密码:伪造一个登录框

(4)识别用户浏览器

  • navigator.userAgent

  • window.opera(Opera)、window.netscape(Mizilla)、document.adoptNode(IE 8+)等

(5)识别用户安装的软件

  • IE:判断ActiveX控件的classid 
try{    var Obj = new ActiveXObject('XunLeiBHO.ThunderIEHElper');}catch(e){    //异常,不存在该软件}
  • Flash:system.capabilities

(6)CSS History Hack

通过css发现一个用户曾经访问过的网站:style的visited属性。 

(7)获取用户的真实IP地址

借助第三方软件:例如,Java环境的Java Applet接口 image

3、XSS构造技巧

(1)利用字符编码

系统转义了双引号:

var redirectUrl = "\";alert(/xss/);";

GBK/GB2312编码

Firefox中:"%C1"被认为是1个字符 %C1",alert(/xss/);//

(2)绕过长度限制

">
" onclick=alert(1)//

(3)使用<base>标签 

(4) 

window.name = "alert(document.cookie)";location.href = "http://www.xssedsite.com/xssed.php";

evel(name);

4、XSS防御

(1)HttpOnly

现在很多浏览器都禁止JS访问带有HttpOnly的cookie。

Set-Cookie时标记: 

(2)输入检查(必须放在服务端)

  • XSS Filter:特殊字符,但语境理解并不完整。

例:1+1<3

(3)输出检查:编码或转义 

php中:htmlspecialchars()和htmlentities()

JS中:escape()

(4)正确防御XSS

  • 在HTML标签中输出:对变量HtmlEncode  image
$var
  • 在HTML属性中输出:HtmlEncode
<"">

  

String safe = ESAPI.encode().encodeForHTMLAttribute(request.getParameter("input"));
  • 在<script>标签中输出:JavascriptEncode
  • 在事件中输出:JavascriptEncode
test
 
  • 在CSS中输出:尽可能禁止用户控制,或用OWASP ESAPI中的encodeForCSS()
  • 在地址中输出:URLEncode

四、CSRF(跨站点请求伪造)

1、CSRF简介

攻击者诱使用户访问一个恶意网址,并以该用户身份在第三方站点里执行一次操作。 例:删除博客文章:

2、CSRF进阶

  • 浏览器的cookie策略

Session Cookie

Third-party Cookie:IE、Safari禁止发送,FireFox、Opera、Chrome、Andriod允许

  • P3P头的副作用(Platform for Privacy Preferences)

P3P头是W3C制定的一项关于隐私的标准,如果网站返给浏览器的HTTP头中包含P3P头,将允许浏览器发送第三方Cookie

  • GET和POST(表单)

3、CSRF防御

  • 验证码:强制用户必须与应用进行交互。

  • Referer Check:检查请求是否来自合法的“源”。

  • Anti CSRF Token

CSRF本质:重要操作的所有参数都可以被攻击者猜到

http://host/path/delete?username=abc&item=123http://host/path/delete?username=md5(salt+abc)&item=123http://host/path/delete?username=abc&item=123&token=[random(seed)]

问题:

(1)多页面问题:多个有效的token

(2)保密性:尽量把token放在表单中,post请求

五、注入攻击

条件:

(1)用户能够控住输入

(2)原本程序要执行的代码,拼接了用户输入的数据

1、SQL注入

var ShipCity;ShipCity = Request.form("ShipCity");var sql = "select * from OrdersTable where ShipCity = '"+ ShipCity +"'";

Beijing

Beijing',drop table OrdersTable--

错误回显

  • 盲注:构造简单的条件语句,看页面是否发生变化
http://newspaper.com/items.php?id=2SELECT title,description,body FROM items WHERE ID = 2
http://newspaper.com/items.php?id=2 and 1=2SELECT title,description,body FROM items WHERE ID = 2 and 1=2
  • Timing Attack

MYSQL:BENCHMARK()函数,BENCHMARK(count,expr)

2、数据库攻击技巧

  • 常见攻击技巧

(1)猜版本:

http://www.site.com/new.php?id=5 and substring(@@version,1,1)=4

(2)确认表名admin,列名passwd是否存在

id=5 union all select 1,2,3 from adminid=5 union all select 1,2,passwd from admin

(3)猜username和password具体的值

id=5 and ascii(substring((select concat(username,0x3a,passwd) from users limit 0,1),1,1)) > 64   /*ret true*/
  • 命令执行:UDF

lib_mysqludf_sys.so上传到数据库能访问到的路径下。 image

  • 攻击存储过程

使用CALL或EXCUTE来执行。

xp_cmdshell

EXE master.dbo.xp_cmdshell 'cmd.exe dir c'
  • 编码问题:宽字符集

0xbf27 or 1=1 image统一UTF-8

3、正确防御SQL注入

找到漏洞,修改漏洞

  • 使用预编译语句:数据与代码分离
String custname = request.getParameter("customerName");String query = "SELECT account_balance FROM user_data WHERE user_name = ? ";PreparedStatement pstmt = connection.prepareStatement(query);pstmt.setString(1,custname);ResultSet results = pstmt.executeQUery();
  • 使用存储过程

尽量避免使用动态的语句,对用户的输入数据进行严格过滤或编码函数来处理。

  • 检查数据类型

interger

4、其他注入攻击

  • XML注入
  • 代码注入

eval()、PHP的动态include、system()

  • CRLF注入 \r\n

六、文件上传漏洞

1、问题:

  • 上传文件是Web脚本语言
  • Flash策略文件crossdomain.xml
  • 病毒、木马文件
  • 钓鱼图片或包含脚本 image

2、功能还是漏洞

  • Apache文件解析问题

从后往前解析

Phpshell.pgp.rar.rar.rar.rar

  • IIS文件解析问题

截断字符:分号

adc.asp;xx.jpg

  • PHP CGI路径解析问题

jpg -> php

cgi.fix_pathinfo

  • 利用上传文件钓鱼

图片里实际内容是代码

3、设计安全的文件上传功能

  • 文件上传的目录设置为不可执行
  • 判断文件类型:MINME Type、后缀检查
  • 使用随机数改写文件名和文件路径:能上传不能访问
  • 单独设置文件服务器的域名:同源策略

 

转载于:https://my.oschina.net/jojo76/blog/1510745

你可能感兴趣的文章
PWA 一隅
查看>>
深入浅出换肤相关技术以及如何实现
查看>>
Redis 基础、高级特性与性能调优
查看>>
React native 第三方组件 React native swiper
查看>>
接口幂等设计
查看>>
编程入门指南
查看>>
移动端的自适应方案—REM
查看>>
你真的懂volatile吗
查看>>
Android 编译时注解-提升
查看>>
[译] 别再对 Angular Modules 感到迷惑
查看>>
SQL2Struct:一款根据sql语句自动生成golang结构体的chrome插件
查看>>
说说 Spring AOP 中 @Aspect 的高级用法
查看>>
Mysql实战面试题
查看>>
View绘制流程第三步:递归draw源码分析
查看>>
Workbox CLI中文版
查看>>
贝聊亿级数据库分库分表实践
查看>>
同时连接gitlab和github
查看>>
vuex源码分析
查看>>
Android OTG之USB转串口模块通讯
查看>>
利用apidoc自动生成model文档
查看>>