PHP手动注入实验Word文档格式.docx

上传人:b****3 文档编号:13569987 上传时间:2022-10-11 格式:DOCX 页数:10 大小:598.61KB
下载 相关 举报
PHP手动注入实验Word文档格式.docx_第1页
第1页 / 共10页
PHP手动注入实验Word文档格式.docx_第2页
第2页 / 共10页
PHP手动注入实验Word文档格式.docx_第3页
第3页 / 共10页
PHP手动注入实验Word文档格式.docx_第4页
第4页 / 共10页
PHP手动注入实验Word文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

PHP手动注入实验Word文档格式.docx

《PHP手动注入实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《PHP手动注入实验Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

PHP手动注入实验Word文档格式.docx

SQL注入是从正常的WWW端口通过对页面请求访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙很少会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。

一般来说注入攻击常采用的步骤有发现SQL注入位置、判断后台数据库类型、获取管理员权限,此外在得到网站管理员权限后还可以通过发现虚拟目录、上传木马等手段获取服务器的系统权限。

1.2注入原理概述

SQL是一种用于关系数据库的结构化查询语言。

它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92。

SQL语言可以修改数据库结构和操作数据库内容。

当一个攻击者能够通过往查询中插入一系列的SQL操作数据写入到应用程序中去,并对数据库实施了查询,这时就已经构成了SQL-Injection。

目前使用的各种数据库如access、SQLServer、mySQL、Oracle等都支持SQL语言作为查询语言,因此,若程序员在编写代码的时候没有对用户输入数据的合法性进行判断,有可能导致应用程序的安全隐患,攻击者根据返回的结果,获得某些想得知的数据。

1.3Access数据库的注入原理

Access数据库的注入就是提交SQL语句,然后根据返回信息来判断是否正确,从而获得数据库中有价值的内容,其主要是通过猜解得过程来实现注入。

第一步确定注入点:

通常用“and1=1”或者“and1=2”等来确认(注意:

and两边各有一处空格)。

若第一个语句后页面正常显示,第二个语句执行后出现错误信息,整个SQL查询语句变为了SQL=”select*from表名whereid=”xxand1=2或SQL=”select*from表名whereid=”xxand1=1的永真、永假条件,那说明该网站存在SQL注入。

第二步猜解表名

一般程序员在创建数据库时会根据意义来命名,所以需要找到管理员信息时可以尝试检测是否存在admin表,admin这个表名可以替换成其它的表名(如user、manage等表)进行猜解如果存在该表名返回页面结果为正常页面,如果不存在则返回为出错信息。

常用的SQL语句为

and0<

>

(selectcount(*)fromadmin)

第三步猜解某表名中存在的字段

知道表段名后,再查看表中是否有常用字段,一般感兴趣的都是类似用户名、密码的字段,进行猜解后如果返回正常内容,表示存在某个字段,否则为出错信息。

常用的SQL语句为:

1=(selectcount(*)from表名wherelen(pass)>

0)(判断是否有pass字段),猜测字段时有可能需要重复以上步骤数次才能找到合适的字段名。

第四步猜测字段内容

这是比较复杂的一步,猜测字段内容也可以使用SQL构造语句,例如常用到得SQL语句:

and(selecttop1asc(mid(usernameN1))fromAdmin)>

0。

猜解第N位的ASCII码>

0取值从负数到正数都有可能,当然常见的密码都是数字加字母的组和,它们的ASCII值在0-128之间,将值替换为这之间的值,如果正确,则返回正常页面,如果不是则返回出错,将N分别替换为1、2、3、4……反复猜解即可得出字段每一个位数的值而得到密码,参数N为字段的位数,如果是(mid(username11)),则查找username字段中的第一位,依此类推。

整个语句的最右边“>

0”,数字0表示的是ASCII码,并不是真正的字段位数相应的字符。

SQL注入一般分为手工注入和工具注入两种,手工注入需要攻击者自行构造SQL语句实现注入,工具注入对于初学者来说要简单得多,例如:

网络上流行的阿D,明小子等注入工具都是依据相同原理而设计的。

第五步:

管理员身份登陆

以管理员用户身份登陆:

一般来说查找管理员入口是手动注入的一个难点,有的网站上在页面首先会显示管理员入口的链接,此时只需要在管理员页面输入猜测得到的管理员用户名和密码,即可登陆。

但若管理员入口不明,则需要通过尝试的方法获取,这种尝试是一种经验的尝试。

例如admin页面,adminlogin页面、admin/admin页面等。

1.4SQLServer注入原理

SQLServer数据库的注入与access数据库注入有相似之处,只是其攻击的方式更为多种多样。

首先可以通过服务器IIS的错误提示来鉴别数据库类型,在地址栏最后输入“‘”,如果是access数据库那么会返回MicrosoftJETDatabaseEngine错误’80040e14’;

若是SQLServer数据库,返回MicrosoftOLEDBProviderforOBDCDrivers错误’80040e14’。

同样,如果IIS错误信息提示被关闭,可以通过猜测是否存在系统表,例如sysobjects表等来判断数据库类型。

此外,由于SQLServer数据库存在帐户权限,所以如果发现有sa权限的注入点,今年改过尝试,可通过上传或写入配置文件等方法获得webshell得到服务器的控制权限,从而拿到服务器的系统权限。

1.5PHP注入原理

php注入与asp注入还是有区别的,我们要进行的是跨表查询要用到UNION.UNION是连接两条SQL语句,UNION后面查选的字段数量、字段类型都应该与前面SELECT一样.通俗点说如果查寻对的话就出现正常的页面.在SQL语句中,可以使用各种MySQL内置的函数,经常使用的就是DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()这些函数来获取一些系统的信息,例如:

load_file(),该函数的作用是读入文件,并将文件内容作为一个字符串返回。

如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。

php注入就是利用变量过滤不足造成的看看下面两句SQL语句:

①SELECT*FROMarticleWHEREarticleid='

$id'

②SELECT*FROMarticleWHEREarticleid=$id

两种写法在各种程序中都很普遍,但安全性是不同的,第一句由于把变量$id放在一对单引号中,这样使得我们所提交的变量都变成了字符串,即使包含了正确的SQL语句,也不会正常执行,而第二句不同,由于没有把变量放进单引号中,那我们所提交的一切,只要包含空格,那空格后的变量都会作为SQL语句执行,我们针对两个句子分别提交两个成功注入的畸形语句,来看看不同之处。

①指定变量$id为:

1'

and1=2unionselect*fromuserwhereuserid=1/*

此时整个SQL语句变为:

SELECT*FROMarticleWHEREarticleid='

and1=2unionselect*fromuserwhereuserid=1/*'

②指定变量$id为:

1and1=2unionselect*fromuserwhereuserid=1

SELECT*FROMarticleWHEREarticleid=1and1=2unionselect*fromuserwhereuserid=1

  看出来了吗?

由于第一句有单引号,我们必须先闭合前面的单引号,这样才能使后面的语句作为SQL执行,并要注释掉后面原SQL语句中的后面的单引号,这样才可以成功注入,如果php.ini中magic_quotes_gpc设置为on或者变量前使用了addslashes()函数,我们的攻击就会化为乌有,但第二句没有用引号包含变量,那我们也不用考虑去闭合、注释,直接提交就OK了。

通常PHP注入的步骤如下:

1)先查看是否存在漏洞

2)判断版本号以决定是否可以用union连接,andord(mid(version(),1,1))>

51/*

3)利用orderby暴字段,在网址后加orderby10/*如果返回正常说明字段大于10

4)再利用union来查询准确字段,如:

and1=2unionselect1,2,3,......./*直到返回正常,说明猜到准确字段数。

如过滤了空格可以用/**/代替。

5)判断数据库连接帐号有没有写权限,and(selectcount(*)frommysql.user)>

0/*如果结果返回错误,那我们只能猜解管理员帐号和密码了。

6)如果返回正常,则可以通过and1=2unionselect1,2,3,4,5,6,load_file(char(文件路径的ascii值,用逗号隔开)),8,9,10/*注:

load_file(char(文件路径的ascii值,用逗号隔开))也可以用十六进制,通过这种方式读取配置文件,找到数据库连接等。

7)首先猜解user表,如:

and1=2unionselect1,2,3,4,5,6....fromuser/*如果返回正常,说明存在这个表。

8)知道了表就猜解字段,and1=2unionselect1,username,3,4,5,6....fromuser/*如果在2字段显示出字段内容则存在些字段。

9).同理再猜解password字段,猜解成功再找后台登录。

10)登录后台,上传shell

2、防御技术

从前面讲述的原理可以看出,在数据没有经过服务器处理之前就进行严格的检查,才是最根本防御SQL注入的方法。

对提交数据进行合法性检查得方法来过滤掉SQL注入的一些特征字符,也可以通过替换或删除敏感字符/字符串、封装客户端提交信息、屏蔽出错信息等方法来修补漏洞、防止SQL注入。

例如:

admin1=replace(trim(request(“admin”)),”’”,””)

password1=replace(trim(request(“password”)),”’”,””)

这两句语句就过滤掉SQL语句提交时的’号。

此外,也可以通过给用户密码加密的方法,增加破解的难度,例如使用MD5加密,这样即使获取了密码也是加密后的密码,无法获取原始密码。

实验要求

●认真阅读和掌握本实验相关的知识点。

●得到实验结果,并加以分析生成实验报告。

∙注:

因为实验所选取的软件版本不同,学生要有举一反三的能力,通过对该软件的使用能掌握运行其他版本或类似软件的方法。

实验步骤

1、首先,启动“开始”菜单中的wampserver。

如图3-25启动wampserver

图3-25启动wampserver

2.修改WAMP的端口:

打开“托盘”中的WAMP5.1.7.4中的configfile里的httpd.conf文件,将下图中涂黑区域按下图所示进行修改。

如图3-26修改端口1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1