CSRF漏洞原理:
-
漏洞网站 => a 站点 存在csrf漏洞的 (http://192.168.0.31/bluecms/user.php?act=my_info)
-
恶意网站 => B 站点 ( http://127.0.0.1/csrf.html )
用户登录a站,浏览器保存有 cookie
用户去访问b站,b站中的js脚本对a站的某个功能接口发起请求
浏览器会把a站的cookie填充到请求包中,让这次接口请求可以完成
用户在不知情的时候,访问了不相关的功能接口,且数据不确定
借助了用户的cookie来完成某个固定的操作。简单来说就是借助用户a站的cookie 在用户访问b站后 修改a站内容
CSRF的局限性:
-
攻击的点都是a网站中已经存在的功能, 不能执行其他代码或者功能
-
只能借助用户的cookie,无法获取到用户的cookie
3.这个数据包可以重复发送
有的网站一个数据包 只能使用一次 再次发送时 会提示数据包异常 不在处理数据包的请求
数据包需要携带某个特定的数据(出现在body里 或者是请求头)
如何清除网站cookie
1.手动在用户页面点击退出
2.关掉浏览器 (有些网站长久保存cookie 关掉浏览器也有 例如bilibili)
对比xss漏洞:
xss漏洞: 漏洞网站 => 将恶意代码插入到漏洞网站中 (代码执行 ,执行js代码)
csrf: 借助用户的权限完成攻击
一定要诱导用户去访问恶意网站,才能完成
钓鱼, 难度非常大
组合漏洞利用 通过xss稳定触发csrf
如果无法诱导用户访问b站点 可以再用户常访问的c站通过xss漏洞插入csrf恶意代码 就是在用户访问c站时盗用a站的cookie
管理员优先级别高.
# csrf漏洞的挖掘思路
a 网站已知的功能
-
功能的接口会传传递那些参数 ( 修改用户信息\ 修改收货地\ 支付接口\ 绑定邮箱)
-
这个数据包可以重复发送
通过请求包,构建恶意攻击代码
<form id="a" action="http://192.168.0.31/bluecms/user.php">
</form>
<script>
document.findElementByID("a").submit();
</script>
构建恶意代码需要前端编写能力 可以尝试burp的工具

burp会自动生成代码
默认使用的ajax来完成请求发送
ajax 用来完成网络请求的模块


copy html 后把这段代码插入到要让用户访问的b站 就可修改数据
test in browser burp会帮你生成一个网址 自己开代理点击这个网址 就可简单尝试这个漏洞


存在限制:
以前csrf非常难防 现在浏览器会对js请求进行限制。通过js发起请求时,没法直接完成交互
Access-Control-Allow-Origin: 拦下了攻击
访问不同源的站点时,需要看目标站点是否允许用户访问。通过另一个站修改这个站内的数据
burpsuit
http://192.168.0.31 服务器同意 burpsuit来访问,才可以访问成功
限制的js直接发送请求。
如果被拦 可通过form表单发起请求

修改body的内容

然后再次test in bro 访问这个网址 点击按钮 会发现数据已经更改(攻击成功)
可以在代码后加上 form.submit(); 点击链接 会完成自动提交
如何预防CSRF
可以强行用验证码(强制用户必须和应用进行交互,但是体验性太差了) 请求中加随机Token值
实战靶场
不同版本的cms源码有问题。可能不通用。
从后台往前台找 =>
信任机制 => 后台使用 => 企业内部人员
webshell:
通过web应用管理操作系统。
eval($_REQUEST['8']); 执行用户传入的代码
webshell 管理工具
http://newcsrf.zs.aqlab.cn/uploads/fl.php 8
需要根据网站的编写语言, 需要使用对应的语言写后门文件
php 的一句话木马
java (jsp) java的一句话木马
蚁剑\哥斯拉\冰蝎 (webshell 管理工具)