SQL注入原理
SQL注入(SQL Injection)是一种代码注入技术,攻击者通过将恶意的SQL代码插入到应用程序的输入字段中,诱使后台数据库执行这些恶意代码,从而对数据库进行未授权的操作。常见的操作包括获取敏感数据、篡改数据、删除数据,甚至执行数据库管理命令。
攻击流程
- 用户输入恶意数据:攻击者在Web页面的输入字段中输入特制的SQL代码。
- 应用程序构建SQL查询:应用程序将用户输入直接拼接到SQL查询字符串中。
- SQL查询执行:拼接后的SQL查询在数据库中执行,恶意代码也随之执行。
- 攻击效果显现:恶意代码可能会读取、修改、删除数据库中的数据,甚至控制整个数据库服务器
示例
现有数据表
| id | username | phone | join_date | |
|---|---|---|---|---|
| 1 | user1 | user1@example.com | 123-456-7890 | 2021-01-01 | 
| 2 | user2 | user2@example.com | 987-654-3210 | 2021-02-01 | 
| 3 | user3 | user3@example.com | 555-666-7777 | 2021-03-01 | 
| 4 | ||||
| 5 | user5 | user5@example.com | 111-222-3333 | 2021-04-01 | 
后端查询语句
    $name=$_GET['name'];//这里的变量是字符型,需要考虑闭合$query="select id,email from member where username='$name'";用户正常输入内容(user1)
SQL语句为
 $query="select id,email from member where username='user1'";此时数据库会查找username字段为hello的数据,并返回对应的id与emali字段,经过前端处理展现
查询结果为
| id | |
|---|---|
| 1 | user1@example.com | 
如果用户不是好人,输入非正常内容
' OR 1=1 #将用户输入与SQL语句进行拼接后得出
 $query="select id,email from member where username='' OR 1=1 #'";select id,email from member where username='' OR 1=1 #'sql语句解析
用户输入单引号与源代码中单引号形成闭合,拼接逻辑与语句,并在末尾使用#将多余代码进行注释
数据库查询数据时,会将所有可能的匹配项都进行检查而(username='' OR 1=1)条件恒成立,等同于没有任何匹配条件,匹配任何数据结果都为真,返回数据表中所有指定字段(id,emali)的数据
此时查询结果为
| id | |
|---|---|
| 1 | user1@example.com | 
| 2 | user2@example.com | 
| 3 | user3@example.com | 
| 4 | |
| 5 | user5@example.com | 
mysql系统环境变量搭建
1.控制面板->系统
 
                                2.高级->环境变量->系统变量,path->编辑
 
3.新建-浏览-选择(phpstudy-mysql-bin)目录
 4.打开cmd命令行输入mysql -uroot -proot进入sql编辑器
       4.打开cmd命令行输入mysql -uroot -proot进入sql编辑器
 
搭建皮卡丘靶场
将文件进行解压,放在网站根目录
1.修改数据库连接文件

2.访问皮卡丘网站,并点击初始化,根据步骤进行完成


3. 检查数据库
