Kali SQL注入--基于SQLi-Labs

Kali SQL注入--基于SQLi-Labs

  • SQLi-Labs
  • SQL注入
    • SQL注入的基本原理
  • SQL注入初步实验
  • 一个结束语

SQLi-Labs

SQLi-Labs是一个练习和理解SQL注入的非常合适的靶站平台,总共有75关,这里我选择它做我的实验环境来对结果进行展示。

SQL注入

SQL注入的基本原理

首先,这不是一篇极为完整的SQL注入整理,这只是一篇对原理的简单复习和介绍。

  1. SQL注入的基本原理
    这是正常的SQL语句
select * from user where id = '$id' limit 0,1;

我们将$id = 1‘ union select 1,2,3 --+
这是构造的语句

select * from user where id = '1' union select 1,2,3 --+' limit 0,1;

就这样我们让SQL执行了我们想让他执行的代码
通过这样的方式,我们就可以利用SQL注入的漏洞了,执行我们想让他执行的SQL命令。

  1. SQL注入的分类
    我们将SQL注入主要分成三类
    第一类:有回显的SQL注入
    1.1 普通注入和联合注入
    这一类SQL注入漏洞属于相对简单的注入漏洞,在页面中会直接返回注入的结果。
    1.2 报错注入
    所谓的报错注入就是说通过特殊的SQL语句使得页面回显报错信息,通过对报错信息的理解分析系统,达到我们的目的。
    这里简单提及三种常用的报错函数
    【1】updatexml
    【2】floor
    floor报错的原理是rand和order by和group by的冲突。
    【3】exp
    exp报错的本质是利用溢出报错。
    1.3 通过注入DNS请求,达到回显的目的的注入
    这里暂不做介绍
    第二类:没有回显的SQL注入(盲注)
    2.1 Bool盲注
    Bool盲注的应用环境主要是,页面没有明显的回显,但是是存在反应的,如果输入正确的SQL命令则会有正确的反应如正常访问页面,反之如果输入错误的命令就会产生页面无法访问等问题。利用上面所说的特点,就可以构造合适的SQL命令实现注入。
    这里简单提出三类我们常用的函数类别
    【1】截取函数 substr(), left(), right()
    substr(str, start, length);
    left(str, length);
    right(str, length);
    【2】转换函数 ascii(), hex()
    ascii(char); 将字符串转化为ASCII码值这样的好处是利用数字来避免字符所需的单引号
    hex(); 将字符串转为16进制值
    【3】比较函数 if()
    if(cond, True_result, False_result);
    2.2 时间盲注
    时间盲注面临着类似的环境,页面没有没有明显的回显,但是SQL命令同样是得到了执行的,我们就可在后台当中加入时间函数,来通过后台的反应时间判断执行的SQL命令是否正确,达到我们的目的。
    这里介绍两个常用的相关函数
    【1】sleep() sleep(N); 通过响应时间判断命令的执行情况
    【2】benckmark() benckmark(N, expression); 通过执行命令的次数来消耗时间达到判断命令执行情况的目的
    第三类:比较特殊的二次注入
    这里暂不做介绍,待我整理一下
  2. SQL注入的bypass(WAF绕过)
    3.1 过滤关键字
    【1】穿插关键字进行绕过 selecselectt
    【2】大小写进行绕过 SeleCt
    【3】16进制进行绕过 selec\x74
    【4】双重URL编码进行绕过 or – %25%36%66%25%37%32
    3.2 绕过对空格的过滤
    【1】注释绕过 # – // /**/ ;%00
    【2】URL编码绕过 ‘ ’ -> %20 -> %2520
    【3】空白字符绕过 0A
    【4】特殊符号的使用 ‘’’ ‘+’
    【5】科学计数法绕过
    3.3 绕过对单引号的过滤
    3.4 绕过对等号的过滤

SQL注入初步实验

这里没有对很复杂的SQL注入问题进行实验,只是测试了比较简单的几个SQLi-labs中的题目。
第一关:

  1. 页面PHP代码
    由于我用的是PHP>7.0,所以提前对代码进行了修改,直接修改之后的代码,这里也只展示PHP的部分
    Kali SQL注入--基于SQLi-Labs_第1张图片

  2. 正常执行SQL
    Kali SQL注入--基于SQLi-Labs_第2张图片

  3. 注入后面加入’发现报错

?id=1'

Kali SQL注入--基于SQLi-Labs_第3张图片
报错证明这里存在SQL注入漏洞,存在回显,根据返回内容尝试在后面添加注释–执行SQL命令

  1. 注入后面加入’–+
?id=1'--+

Kali SQL注入--基于SQLi-Labs_第4张图片
证明漏洞确实存在。

  1. 尝试爆一下数据库
?id=-1' union select 1,2,concat_ws('|',user(),database(),version()) --+

Kali SQL注入--基于SQLi-Labs_第5张图片
get it!

一个结束语

这篇总结实在不能称之为总结,还有太多的地方需要完善,只能勉强算是抛转,希望能引玉,一定要继续学习,继续努力,争取再写出更多更完整的文章,有一天给这篇文章写一篇真正完善的总结。
抱歉,由于能力有限,可能不能令人满意,欢迎指点、批评。

你可能感兴趣的:(SQL注入)