美文网首页
从代码角度谈谈演绎推理

从代码角度谈谈演绎推理

作者: fatfatEddy | 来源:发表于2017-02-25 14:07 被阅读18次

目录:


这是一篇饱含私心的文章,从web安全学习中去理解演绎推理。



推理的过程

逻辑学家在人类有限的认知领域里做出了最简洁、准确的描述:推理的四个步骤:抽象、概括、判断、推理;

推理的两个种类:归纳推理和演绎推理;他们之间相互独立又相互依赖 ---《逻辑十九讲》


演绎推理

演绎推理重在一个分析的过程。

在web安全学习中,跟着视频教程进行靶机的训练时,总感觉有些步骤不是很理解。

就像是你到了一个新大楼里,从1楼直接从了升降梯(教程)到了5楼,当中有很多楼层,还没亲自走楼梯一步步去认识一遍,所以总感觉没有全懂,有点云里雾里的感觉。

如果试着,自己从头到尾去走一遍,会发现很多原来不清楚的地方慢慢地明晰了起来,有种“柳暗花明又一村”的感觉。


而这自己走楼梯的过程当中涉及到了两个点:

  • 分析
  • 提取知识的必要难度

分析

先来谈谈分析过程。

在web安全学习时,学习SQL注入知识点的时候,自己给自己提出了一个问题:“有多少种SQL 注入类型?为什么会分成这3类?是依据什么分类的?”

我用了分析去解决了自己的疑问。

分析过程:

  • 黑盒测试看一遍
  • 白盒测试看一遍(源码&后台数据库的实际运行)

有多少种SQL 注入类型?

有3种:

  • 1.基于报错注入
  • 2.基于时间盲注
  • 3.基于布尔盲注

为什么会分成这3类?

首先要存在注入点,然后依据服务器返回的信息可以分成3类,而服务器返回的信息又基于其源码。

换句话说,基于报错、时间盲注、布尔盲注都是要看源码中的代码怎么写,然后服务器才会根据源码返回给你不同的信息。

通过它返回不同的信息:1返回错误 2只返回两个界面 3 均不返回,再进行相应的操作。



1.基于报错注入

// connectivity 
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

if($row)
 {
    echo "<font size='5' color= '#99FF00'>";
    echo 'Your Login name:'. $row['username'];
    echo "<br>";
    echo 'Your Password:' .$row['password'];
    echo "</font>";
    }
    else 
    {
    echo '<font color= "#FFFF00">';
    print_r(mysql_error());
    echo "</font>";  
    }

网页前端接受用户的输入,然后送到后台数据库查询,如果查询得到结果,就返回你的用户名和密码此类信息,如果查询不到结果,就报出数据库的错误。

关键句:print_r(mysql_error());
mysql_error():返回上一个 MySQL 函数的错误文本,如果没有出错则返回 ''(空字符串)

用户将构造自己的数据流提交给后台,后台经过数据库查询,如果程序将用户的输入流拼接后,导致查询错误,此时因为源码中有print_r(mysql_error());,所以会一览无余的将错误返回给用户。

这个情况下,对用户是比较友好的,因为每次输入是否有错,你都可以第一时间知道。


2.基于布尔盲注

// connectivity 


$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

    if($row)
    {
    echo '<font size="5" color="#FFFF00">'; 
    echo 'You are in...........';
    echo "<br>";
        echo "</font>";
    }
    else 
    {
    
    echo '<font size="5" color="#FFFF00">';
    
    echo "</br></font>";    
    echo '<font color= "#0000ff" font size= 3>';    
    
    }
    

如果查到数据,就返回A页面,如果没有查询到数据就返回B页面。
只能通过测试语句的true 和FALSE 来判断,并一步步得到数据库的信息。

这种情况,比基于错误获得的反馈信息要更少,因为源码没有将error详细输出,有无错只是一个页面的差异。
但是还是给了用户反馈信息,只是反馈信息比较单一,只有TRUE或FALSE ;


3.基于时间盲注

// connectivity 


$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

    if($row)
    {
    echo '<font size="5" color="#FFFF00">'; 
    echo 'You are in...........';
    echo "<br>";
        echo "</font>";
    }
    else 
    {
    
    echo '<font size="5" color="#FFFF00">';
    echo 'You are in...........';

    echo "</br></font>";    
    echo '<font color= "#0000ff" font size= 3>';    
    
    }

不管后台是否查到数据,web页面的返回值只有一种,所以可以通过MySQL中的sleep()时间函数去判断注入的语句是否正确,以此慢慢爆出数据库的信息。


它的本质是什么?

一句话:SQL注入类型分类的本质源于源代码,就看源代码怎么写的。

web页面的返回信息的情况有3种:

  • web页面的返回值多样,报出详细错误信息(基于错误)
  • web页面的返回值只有两种(基于布尔盲注)
  • web页面的返回值只有一种(基于时间盲注)

我们再因地制宜,一步步爆出数据库信息。


提取知识的必要难度

之前看到“心智工具箱”了解到了一个概念:提取知识的必要难度。

大概意思就是说,在上课的时候,不要第一时间做笔记,就算记得很详细,过后你也会遗忘很多的,因为你的提取知识的必要难度很低。

要过一段时间后,通过自己的思考和回忆,再去整理笔记,这样提取知识的必要难度会大大增加,因此你对于知识的掌握和记忆会比前一种更深。

同理,我们如果跟着教程,看一下,暂停一下,一步一步跟着教程做的话,提取知识的必要难度就会很低,因为很多步骤我不知道为什么要这么做,为什么不那样做,所以如果跟着教程做了一遍后,就应该自己从头到尾脱离教程,调试一遍。


这样才能提高提取知识的必要难度,能达到一个更好的学习效果。


参考list:

  • 《逻辑十九讲》
  • “心智工具箱”

相关文章

  • 从代码角度谈谈演绎推理

    目录: 这是一篇饱含私心的文章,从web安全学习中去理解演绎推理。 推理的过程 逻辑学家在人类有限的认知领域里做出...

  • 立春论《演绎与归纳》

    【演绎】(Deductive reasoning)一般称为演绎法或演绎推理。它是指从数个已知命题通过推理得出新命题...

  • 做自媒体如何让文章逻辑严谨,充满说服力?

    “写文章是,你要记住一句话:用演绎推理来构思,用归纳推理来呈现”。 我们从情绪的角度讲了判断文章好坏的标准:让人在...

  • #微书摘# 收敛思考之演绎推理《思维力:高效的系统思维》67/1

    收敛思考之演绎推理 收敛思考除了归纳推理,还有演绎推理。何谓演绎推理?演绎是一个由普遍到特殊的过程,即基于已知的普...

  • 写作推理方法四讲(三)

    三、演绎推理 演绎推理是归纳推理的逆过程,是一个从普遍到特殊的过程。 最经典的推理过程“三段论”:1)假设存在三个...

  • 管理学考研的逻辑基础(一)

    概念形成判断,判断形成推理 常见三种推理:演绎推理,归纳推理,类比推理。其中演绎推理是重点 一、直言推理 直言判断...

  • #30天专注橙长计划#+写作+Day10

    金字塔原理第五章 演绎推理与归纳推理 本章主要介绍同层思想之间的逻辑关系,包括演绎推理和归纳推理。 演绎推理的步骤...

  • 【读】推理能力(3月21日)

    今天继续学习第七章推理能力。推理一般分为合情推理和演绎推理。合情推理是从已有的事实出发,凭借经验和直觉,...

  • 演绎推理

    1 为什么有启发 我之前在逻辑思维里面有接触这个概率只是知识著名的三段论及西方人的思维习惯 2我还能把这个启发用到...

  • 前端面试经典

    javaScript 理解MVVM等框架,手写伪代码。 ES6新特性,说说class 从编译角度谈谈变量提升 对象...

网友评论

      本文标题:从代码角度谈谈演绎推理

      本文链接:https://www.haomeiwen.com/subject/bvzgwttx.html