- 作者|代码审计团队
- 来源|翼安研习社
- 发布时间|2021-04-08
0. 前言:小故事
- 某个公司有一个员工管理系统,里面存储员工的许多信息,每个员工只要输入自己的工号就可查询自己相关信息。张三是这个公司的一个开发人员,他突发好奇的想输入李四的工号10001是否可以成功查询,结果他失败了,因为系统有工号和身份的互相校验;于是他在工号后面加上了一个
' OR 'a'='a
,没想到成功返回了数据,他成功获取到了他人的许多敏感信息。
点击链接:先来看个小视频,简单粗暴地认识一下SQL注入👇
【传送门】
(😘欢迎关注我们的同名抖音账号@翼安研习社)
1. 什么是SQL注入
由于程序员在开发数据库交互程序过程中,没有对用户输入数据进行校验、转义、限制或者处理不当,导致攻击者可以通过输入恶意字符串去非法获取数据库中的数据。
2. SQL注入危害
-
盗取网站的敏感信息
-
绕过验证,直接登入网站后台
-
进行权限提升等操作
3. SQL注入条件
-
执行数据库交互的数据可以从外部输入或者外部可控
-
这些数据并没进行严格的校验、转义、限制等处理
-
使用了不能确保安全的数据库操作方法
示例 🌰
String userName = obj.getName();
String num= request.getParameter("number");
String query = "SELECT * FROM student WHERE name= '"
+ userName + "' AND number= '"
+ num + "'";
ResultSet rs = stmt.execute(query);
分析🌰
当num的值为 1001' OR 'a'='a,此时的sql语句为:
SELECT * FROM student WHERE name= 'zhangsan' AND num = '1001' OR 'a'='a';
相当于执行以下语句:
SELECT * FROM student
4. 防御方式
图1