pikachu学习——sql注入

sql注入漏洞概述:

     数据库注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,

导致数据库信息泄露的一种漏洞。

sql注入攻击流程

 

 

pikachu学习——sql注入

 

 

 

常见注入类型:   

                              数字型  user_id=$id

           字符型 user_id=‘$id‘

           搜索型  text like ‘%{$_GET[‘search‘]}‘  "

 

我们就可以开始在pikachu平台去尝试进行sql注入

 

数字型注入(post):

       选择一个数字,例如1,查询并抓包

     pikachu学习——sql注入

 

 

 将抓包内容发送到repeater模块,我们可以在1后面添加payload“or 1=1”

pikachu学习——sql注入

 

 

 我们发现所有用户信息都被爆出,这说明它存在数字型注入漏洞

我们可以查看一下他的源码,post请求直接把id带到SQL语句中,没有做任何处理,所以id这里存在sql注入漏洞;

 pikachu学习——sql注入

 

 

 

 

字符型注入(get):

输入数据库中存在用户kobe,查询

 

pikachu学习——sql注入

 

 

因为是get,所以我们可以不用抓包,直接尝试

字符型的注入,我们可以加单引号、双引号、括号、以及他们的组合并且注释,去测试

 

pikachu学习——sql注入

 

 

 

当我们输入kobe‘--+’时信息全部爆出,所以它存在单引号字符型注入漏洞

查看源码,发现字符型,name被单引号包裹

 

pikachu学习——sql注入

 

 

 

SQL搜索型注入:

 

pikachu学习——sql注入

 

 

 

这里可以进行用户名搜索,所以我们可以猜测他是否使用了数据库中的搜索逻辑

查看源码,可以发现模糊查询使用了like,name被单引号和%包裹,所以我们需要构造单引号闭合,且闭合需要加%

 

pikachu学习——sql注入

 

 

 

输入payload  xxx%’  or 1=1 #信息全部爆出

 

SQLxx型注入:

pikachu学习——sql注入

 

 

 

查看源码我们发现(‘$name‘),name被单引号及括号包裹,类似搜索型

我们可以输入payload  xxx’) or 1=1#

 

 

pikachu学习——sql注入

 

 

”insert/update“注入:

         MySQL 表中使用 INSERT INTO SQL语句来插入数据

        以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法:

      INSERT INTO table_name ( field1, field2,...fieldN )
                              VALUES
                             ( value1, value2,...valueN );
如果数据是字符型,必须使用单引号或者双引号,如:"value"。

下面我们打开pikachu此界面,首先进行信息注册

 

pikachu学习——sql注入

 

 我们输入用户名为单引号,密码随意,发现语法报错,这意味着我们输入的内容在后台参与了mysql的拼接

pikachu学习——sql注入

 

 那我们就可以在用户名处输入sql查询语句,让他insert到后台数据库,爆出相应信息

a’or updatexml(1,concat(0x7e,database()),0)or ‘

 

pikachu学习——sql注入

 

 

 

 

 

UPDATE介绍:用于更新表中的现有数据。亦可用UPDATE语句来更改表中单个行,一组行或所有行的列值。

pikachu学习——sql注入
MySQL-UPDATE语法:

UPDATE [LOW_PRIORITY] [IGNORE] table_name 
SET 
    column_name1 = expr1,
    column_name2 = expr2,
    ...
WHERE
    condition;
pikachu学习——sql注入

在上面UPDATE语句中:

第一,在UPDATE关键字后面指定要更新数据的表名。

第二,SET子句指定要修改的列和新值。要更新多个列,请使用以逗号分隔的列表。

第三,使用WHERE语句中的条件指定要更新的行。

    WHERE子句是可选的。 如果省略WHERE子句,则UPDATE语句将更新表中的所有行。

 

我们可以登陆进去后,写入相应语句去爆破数据库

 a‘ or  updatexml(1, concat(0x7e,(select (concat_ws(‘-‘,username,password)) from pikachu.users limit 0,1)  ),1)  or ‘

 pikachu学习——sql注入

 

”delect“注入:

 

 

 

       DELETE FROM 命令用于删除 MySQL 数据表中的记录。

            DELETE FROM 表名称 WHERE 列名称 = 值

 

查看源码我们发现他直接把id内容直接拼接到了数据库中

pikachu学习——sql注入

 

 

 

进入页面储存1234567信息删除并抓包,发送到repertar,我们根据删除行的信息得出表名

 

pikachu学习——sql注入

 

 输入1 or updatexml(1,concat(0x7e,database()),0)语句将id转换,并转码

 

pikachu学习——sql注入

 

 

点击发送,我们可以在最右边底部,我们可以获取到数据库信息

pikachu学习——sql注入

 

 

“http header”注入:

       HTTP头注入其实并不是一个新的SQL注入类型,而是指出现SQL注入漏洞的场景。有些时候,后台开发人员为了验证客户端头信息(比如常用的cookie验证),或者通过http header头信息获取客户端的一些资料,比如useragent、accept字段等。会对客户端的http header信息进行获取并使用SQL进行处理,如果此时没有足够的安全考虑则可能会导致基于http header的SQL Inject漏洞。

          进入页面输入用户名密码admin/123456进行登录

pikachu学习——sql注入

 

 查看登陆后信息我们猜测后端是不是对http header里面的数据进行了获取,进行了相关数据库的操作

我们点击退出并抓包将内容发送到repeater模块

pikachu学习——sql注入

 

 

修改user-agent  为

  firefox’ or updatexml(1,concat(0x7e,database()),0)or ‘

 

pikachu学习——sql注入

 

 

 

布尔盲注:

   布尔盲注主要表现:

     1.没有报错信息

     2.结果都只显示两种情况(0或1)

     3.在正确的输入下,输入and 1=1/and 1=2可以判断

 

其实主要就是利用字符的ascii码进行比对,看回显结果,一步步缩小范围,直到验证成功。

 

输入  kobe’ and ascii(substr(database(),1,1))>120#

pikachu学习——sql注入

 

 

回显失败说明小于120

 

 

输入  kobe’ and ascii(substr(database(),1,1))=112#

pikachu学习——sql注入

 

 

我们可以知道数据库名第一个字母ascil码为112,即p,改变substr提取的值一个一个试直到完全爆出

查库: select schema_name from information_schema.schemata
查表:select table_name from information_schema.tables where table_schema‘security‘
查列:select column_name from information_schema.columns where table_name=‘users‘
查字段:select username,password from security.users

时间盲注

      时间盲注主要使用if语句,通过延迟信息进行判断,不看回显信息

         kobe’ and sleep(5)#  

        若正确,页面延迟5秒,不正确直接返回,我们可以用sleep判断相应语句是否正确,来

获取数据库信息,这种方法也很慢

 

pikachu学习——sql注入

上一篇:Mysql的事务实现原理


下一篇:排查web访问慢故障