热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL注入实验报告

实验项目SQL注入综合性实验2020年9月25日一、实验综述1.实验目的及要求创建VMWARE虚拟机的Windows环境,在虚拟机中安装phpstudy,并搭建

实验项目SQL注入
综合性实验2020年9月25日

一、实验综述


1.实验目的及要求

创建VMWARE虚拟机 的Windows环境,
在虚拟机中安装phpstudy,并搭建DVWA环境,通过学习web工作原理与SQL注入工作原理,能够实现简单的SQL注入验证。


2.实验仪器、设备或软件

Vmware
DVWA
phpStudy


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

在这里插入图片描述

4)登录DVWA
方法一:进入命令提示符界面,利用ipconfig命令查找本机的IP地址,用浏览器访问查询到的IPv4地址
方法二:使用浏览器访问http://127.0.0.1/DVWA/index.php
注:此处127.0.0.1为我的主机的IPV4地址

在这里插入图片描述
方法三:使用浏览器访问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界面

在这里插入图片描述
显示代码如下:

' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '' ); // 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 注入。

在这里插入图片描述
6)SQL注入:
a.向userID文本框中输入查询字符串1=1or1=1
URL网址变成了:
http://localhost/dvwa-master/vulnerabilities/sqli/?id=1%3D1+or&Submit=Submit

在这里插入图片描述
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)//反射型XSS
XSS(Stored)//存储型XSS
4)DVWA的每个模块都有4种安全等级:Low、Medium、High、Impossible,通过从低难度到高难度的测试并参考代码变化可帮助学习者更快的理解漏洞原理。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
author-avatar
云峰家园
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有