原 web安全、XSS、CSRF、注入攻击

作者:汪娇娇

时间:2017年8月15日

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

web安全

一、世界观安全

1、黑帽子、白帽子

2、安全三要素:

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

3、如何实施安全评估

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

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请求

<script src="1.js"></script>
<img src="1.jpg"/>
<link rel="stylesheet" href="1.css"/>

(3)XMLHttpRequest

2. 浏览器沙箱

3. 恶意网址拦截

三、XSS(跨站脚本攻击)

1、XSS简介

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

正常demo:test1

xss后:test1

分类:

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

2、XSS攻击

(1)cookie劫持demo:test3

(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)识别用户安装的软件

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

(6)CSS History Hack

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

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

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

3、XSS构造技巧

(1)利用字符编码

系统转义了双引号:

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

GBK/GB2312编码

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

(2)绕过长度限制

<input type="text" value="$var" />
"><script>alert(/xss/)<script>
" onclick=alert(1)//

(3)使用<base>标签 demo:test4

(4)window.name demo:test5-1

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

evel(name);

4、XSS防御

(1)HttpOnly

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

Set-Cookie时标记: demo:test6

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

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

例:1+1<3

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

php中:htmlspecialchars()和htmlentities()

JS中:escape()

(4)正确防御XSS

<div>$var</div>
<div><script>alert(/xss)</script></div>
  • 在HTML属性中输出:HtmlEncode
<div id="abc" name="$var"></div>
<div id="abc" name=""><script>alert(/xss/)</script><""></div>

OWASP ESAPI

String safe = ESAPI.encode().encodeForHTMLAttribute(request.getParameter("input"));
  • 在<script>标签中输出:JavascriptEncode
<script>
    var x = "$var";
</script>
<script>
    var x = "",alert(/xss);//";
</script>
  • 在事件中输出:JavascriptEncode
<a href="#" onclick="funcA('$var')">test</a>
<a href="#" onclick="funcA('');alert(/xss/);//'>test</a>
  • 在CSS中输出:尽可能禁止用户控制,或用OWASP ESAPI中的encodeForCSS()
<style>@import 'http://ha.ckers.org/xss.css';</style>
  • 在地址中输出:URLEncode

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

1、CSRF简介

攻击者诱使用户访问一个恶意网址,并以该用户身份在第三方站点里执行一次操作。 例:删除博客文章:http://blog.sohu.com/menage/entry.do?m=delete&id=123456

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=123
http://host/path/delete?username=md5(salt+abc)&item=123
http://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=2
SELECT title,description,body FROM items WHERE ID = 2
http://newspaper.com/items.php?id=2 and 1=2
SELECT 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 admin
id=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上传到数据库能访问到的路径下。 

  • 攻击存储过程

使用CALL或EXCUTE来执行。

xp_cmdshell

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

0xbf27 or 1=1 

统一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
  • 病毒、木马文件
  • 钓鱼图片或包含脚本 

2、功能还是漏洞

  • Apache文件解析问题

从后往前解析

Phpshell.pgp.rar.rar.rar.rar

  • IIS文件解析问题

截断字符:分号

adc.asp;xx.jpg

  • PHP CGI路径解析问题

jpg -> php

cgi.fix_pathinfo

  • 利用上传文件钓鱼

图片里实际内容是代码

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏james大数据架构

SQL SERVER 内存分配及常见内存问题 简介

一、问题: 1、SQL Server 所占用内存数量从启动以后就不断地增加:       首先,作为成熟的产品,内存溢出的机会微乎其微。对此要了解SQL SER...

35510
来自专栏散尽浮华

zabbix问题记录

zabbix部署好,在使用一段时间后,出现了不少报错,在此简单做一记录。 1)Zabbix监控界面报错“Lack of free swap space”解决 公...

4418
来自专栏Seebug漏洞平台

CVE-2017-16943 Exim UAF漏洞分析——后续

上一篇分析出来后,经过@orange的提点,得知了meh公布的PoC是需要特殊配置才能触发,所以我上一篇分析文章最后的结论应该改成,在默认配置情况下,meh提供...

4278
来自专栏jojo的技术小屋

原 web安全、XSS、CSRF、注入攻击

作者:汪娇娇 时间:2017年8月15日 当时也是看了一本书《白帽子讲web安全》,简单的摘录然后做了个技术分享,文章不是很详细,建议大家结合着这本书看哈。 w...

5137
来自专栏程序员叨叨叨

compileSdkVersion 'android-24' requires JDK 1.8 or later to compile

今天,好久没有写Android程序的我突发奇想,想简单写一个每日任务APP。好的!新建工程->写好代码框架->开启模拟器->运行!哎哎哎?!那啥!咋报错了嘞?!...

1234
来自专栏青蛙要fly的专栏

Android技能树 — 网络小结(4)之socket/websocket/webservice

介于自己的网络方面知识烂的一塌糊涂,所以准备写相关网络的文章,但是考虑全部写在一篇太长了,所以分开写,希望大家能仔细看,最好可以指出我的错误,让我也能纠正。

1083
来自专栏Seebug漏洞平台

CVE-2017-16943 Exim UAF漏洞分析--后续

作者:Hcamael@知道创宇404实验室 上一篇分析出来后,经过@orange的提点,得知了meh公布的PoC是需要特殊配置才能触发,所以我上一篇分析文章最后...

3276
来自专栏数据和云

当SQL Server爱上Linux:AVAILABILITY_MODE 和 DataGuard 的实践差距

作者 | 张乐奕:Oracle ACE 总监,ACOUG (中国 Oracle 用户组)联合发起人。Oracle 数据库高可用解决方案与 Exadata 一体...

962
来自专栏北京马哥教育

在Python中使用Elasticsearch

在这篇文章中,我将讨论Elasticsearch以及如何将其整合到不同的Python应用程序中。

3740
来自专栏Java工程师日常干货

Redis高级特性介绍及实例分析Redis基础类型回顾 Redis发展过程中的三种模式:主从、哨兵、集群 哨兵模式 Redis的简单事务 Redis持久化机制 发布与订阅消息 Redis案例设计

本文将为大家介绍Redis的一些高级特性以及结合一个具体的实际案例来对Redis进行设计分析。

1922

扫码关注云+社区

领取腾讯云代金券