sql
1.在小皮搭建网站
搭建到phpstudy的根目录上
2.写数据库的密码
由于小皮的数据库密码改成了123456
所以这个文件也得改成123456
3.创建数据库
4.正式开始
mysql数据库:数据库(Database) 是表的容器,表(Table) 是数据的载体,字段(Column) 是表的属性(如用户名、密码),行(Row) 是单条完整数据记录,四者是“容器-载体-属性-记录”的递进关系
sql语句练习
1.判断是字符型还是数字型注入
若页面正常没报错说明是字符型注入
因为and需要前后两个条件同时为真才执行,若把1=2按数字处理是会报错的
或者id=2-1
观察id=2-1和id=1的响应是否相同
2.查看数据库有几列(注意id=1后面的分号和最后面的--+)
发现group by 1,2,3都行
但是4不行 说明这个security数据库有三列
order by 也行
3.判断闭合方式
输入id=1’
右上角响应是"1"
说明闭合方式是’
4.union联合查询以及判断可显位
若输入id=1,页面并无变换,无法判断可显位
那么就如上图一样,输入id=-1或id=0即可
可知第二行第三行为可显位
5.
database() 可知数据库的数据名
user() 当前数据库用户
version mysql版本
6.
id=0' :让原查询 WHERE id='0' 返回空结果,使 UNION 后的查询结果能显示。
-单引号 ' :闭合Less-1中字符型的参数引号,打破原SQL语法结构
group_concat(table_name) :核心函数,将 information_schema.tables 中查询到的所有 table_name (表名)拼接成一行字符串,用逗号分隔开(emails,referers,uagents,users )
from information_schema.tables where table_schema='security'
从MySQL的系统库 information_schema 的 TABLES 表中查询,筛选出属于 security 数据库的表名。
SQL注入漏洞基础认知
1. 漏洞产生原理
SQL注入的本质是程序未对用户输入参数进行有效过滤或转义,导致用户输入的恶意SQL语句被拼接至后台原始SQL中,最终被数据库执行,打破正常数据访问逻辑。
案例(登录接口):
后台原始SQL: SELECT * FROM users WHERE username='$name' AND password='$pwd';
用户恶意输入:用户名填 ' OR 1=1 -- ,密码任意
拼接后SQL: SELECT * FROM users WHERE username='' OR 1=1 -- ' AND password='$pwd';
逻辑解析: OR 1=1 使条件恒成立, -- 注释后续语句,直接绕过登录验证。
2 常见分类(按三类核心维度划分)
按注入点类型:字符型注入(需闭合引号)、数字型注入(无需闭合符号)、搜索型注入(常见于搜索框,需处理通配符)。
按数据交互方式:GET注入(参数拼接在URL中)、POST注入(参数藏在请求体中)、Cookie注入(参数存储在Cookie中)。
按执行结果反馈:基于报错注入(利用数据库报错信息提取数据)、联合查询注入(通过UNION拼接查询获取数据)、盲注(无直接结果反馈,需通过逻辑判断/时间延迟推断数据)