何谓为SQL注入?基础:云服务器上传OA

時間:2023-12-28 11:51:49 作者:云服务器上传OA 熱度:云服务器上传OA
云服务器上传OA描述::

什么是SQL注入?

还记得小学语文测验上的填空题吗?标题的意图显著是通过填空来了谜底题者的名字和爱好。

比如:我是_______________,喜欢__________________

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

我是超级蜘蛛池,我可以引蜘蛛快速提高收录,喜欢_______________________

这就是一个注入的范例,当出题者认为他已经定下了句子的主体组织,需要填空的内容是不会阴碍主体组织的,而填空者却通过填写的内容,改动了整句话的组织,这就是注入。

通过精心组成的URL参数,或者表单提交的参数,拼接到预先定义好的SQL形式时,意外地变更了程序员预期的SQL组织时,SQL注入就构成了。执行该SQL语句已超出的程序员的意图。比如,没用用户名或密码可以登陆胜利,或将数据库内容全体dump下来,等等。

第一步、我们先安装测试环境。安装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(后面链接数据库时需要)。

安装完成后,eb 项目根目录默认在var, 为了简朴起来,对LAMP不做任何配置。打开阅读器,输入 localhost 测试安装是否胜利。下是测试胜利的范例。

测试一下php是否任务正常,创造一个testphp文件sudo vim vartestphp输入下面的代码:

  1. ?php

  2. phpinfo()

  3. ?

    1. 在阅读器打开 localhosttestphp,输出结局如下:

      PHP测试环境搭建胜利了。

      第二步、编写简朴的数据库利用

      采用mysql客户端连接MySQL数据,号召如下:#mysql -h localhost -u root -p

      Enter passord 这里输入密码:root

      输入用户root的密码root胜利登录之后的过程:

      创造数据库test

      首先要创造一个数据库,这里将数据名字称为test,在mysql客户端输入如下号召:

      mysqlcreate database test;

      进入test数据库

      mysql use test;

      创造表userinfo

      有了数据库,还得有表,才能装下真正的数据。简朴起见,表只有两个字段name和passd,差别保留用户名和密码,其中name为主键。MySQL下的创造语句:

      create table userinfo (name char(20) not null primary key, passd 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表中所有纪实。

      下面采用php脚本语言编写个简朴的登录系统。代码如下:

      原理非常简朴,通过username 和 passd 两个文本框承受用户输入的用户名和密码,然链接数据库,

      采用select * from userinfo here name=输入的用户名 AND passd=用户输入的密码SQL语句从数据库中查询出用户纪实,假如有该用名,则以表格方式来显示用户信息。

      对于没人做过eb开发的朋友可以会问,这里为什么需要单引号,那是由于name字段的类型是字符串,字符串值需要采用单引号括起来。而数值类型是不需的单引号的。

      三、SQL注入试验

      在注入试验之前,我们先呈现正常登录功效:

      为了便捷后面验证呈现,每次都会在网页上输出查询的SQL语句内容。

      先来观测一下产生了什么事情:

      1. 差别输入用户名linyt和密码linyt,然后点login

      2. 后面php服务中获取用户的输入,并保留在$name和$passd两个变量

      3. 采用$name和$passd两变量来拼接生成SQL语句,并进行数据库查询

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

        1. 本例中输入用户名linyt和密码linyt场合,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 passd = 这里写什么都不重要 or 1=1

          那name和passd应该填什么呢?请看图:

          四、SQL注入测试结局:

          请留心阅读器地址栏的内容:

          localhostuerinfophp?name=+or+13D1passd=+or+13D1

          阅读器在址址显示时采用了URL编码,与用户输入username和passd内容看起来不彻底一样,实际是一样的。采用+来典型空格,3D来取代=

          通过注入,网页显示了userinfo表中的所有纪实。 大家可以再看一下网页上的SQL语句输出:

          sql = SELECT * FROM userinfo WHERE name = or 1=1 AND passd = or 1=1

          假如你对SQL很在行,那可做更复杂的注入,可以将数据库里面许多东西给偷出来。

站長聲明:以上關於【何谓为SQL注入?基础-云服务器上传OA】的內容是由各互聯網用戶貢獻並自行上傳的,我們新聞網站並不擁有所有權的故也不會承擔相關法律責任。如您發現具有涉嫌版權及其它版權的內容,歡迎發送至:1@qq.com 進行相關的舉報,本站人員會在2~3個工作日內親自聯繫您,一經查實我們將立刻刪除相關的涉嫌侵權內容。