安全牛学习笔记CSRF跨站请求伪造攻击漏洞的原理及解决办法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全牛学习笔记CSRF跨站请求伪造攻击漏洞的原理及解决办法相关的知识,希望对你有一定的参考价值。
CSRF跨站请求伪造攻击漏洞的原理及解决办法
CSRF,夸张请求伪造漏洞
漏洞的原理及修复方法
1.常见的触发场景
2.漏洞原理:浏览器同源策略
3.DEMO
4.漏洞危害
5.如何避免&修复漏洞
WEB
clinet server HTTP
GET POST
csrf漏洞
漏洞原理:
Server端接受到用户请求的时候,没有校验请求的来源(referer)是否是自己域的页面。
DEMO
浏览器同源策略:SOP
schema://hostname:post/url
origin.
http://www.baidu.com/
https//passport.baiud.com/login.jsp
js -> 非同源的资源
<img src="https//passport.baiud.com/a.jsp">
<script src>
CSRF漏洞的存在
---------------------------------------------------------------------------------
[email protected]:~/controller$ vim missionController.class.php
<?php
class missionController extends baseController{
public $var;
public function __construct(){
parent::__construct();
if($this->loged){
return;
}else{
header(‘Location: /index/php‘);
exit()
}
}
public function feedAction(){
$missionModel = new missionModel()‘
$feeds = $missionModel->get();
$url = ‘/index.php?c=mission&a=feed‘;
$username = $this->username;
require(‘tpl/feed.tpl‘);
}
public function feedApiAction(){
$callback = request(‘callback‘);
$missionModel = new missionModel();
$feeds = $missionModel->getMost($this->id);
$feeds = json_encode(array(‘email‘=>$this->username.‘count‘=>$feeds[0]));
echo $callback.‘(‘.$feeds.‘)‘;
}
public function missionAddAction(){
$missionModel = new missionModel();
$missionUrl = request(‘missionUrl‘);
$missionContent = request(‘missionContent‘);
$missionModel->add($this->id,$this->username,$missionUrl,$missionContent);
$count = 1;
if($count >0){
$this->json(array(‘result‘=>0,‘message‘=>‘add mission ok‘));
}else{
$this->json(array(‘result‘=>1,‘message‘=>‘add mission wrong‘));
}
}
public function testAction(){
echo ‘in‘;
}
public function add(){
$this->id;
}
---------------------------------------------------------------------------------
alert(document.domain);
var img = document.createElement(‘img‘)
img.src=‘http://paper.com/a.jsp‘;
p = document.getElementById(‘p‘);
p.appendChild(img);
GET /a.jsp HTTP/1.1
Host: paper.com
User-Agent: Mozilla/5.0 (Macintosh); Intel Mac OS X 10.9, rv:35.0) Gecko/20100101 Firefox/35.0
Accept: miage/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: zh-cn,zh;q=0.8,en=us;q=0.5,en;q=0.3
Accept-Encoding: qzip, deflate
Refere: http://csrf.com/csrf.html
Cookie: id=1 sessionid=8e8418a9326ca42dfe4499ac357171e2
Connection: keep-alive
HTTP/1.1 404 Not Found
Data: Sun, 08 Feb 2015 06:10:42 GMT
Server: Apache/2.2.22 (Debian)
Vary: Accept-Encoding
Content-Length: 278
Keep-Alive: timeout=5,max=100
Connection: Keep-Alive
Conntent-Type: text/html; charset-iso-8859-1
---------------------------------------------------------------------------------
Welcome to the MySQL monitor. Commands end with ; or \g
Your MySQL connection id is 230
Server version: 5.5.40-0+wheeyl-log (Debian)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliate. Other names my be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql> use security;
Reading table information for completion of table and column names
You can turn off this feature to get queciker startup with -A
Database changed
mysql> show tables
-> ;
+---------------------+
| Tables_in_security |
+---------------------+
| emails |
| mission |
| referes |
| uagents |
| userinfo |
| users |
+---------------------+
6 rows in set (0.00 sec)
mysql> truncate mission;
Query OK, 0 rows affeted (0.03 sec)
mysql> select * from mission;
Empty set (0.00 sec)
漏洞危害:
CSRF:在用户不知不觉的情况下,对网站发起请求,伪造用户行为,比如发表文章、删帖等,
漏洞修复:
一:校验请求的referer;
二:在请求中携带随机化参数,让请求不可预测。
Get /index.php?c=mission&a=missionAdd&missionUrl=aaa&missionContent=aaa HTTP/1.1
Host paper.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: image/png,image/*;q=0.8,*/*,q=0.5
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://scrf.com/csrf.html
Cookie: id=1; sessionid=8e8418a9326ca42dfe4499ac357171e2
Connwxrion: keep-alive
token: 随机化参数
---------------------------------------------------------------------------------
missionController.class.php
<?php
class missionController extends baseController{
public $var;
public function __construct(){
parent::__construct();
if($this->loged){
return;
}else{
header(‘Location: /index/php‘);
exit()
}
}
public function feedAction(){
$missionModel = new missionModel()‘
$feeds = $missionModel->get();
$url = ‘/index.php?c=mission&a=feed‘;
$username = $this->username;
require(‘tpl/feed.tpl‘);
}
public function feedApiAction(){
$callback = request(‘callback‘);
$missionModel = new missionModel();
$feeds = $missionModel->getMost($this->id);
$feeds = json_encode(array(‘email‘=>$this->username.‘count‘=>$feeds[0]));
echo $callback.‘(‘.$feeds.‘)‘;
}
public function missionAddAction(){
$referer = $_SERVER[‘HTTP_REFERER‘];
$hostname = parse_url($referer,PHP_URL_HOST);
if($hostname !== ‘paper.com‘){
exit();
}
$missionModel = new missionModel();
$missionUrl = request(‘missionUrl‘);
$missionContent = request(‘missionContent‘);
$missionModel->add($this->id,$this->username,$missionUrl,$missionContent);
$count = 1;
if($count >0){
$this->json(array(‘result‘=>0,‘message‘=>‘add mission ok‘));
}else{
$this->json(array(‘result‘=>1,‘message‘=>‘add mission wrong‘));
}
}
public function testAction(){
echo ‘in‘;
}
public function add(){
$this->id;
}
---------------------------------------------------------------------------------
校验referer存在的缺陷:
1:htpps->http
浏览器会因为隐私的问题,不发送referer.
1.tricks->不发送referer
添加token存在的问题:
1.成本高,
->在head里面种一个token,降低成本,
2.当前请求为非法请求,
->服务器重新给页面中一个token,
->第一个标签中的token,还是以前的token
安全性<->易用性做一个平衡
在head中种植一个token,并且设置这个token的有效期为一个较长的时间,
discuz formhash
该笔记为安全牛课堂学员笔记,想看此课程或者信息安全类干货可以移步到安全牛课堂
Security+认证为什么是互联网+时代最火爆的认证?
牛妹先给大家介绍一下Security+
Security+ 认证是一种中立第三方认证,其发证机构为美国计算机行业协会CompTIA ;是和CISSP、ITIL 等共同包含在内的国际 IT 业 10 大热门认证之一,和CISSP偏重信息安全管理相比,Security+ 认证更偏重信息安全技术和操作。
通过该认证证明了您具备网络安全,合规性和操作安全,威胁和漏洞,应用程序、数据和主机安全,访问控制和身份管理以及加密技术等方面的能力。因其考试难度不易,含金量较高,目前已被全球企业和安全专业人士所普遍采纳。
Security+认证如此火爆的原因?
原因一:在所有信息安全认证当中,偏重信息安全技术的认证是空白的, Security+认证正好可以弥补信息安全技术领域的空白 。
目前行业内受认可的信息安全认证主要有CISP和CISSP,但是无论CISP还是CISSP都是偏重信息安全管理的,技术知识讲的宽泛且浅显,考试都是一带而过。而且CISSP要求持证人员的信息安全工作经验都要5年以上,CISP也要求大专学历4年以上工作经验,这些要求无疑把有能力且上进的年轻人的持证之路堵住。在现实社会中,无论是找工作还是升职加薪,或是投标时候报人员,认证都是必不可少的,这给年轻人带来了很多不公平。而Security+的出现可以扫清这些年轻人职业发展中的障碍,由于Security+偏重信息安全技术,所以对工作经验没有特别的要求。只要你有IT相关背景,追求进步就可以学习和考试。
原因二: IT运维人员工作与翻身的利器。
在银行、证券、保险、信息通讯等行业,IT运维人员非常多,IT运维涉及的工作面也非常广。是一个集网络、系统、安全、应用架构、存储为一体的综合性技术岗。虽然没有程序猿们“生当做光棍,死亦写代码”的悲壮,但也有着“锄禾日当午,不如运维苦“的感慨。天天对着电脑和机器,时间长了难免有对于职业发展的迷茫和困惑。Security+国际认证的出现可以让有追求的IT运维人员学习网络安全知识,掌握网络安全实践。职业发展朝着网络安全的方向发展,解决国内信息安全人才的匮乏问题。另外,即使不转型,要做好运维工作,学习安全知识取得安全认证也是必不可少的。
原因三:接地气、国际范儿、考试方便、费用适中!
CompTIA作为全球ICT领域最具影响力的全球领先机构,在信息安全人才认证方面是专业、公平、公正的。Security+认证偏重操作且和一线工程师的日常工作息息相关。适合银行、证券、保险、互联网公司等IT相关人员学习。作为国际认证在全球147个国家受到广泛的认可。
在目前的信息安全大潮之下,人才是信息安全发展的关键。而目前国内的信息安全人才是非常匮乏的,相信Security+认证一定会成为最火爆的信息安全认证。
本文出自 “11662938” 博客,请务必保留此出处http://11672938.blog.51cto.com/11662938/1975392
以上是关于安全牛学习笔记CSRF跨站请求伪造攻击漏洞的原理及解决办法的主要内容,如果未能解决你的问题,请参考以下文章