SQLServer数据库注入实验文档格式.docx
- 文档编号:22019576
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:15
- 大小:600.69KB
SQLServer数据库注入实验文档格式.docx
《SQLServer数据库注入实验文档格式.docx》由会员分享,可在线阅读,更多相关《SQLServer数据库注入实验文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
当一个攻击者能够通过往查询中插入一系列的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、认真阅读和掌握本实验相关的知识点。
2、上机实现软件的基本操作。
3、得到实验结果,并加以分析生成实验报告。
注:
因为实验所选取的软件版本不同,学生要有举一反三的能力,通过对该软件的使用能掌握运行其他版本或类似软件的方法。
实验步骤
1、找到有注入漏洞的目标网站
本实验预先配置好一个目标网站http:
//127.0.0.1:
8080/aiyaya/default.asp(凹丫丫新闻系统),访问该网站,并运行注入工具啊D注入工具V2.31,在该工具的文件夹中同样有一个mdb的数据库,里面存放了预先设定好的表名、字段名、字段内容等字典。
点击左边菜单中的“扫描注入点”,在检测网址处输入目标网站地址,点击
,运行网站,并自动检测注册点。
如图3-37注入漏洞检测、图3-38注入漏洞检测结果:
图3-37注入漏洞检测
图3-38注入漏洞检测结果
说明:
在实际攻击中,若受网速等原因影响,目标网站打开速度过慢,可以选择
打开网页,表示,停止打开网页,并检测注入点。
由上图图3-38注入漏洞检测结果的结果可以看出,红色标记位置给出了两个可注入点。
与access数据库注入相同,可以点击任一链接,自动进入SQL注入检测(具体过程实验2有介绍,此处不再做详细介绍)
2、SQL注入检测
点击“检测”开始进行SQL注入检测,检测结果如图3-39注入漏洞信息:
图3-39注入漏洞信息
从检测结果可以看出,“检测表段”的按钮变为可用,表示有注入的可能,在数据库的类型中,判断为MSSQL数据库显错模式,即网页会显示错误信息,有经验的攻击者可以根据故意制造错误的SQL语句,通过错误信息,得到更多的信息。
如图3-40检测漏洞出错界面:
图3-40检测漏洞出错界面
此外,结果还显示了数据库名称,当前使用的用户权限以及用户名等信息,这些信息都为进一步攻击提供了有力的帮助。
3、猜测表段名
点击“检测表段”,将自动检测可能得表段名。
结果如图3-41检测表名:
图3-41检测表名
4、猜测字段名:
攻击者根据从表段名中检测出来的表段,根据自己的需要选择需要猜测的表,并开始检测字段。
本例中,目的是为获取管理员权限,因此选择admin表来猜测字段。
猜测字段名,同样点击“检测字段”,如图3-42检测字段名:
图3-42检测字段名
在“检测表段”和“检测字段”下有一个“MSSQL专用表段检测”“MSSQL专用字段检测”的按钮,该按钮是针对无显错模式下,读取全部表段和字段的过程。
5、猜测字段内容
与access数据库使用的工具不同,该工具可以同时对多个字段的内容进行猜测,用户可以选中需要猜测的字段名多选框,点击“检测内容”,进行内容的猜测。
如图3-43选择字段猜测字段内容:
图3-43选择字段猜测字段内容
此时,检测结果中会显示,猜测到得指定字段名中的所有内容。
需要注意的是,从密码的内容可以看出,该用户密码并没有以明文存储,因为所猜测出来的密码是直接读取数据库中的信息。
有经验的攻击者可以根据密码的组成,猜测大致的加密方法,从本例中看,该密码有可能采用MD5加密方法进行加密。
可以点击需要破解的密码,点击右键,选中“复制内容”,将密码复制下来,如图3-44解密字段内容:
图3-44解密字段内容
在网上找到MD5在线解密的网站,尝试是否能破解,经过MD5解密,得到密码原文为:
oyaya。
6、以管理员身份登陆
由于该网站管理员入口在首页中有链接,因此不用猜测管理员入口,点击进入管理员入口,输入得到的用户名、密码,以管理员身份登陆。
如图3-45后台界面、图3-46成功登录:
图3-45后台界面
图3-46成功登录
若找不到管理员入口,可以使用前面讲到的“管理员入口探测”菜单进行探测,操作方法与实验二相同。
7、目录查看
在注入检测完毕以后,该软件的目录查看功能,还能帮助攻击者查看web服务器上的文件目录,点击“相关工具”中的“目录查看”,选择需要检测的位置(c、d、e等盘),点击“进行检测”进行文件目录的搜索。
如图3-47web服务器目录查询:
图3-47web服务器目录查询
标记的表示为文件夹,还可以通过双击,进入文件夹的内容。
如图3-48查看文件夹中的文件:
图3-48查看文件夹中的文件
8、CMD/上传
点击“CMD/上传”按钮,在命令内容中输入CMD命令,可以执行命令,在下端的文件上传处,可以上传木马。
注意:
CMD命令的执行必须是获取sa权限
9、注册表读取
该功能可以读取注册表的键值来确定物理目录等信息,由于所采用的版本为试用版,部分功能不能完全体现,因为该版本中,只能读取web目录在注册表中的位置(其他版本可以修改、增加注册表的项)。
如图3-49注册表修改:
图3-49注册表修改
10、字典维护
因为注入工具进行猜测的依据都来自于字典(表段字典、字段字典等),因此有的注入工具还提供字典的维护,用户可根据经验的增加往字典中加入新的表段或字段。
点击“设置选项”菜单,在显示的列表中可以通过勾画或者取消勾画的方式来选择进行猜测的入口地址、表段名、字段名的字典。
也可以通过每列下面的“添加”、“删除”按钮来对字典中的备猜测项进行添加或删除。
如图3-50字典维护、图3-51字典表的维护:
图3-50字典维护
图3-51字典表的维护
实验总结
SQL注入的工具远不止我们介绍的这几种,注入后的目的也不尽相同,希望通过对注入工具的学习对注入的过程和用到的SQL语句有了一定的认识和了解,多数攻击都是利用注入漏洞结合其他技术(木马、病毒等技术)来实现最后的控制服务器的目的。
只有了解了注入的原理和过程,才能更好地对该类攻击技术进行防范
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQLServer 数据库 注入 实验