web安全之sql注入原理
一、sql注入原理
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。(摘自百度)
比如说我们使用常见的get方法传入参数的时候,就可以构造一个简单的sql注入。
构造一个简单的源代码
1 <html lang="en"> 2 <head> 3 <meta charset="UTF-8"> 4 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 5 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 6 <title>Document</title> 7 </head> 8 <body> 9 <table width="960" border="1"> 10 <tr> 11 <th>ID</th> 12 <th>用户名</th> 13 <th>邮箱</th> 14 </tr> 15 <?php 16 $con = new mysqli("localhost","root","","sqlinjection"); 17 $con->query('set names utf-8'); 18 $id = isset($_GET["id"])?$_GET["id"]:1; 19 $sql = "select * from test_01 where id='$id'"; 20 echo $sql; 21 $result = $con->query($sql); 22 $num = mysqli_affected_rows($con);//返回query后受到影响的行数 23 for ($i=0; $i<$num; $i++) { 24 $row = mysqli_fetch_assoc($result); 25 echo "<tr>"; 26 echo "<td>{$row['id']}</td>"; 27 echo "<td>{$row['username']}</td>"; 28 echo "<td>{$row['email']}</td>"; 29 echo "</tr>"; 30 } 31 ?> 32 33 </table> 34 </body> 35 </html>
通过id的值来控制输出的内容,打开网站看一下

如果在上图中在1后面,添加一个分号,页面就不会正常显示

接着再在id后面填上一些内容,如下图所示

在页面中出现了select 后面的1,2,4,如果再修改下

原来第二行的2,变为了该数据库的名字。攻击者通过构造不同的语句,从而得到例如用户信息、管理员的信息等重要数据。
以上,只是一个简单的小例子,往后面会更深入的分析。
二、常见的sql注入类型
参考链接:https://www.cnblogs.com/cui0x01/p/6322826.html
1.按照注入点类型分类
(1) 数字型注入点
(2) 字符型注入点
(3) 搜索型注入点
2. 按照数据提交的方式分类
(1) GET注入
(2) POST注入
(3) Cookie注入
(4) HTTP头部注入
3. 按照执行效果来分类
(1) 基于布尔的盲注
(2) 基于时间的盲注
(3) 基于报错注入
(4) 联合查询注入
(5) 堆查询注入
4 二阶注入

浙公网安备 33010602011771号