黑帽SEO技能:详谈SQL注入原理和办法教程

admin4年前88986

什么是SQL注入?

还记得小学语文考试上的填空题吗? 标题的意图显着是经过填空来了解答题者的姓名和喜好。

比方:我是_______________,喜爱__________________

假如有同学填成下面这样?

我是我国搜索引擎优化优化网,我能够共享最新黑帽SEO优化排名技能教程,喜爱研讨百度等搜索引擎排序算法

这便是一个注入的比方,当命题者认为他现已定下了句子的主体结构,需求填空的内容是不会影响主体结构的,而填空者却经过填写的内容,修改了整句话的结构,这便是注入。

经过精心结构的URL参数,或许表单提交的参数,拼接到预先界说好的SQL格局时,意外地改变了程序员预期的SQL结构时,SQL注入就构成了。履行该SQL句子已超出的程序员的意图。比方,没用用户名或暗码能够登陆成功,或将数据库内容悉数dump下来,等等。

黑帽SEO技能:详谈SQL注入原理和办法教程

第一步、咱们先装置测验环境。装置Apache、PHP、MySQL 这儿用的LINUX环境

在Ubuntu下安全LAMP十分简略,只需求一个指令就能够了:

sudo apt-get install apache2 mysql-server mysql-client php5 php5-gd php5-mysql

假如你有Web动态言语开发经历,php是个很简略上手的言语。当然咱们选用LAMP的意图不是Web自身,是运用它来写一个demo的数据库运用,测验SQL注入。

在装置MySQL进程中会要求设置root用户的暗码,设置成root(后边链接数据库时需求)。

装置完成后,web 项目根目录默许在/var/www/, 为了简略起来,对LAMP不做任何装备。翻开浏览器,输入 http://localhost/ 测验装置是否成功。下是测验成功的比方。

黑帽SEO技能:详谈SQL注入原理和办法教程

测验一下php是否作业正常,创立一个test.php文件 sudo vim /var/www/test.php  输入下面的代码:

 <?php

      phpinfo()

 ?>

 

 

在浏览器翻开 http://localhost/test.php,输出成果如下: 

黑帽SEO技能:详谈SQL注入原理和办法教程

PHP测验环境建立成功了。

 

第二步、编写简略的数据库运用   

运用mysql客户端衔接MySQL数据,指令如下:#mysql -h localhost -u root -p 

Enter password: <这儿输入暗码:root>

输入用户root的暗码root成功登录之后的进程: 

黑帽SEO技能:详谈SQL注入原理和办法教程

 

创立数据库test

首先要创立一个数据库,这儿将数据姓名称为test,在mysql客户端输入如下指令:

mysql>create database test;

进入test数据库

mysql> use test;

创立表userinfo

有了数据库,还得有表,才干装下真实的数据。简略起见,表只要两个字段name和passwd,别离保存用户名和暗码,其间name为主键。MySQL下的创立句子:

create table userinfo (name char(20) not null primary key, passwd char(20) not null);

刺进用户数据

为了测验,需求往表里边刺进数据。运用mysql句子往userinfo表刺进两个用户信息,别离是linyt和ivan,暗码和用户名内空相同。

MySQL句子如下:

insert into userinfo values('linyt', 'linyt'); 

insert into userinfo values('ivan','ivan');

测验一下数据表内容

在MySQL客户端输入:select * from userinfo;指令能够看到userinfo表中一切记载。

黑帽SEO技能:详谈SQL注入原理和办法教程

下面运用php脚本言语编写个简略的登录体系。代码如下: 

黑帽SEO技能:详谈SQL注入原理和办法教程

黑帽SEO技能:详谈SQL注入原理和办法教程

原理十分简略,经过username 和 passwd 两个文本框承受用户输入的用户名和暗码,然链接数据库,

运用select * from userinfo where name='<输入的用户名>' AND passwd='<用户输入的暗码>'SQL句子从数据库中查询出用户记载,假如有该用名,则以表格方法来显现用户信息。

关于没人做过web开发的朋友能够会问,这儿为什么需求单引号',那是由于name字段的类型是字符串,字符串值需求运用单引号'括起来。而数值类型是不需的单引号'的。  

三、SQL注入试验

在注入试验之前,咱们先展现正常登录作用:

黑帽SEO技能:详谈SQL注入原理和办法教程

 

 

      为了便利后边验证展现,每次都会在网页上输出查询的SQL句子内容。

先来调查一下发生了什么事情:

别离输入用户名linyt和暗码linyt,然后点login

后边php服务中获取用户的输入,并保存在$name和$passwd两个变量

运用$name和$passwd两变量来拼接生成SQL句子,并进行数据库查询

将从数据库是查询出数据在网页上输出

本例中输入用户名linyt和暗码linyt状况,SQL句子的拼接进程如下: 

黑帽SEO技能:详谈SQL注入原理和办法教程

假如不知道用户名和暗码的状况下,怎样能够登陆成功呢? 

假如不知道用户名暗码,那么name = ‘$name’ 随意替换成一个用户名如abc,变成name = ‘abc’,这个条件必定不能为true,为了使得WHERE句子的条件为ture,就得更改它的句子结构。

即然name = ‘abc’ 必定为false,那么咱们在后边添加一个or,再附件一个恒真句子,那整个句子就为ture了。,比方'1' = '1',1=1, '' = '',在不同的上下文挑选合适的就能够了。

留心一下SQL拼接句子中name = ‘$name’,这儿是有两个'号的。为了终究注入成果为:

select * from userinfo WHERE name = '<这儿写什么都不重要>' or '1'='1' AND passwd = '<这儿写什么都不重要>' or '1'='1'  

那name和passwd应该填什么呢?请看图: 黑帽SEO技能:详谈SQL注入原理和办法教程

四、SQL注入测验成果: 

黑帽SEO技能:详谈SQL注入原理和办法教程

 

请注意浏览器地址栏的内容:

http://localhost/uerinfo.php?name='+or+'1'%3D'1&passwd='+or+'1'%3D'1

浏览器在址址显现时运用了URL编码,与用户输入username和passwd内容看起来不完全相同,实践是相同的。运用+来代表空格,%3D来替代=

经过注入,网页显现了userinfo表中的一切记载。 我们能够再看一下网页上的SQL句子输出:

sql = SELECT * FROM userinfo WHERE name = '' or '1'='1' AND passwd = '' or '1'='1'

假如你对SQL很内行,那可做更杂乱的注入,能够将数据库里边许多东西给偷出来。 好了,以上便是关于SQL注入的原理和根本操作方法,后边会为我们解说下关于怎么使用SQL注入进行爆库!请持续重视! 更多黑帽SEO技能请重视我国搜索引擎优化优化网(www.youhua.net.cn),一个专心黑帽SEO技能研讨与共享的网站! 本文由我国搜索引擎优化优化网聚合收拾,转载请注明来历,谢谢!

本文链接:https://www.youhua.net.cn/jishu/33.html

网友评论