前言
不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动。在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问,我们真的了解SQL注入吗?看完本篇文章希望能让你更加深刻的认识SQL注入。
目录
第一节 注入攻击原理及自己编写注入点
- 1.1、什么是SQL?
- 1.2、什么是SQL注入?
- 1.3、SQL注入是怎么样产生的?
- 1.4、编写注入点
第二节 寻找及确认SQL注入
- 2.1、推理测试法
- 2.2、and大法和or大法
- 2.3、加法和减法
正文
- 第一节 注入攻击原理及自己编写注入点
1.1、什么是SQL?
SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。SQL 语句用于取回和更新数据库中的数据。SQL 可与数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。
1.2、什么是SQL注入?
看起来很复杂,其实很简单就能解释,SQL注入就是一种通过操作输入来修改后台SQL语句达到代码执行进行攻击目的的技术。
1.3、SQL注入是怎么样产生的?
构造动态字符串是一种编程技术,它允许开发人员在运行过程中动态构造SQL语句。开发人员可以使用动态SQL来创建通用、灵活的应用。动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的SQL语句。当开发人员在运行过程中需要根据不同的查询标准来决定提取什么字段(如SELECT语句),或者根据不同的条件来选择不同的查询表时,动态构造SQL语句会非常有用。
在PHP中动态构造SQL语句字符串:
1
|
$query = "SELECT * FROM users WHERE username = " . $_GET [ "ichunqiu" ];
|
看上面代码我们可以控制输入参数ichunqiu,修改所要执行SQL语句,达到攻击的目的。
1.4、编写注入点
为了照顾一下新人,这里先介绍一下涉及到的基础知识:
1
2
3
|
SQL SELECT 语法
SELECT 列名称 FROM 表名称
符号 * 取代列的名称是选取所有列 |
1
2
3
4
|
WHERE 子句
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
语法 SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
|
下面的运算符可在 WHERE 子句中使用:
<ignore_js_op>
了解了以上基础知识就让我们来自己编写注入点把。
第一步:我们使用if语句来先判断一下变量是否初始化
1
2
3
4
5
|
<?php if (isset( $_GET [ "ichunqiu" ])){
} ?> |
第二步:在if语句里面,我们连接数据库。在PHP中,这个任务通过 mysql_connect() 函数完成。
1
2
3
4
|
mysql_connect(servername,username,password); servername 可选。规定要连接的服务器。默认是 "localhost:3306" 。
username 可选。规定登录所使用的用户名。默认值是拥有服务器进程的用户的名称。 password 可选。规定登录所用的密码。默认是 "" 。
|
第三步:连接成功后,我们需要选择一个数据库..................................................................
...................................................................................................................................
..................................点击链接阅读全文:http://bbs.ichunqiu.com/thread-9518-1-1.html