SQL注⼊实验报告实验项⽬综合性实验
SQL注⼊2020年9⽉25⽇
⼀、实验综述
1.实验⽬的及要求
创建VMWARE虚拟机 的Windows环境,
在虚拟机中安装phpstudy,并搭建DVWA环境,通过学习web⼯作原理与SQL注⼊⼯作原理,能够实现简单的SQL注⼊验证。
2.实验仪器、设备或软件
VmwareDVWAphpStudy
3.实验原理
(1)Web⼯作原理:
Web服务器的本质就是 接收数据 ⇒ HTTP解析 ⇒ 逻辑处理 ⇒ HTTP封包 ⇒ 发送数据。Web服务器的⼯作流程:
1)⽤户做出⼀个操作,可以是填写⽹址敲回车,可以是点链接,接着通过浏览器获取事件。2)浏览器通过TCP三次握⼿与服务器程序连接
3)浏览器将⽤户事件按照HTTP格式打包成⼀个数据包,其实质就是在待发送缓冲区中的⼀段有着HTTP协议格式的字节流。4)浏览器确认对端可写,并将该数据包推⼊internet,该包经过⽹络最终递交到服务器程序。5)服务端拿到该数据包后,同样以HTTP协议格式解包,解析客户端的意图。6)得知客户端意图后,进⾏分类处理,或者提供某种⽂件、或者处理数据。7)返回结果,将结果装⼊缓冲区,或是HTML⽂件、或是⼀张图⽚等。8)按照HTTP协议格式将返回结果的数据包进⾏打包处理。
9)服务器确认对端可写,并将该数据包推⼊Internet,该包经过⽹络最终递交到客户端。10)浏览器拿到包后,以HTTP协议格式解包,然后解析数据,如:是HTML⽂件11)浏览器将HTML⽂件展⽰在页⾯上。Web服务器的⼯作流程(GET请求)
Web服务器最主要的功能就是提供静态⽂件。⽇常的上⽹浏览⼤多为⽹页浏览。在GET请求下的⽂本服务器⼯作原理如下:主要步骤基本不变,只有第1)步、第6)步和第7)步有些不同。
第1)步:当⽤户点击⼀个⽹页链接或浏览器加载⼀些资源(css,jpg …)时产⽣。
第6)步:服务程序解包后,确定其为GET请求,并且是对该服务器上的某⼀资源的请求。⾸先服务程序会去确认该路径是否存在,再确定该路径的⽂件是否可以获取。第7)步:
7-1) 如果请求的路径有误,或者该资源不能被⽤户获取,则返回错误提⽰页⾯。很多服务器的错误页⾯只有404,更专业的应该是将错误分类并返回对应的错误代码页⾯。
7-2) 如果该路径合法且⽂件可以被获取,那么服务程序将根据该⽂件类型进⾏不同的装载过程,记录其类型作为(8)中HTTP协议中对应的返回类型,并加⼊响应头。(2)SQL注⼊原理:SQL注⼊的原因:
语⾔分类:编程语⾔⼤致可以分为两类,⼀类是解释性语⾔,⼀类是编译型语⾔;解释性语⾔是⼀种在运⾏时开始解释的源代码,将代码解释为机器可以识别的指令,机器对识别的指令进⾏执⾏,是⼀种边运⾏边执⾏的程序语⾔;⽽编译语⾔是⼀种⽣成代码时直接将其转化成机器指令,可以由计算机直接运⾏的程序语⾔。⼆者的主要区别:前者是边执⾏边编译,后者是⼀次性编译完成,直接运⾏即可。
在解释性语⾔中,当程序与⽤户交互,⽤户就可以构造特殊的输⼊来拼接到程序中执⾏,从⽽使得程序依据⽤户输⼊拼接到SQL语句中,执⾏了与原计划不同的⾏为,从⽽产⽣了SQL注⼊漏洞。
SQL注⼊漏洞产⽣的两⼤前提:1)⽤户可以输⼊
2)输⼊的内容与数据库有交互,即⽤户输⼊的内容会拼接到SQL语句当中执⾏,若没有防护措施的情况下,就存在SQL注⼊漏洞。登录SQL漏洞:
1)登录SQL语句 select * from admin where username=’⽤户输⼊的⽤户名’and password=’⽤户输⼊的密码’。2)⽤户输⼊的内容可由⽤户⾃⾏控制,可以是SQL语句中的关键字或者符合SQL语句结构的语句。例如可以输⼊’or 1=1 –-空格3)SQL语句 select * from admin where username=’’or 1=1—‘and password=’⽤户输⼊的密码’其中or 1=1永远为真 ,–注释后边的内容不再执⾏,因此SQL语句执⾏会返回admin表中的所有内容。
⼆、实验过程(步骤过程、数据记录)
1.步骤
1)环境搭建与软件安装安装虚拟机软件Vmware
通过win7⽂件夹下的镜像在虚拟机中安装Windows7操作系统下载安装phpstudy
百度⽹盘提取DVWA—master.zip压缩包,解压后将其拷贝到phpstudy pro下的WWW⽬录下。
2)在Windows7操作系统的C:\\phpstudy_pro\\WWW\\DVWA-master\\config⽬录下,找到config.inc.php.dist⽂件并对其进⾏以下修改。将默认密码p@ssw0rd修改为root,保存,并将⽂件后缀名改为.php,即将原⽂件名的.dist去掉。
3)开启PHPstudy,并打开Apache2.4.39和MySQL5.7.26
⽅法三:使⽤浏览器访问http://localhost/dvwa-master/index.php
显⽰如下界⾯说明登录成功
5)DVWA包含10个模块,每个模块的代码都有4中安全等级:Low、Medium、High、Impossible。通过从低难度到⾼难度的测试并参考代码变化可更快的学习理解漏洞的原理。
在左侧选择DVWA Security,将Security Level等级设置为Low
点击左侧的“SQL Injection”进⼊“user ID”界⾯
点击最下边的“View Source”按钮,进⼊SQL Injection Source界⾯
显⽰代码如下:
' ); // Get results while( $row = mysqli_fetch_assoc( $result ) ) { // Get values $first = $row[\"first_name\"]; $last =$row[\"last_name\"]; // Feedback for end user echo \"ID: {$id}
First name: {$first}Surname: {$last}
\"; } mysqli_close($GLOBALS[\"___mysqli_ston\"]); } ?>根据以上代码可知,可以利⽤$id变量的漏洞进⾏sql 注⼊。
b.获取数据库信息如猜测是否后台应⽤程序将此值看做了字符型,User ID输⼊:1’or’1’=’1,点击“submit”按钮后页⾯跳转如下:以上结果表明:该操作遍历了数据库中的所有内容。
以上结果表明:该操作遍历了数据库中的所有内容,若是重要的数据库,可能这个信息已经对于攻击者有了⾜够的意义。7)测试查询信息的列数,利⽤语句order by num
输⼊“1’order by 1-- ”(只需输⼊引号中的内容不需要加引号,需要注意的是在“–”之后需要输⼊⼀个空格)结果页⾯正常显⽰如下:
输⼊“1’ order by 2-- ”(同样只需输⼊引号中的内容,⽆需输⼊引号,在“–”之后需要输⼊⼀个空格),显⽰结果如下:
输⼊“1’ order by 3-- ”(同样只需输⼊引号中的内容,⽆需输⼊引号,在“–”之后需要输⼊⼀个空格)显⽰结果如下:
点击“submit”按钮提交后,页⾯跳转到如下界⾯:
2.数据记录
原来使⽤ windows7操作系统⾃带的IE浏览器,点击View Source按钮,没有任何反应,并不能进⼊正确的界⾯。通过百度学习,得知可能和浏览器的加载项设置等有关,经过⼀番对HTML源码的探寻并没有得到想要的结果;后来,通过下载⽕狐浏览器尝试才显⽰出想要的内容。
三、结果讨论与分析
1.实验结果
返回页⾯不存在,或者显错。 这就表⽰有⽂本型的注⼊漏洞。如上⾯输⼊“1’ order by 3-- ”命令,显⽰如下界⾯表明存在SQL注⼊漏洞。
2.分析讨论
1)简单SQL注⼊原理的理解
在sql注⼊中,使⽤单引号是为了让id闭合;
在“–”之后输⼊空格是因为:数据库语句中注释语句的语法规则2)相关软件的了解
Apache(阿帕奇)是世界使⽤排名第⼀的⽂本服务器软件,因其跨平台和安全性⽽被⼴泛使⽤。
DVWA是⼀个基于PHP/MySql搭建的Web应⽤程序,旨在为安全专业⼈员测试⾃⼰的专业技能和⼯具提供合法的环境,帮助Web开发者更好的理解Web应⽤安全防范的过程。3)DVWA包含⼀共⼗个模块:Bruce Force//暴⼒破解Command Injection//命令注⼊CSRF//跨站请求伪造File Injection//⽂件包含File Upload//⽂件上传漏洞
Insecure CAPTCHA//不安全的验证SQL Injection//sql注⼊
SQL Injection(Blind)//sql注⼊(盲注)XSS(Reflected)//反射型XSSXSS(Stored)//存储型XSS
4)DVWA的每个模块都有4种安全等级:Low、Medium、High、Impossible,通过从低难度到⾼难度的测试并参考代码变化可帮助学习者更快的理解漏洞原理。