SQL注入

作者: 灯火暗了 | 来源:发表于2019-12-17 01:19 被阅读0次

    本博客需要再补充:实验代码/盲注/延时/head/post/宽字节/堆叠/二次
    本博客由于本人才疏学浅,边学边操作(操作由于是用别人的靶场不便截图)边查询各位师傅的博客,因此也是站在巨人的肩膀上进行学习总结,在借用各位师傅知道的而我不知道的知识点时,都会进行标注。

    什么是sql注入:
    由于web程序没有对用户的输入进行严谨的控制和过滤,前端的输入了攻击者恶意构造的语句,比如一些查询数据库的语句,当后台收到该输入时,就会去执行该语句,然后数据就会被攻击者得到。
    概括来说,sql注入就是因为前端输入的参数被拼接了攻击者的恶意语句。

    另外有个小细节,经查阅大佬(谢公子)博客:SQL注入可以分为平台层注入和代码层注入。前一个即为数据库平台漏洞或者数据库配置不当而存在的漏洞,后一个就是程序员未进行严谨的过滤导致的。

    sql注入对于数据库类型及版本来说,在一定程度上也需要注意,比如MySQL,5.0以上的会有一个系统自带库,可以在某些程度上给我们减少压力,但是5.0以下我们大力出奇迹。

    一、显错注入

        显错注入即在我们进行攻击时,web页面会返回明显的错误回显
        sql注入基础流程大抵上都相同,不同之处一般为注入点不同

    0x01、原理:
    浏览器将用户输入的数据当作了代码(数据库语句)执行。
    0x02、实现该操作的条件:
    1)、用户能控制输入。
    2)、原本浏览器要执行的代码,拼接了用户输入的数据。

         用户如果被限制得死死的,没有办法进行输入限定之外的字符,那么将很难进行sql注入;拼接用户输入的数据,这部分一般是构造的数据库语句,利用闭合将原本浏览器让我们输入的数据输入后,浏览器还会继续执行我们拼接的语句。
    

    0x03、常见显错注入类型:
    1)、数字型注入:url传参一般为?id=1/2/3/4...这种形式
    2)、字符型注入:url传参一般为?name=admin这种形式
    3)、搜索型注入:较为特殊,一般代码语句为:select * from 表名 where 字段 like ‘%关键字%’。

    0x04、显错注入基本思路/流程:
    1)、判断是否存在注入点(个人觉得也可以称之显错点便于入门理解)
    什么是注入点,如果寻找到这样一个情形,那么就说明可以有注入点,对url进行添加修改:
    原url: http://xxx.com/news.php?id=1
    在后面添加 and 1=1 和 and1=2
    很明显,添加and 1=1 不会有错误,因为and 1 = 1 本身就是对的,但是若是我们输入and 1 = 2,网页报错了,说明我们的 and1=2 被传入数据库了,数据库查询出现了错误,因此返回了错误。

    这里需要注意的是,要注意闭合
    闭合:
    数据库查询语句一般为:select 'tiehh' from dmg;
    查询字符串是需要添加 ' ' 的,因此我们在输入构造语句的时候,需要想办法把前面的闭合掉,不然我们输入拼接的语句会被当作字符串被用去查询。

    2)、进行字段猜解
    使用order by可以进行查询该表拥有多少个字段。

    作用:order by在我们使用的时候,就是在查询我们当前所在的页面的表有多少个字段,当我们了解当前的表有多少 个字段后,就可以通过联合查询去查询别的表的某个字段。

    语句:?id=1 ' order by 3 -- qwe

    3)、进行联合查询
    联合查询语句详情请学习数据库查询语句,这里需要注意的是:union联合查询,默认要查询完当前表的字段,所以联合查询的另外一张表,不需要完全查询完,但要和当前页面所在表的字段数。
    首先需要了解的是sql有自带的表,这些表里面存放的是我们自创的表的信息。
    因此我们可以通过这些系统表去查到开发人员的表。

    步骤一.查询数据库版本和数据库名称
    ?id=1 and 1=2 ' union select 1,version() //用于查看是否可以进行注入
    ?id=1 and 1=2 ' union select 1,database()

    步骤二.
    通过系统自带库查询其它的表
    ?id=1 and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() limit 0,1 --+

    步骤三.
    得到表名后就继续通过系统自带库进行表中字段查询
    ?id=1' and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=tablename --+

    这会就可以得到表名和字段名,这样我们就可以查询想要的数据了。

    相关文章

      网友评论

          本文标题:SQL注入

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