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 二阶注入

 

posted @ 2018-12-21 15:06  justn0w  阅读(878)  评论(0)    收藏  举报