一、题目

SQL注入是一种代码注入技术,它利用web应用程序和数据库服务器之间接口中的漏洞。当用户的输入在发送到后端数据库服务器之前未在web应用程序中正确检查时,就会出现此漏洞。许多web应用程序从用户处获取输入,然后使用这些输入构造SQL查询,这样web应用程序就可以从数据库中获取信息。Web应用程序还使用SQL查询在数据库中存储信息。这些是web应用程序开发中的常见做法。如果未仔细构造SQL查询,则可能会出现SQL注入漏洞。SQL注入攻击是对web应用程序最常见的攻击之一。

在本实验室中,我们创建了一个易受SQL注入攻击的web应用程序。我们的web应用程序包含许多web开发人员所犯的常见错误。学生的目标是找到利用SQL注入漏洞的方法,演示攻击可能造成的损害,并掌握有助于抵御此类攻击的技术。

二、过程

一、Task 1: Get Familiar with SQL Statements
此任务的目的是通过使用所提供的数据库来熟悉SQL命令。我们的web应用程序使用的数据存储在一个MySQL数据库中,该数据库托管在我们的MySQL容器上。我们创建了一个名为sqllab用户的数据库,其中包含一个名为凭据的表。表格存储个人信息(如开斋节、密码、工资、ssn等)。每个员工的数量。在此任务中,您需要使用数据库以熟悉SQL查询。
登录后,可以创建新的数据库或加载现有的数据库。由于我们已经为您创建了sqllab用户数据库,所以您只需要使用use命令来加载这个现有的数据库。


二、Task 2: SQL Injection Attack on SELECT Statement
SQL注入基本上是攻击者可以执行自己的恶意SQL语句的一种技术,通常称为恶意有效负载。通过恶意的SQL语句,攻击者可以从受害者数据库中窃取信息;更糟糕的是,他们可以对数据库进行更改。我们的员工管理web应用程序存在SQL注入漏洞,这模拟了开发人员经常犯的错误。
使用来自www.seed-server.com的登录页面来完成这个任务。登录页面如图1所示。它要求用户提供一个用户名和一个密码。web应用程序根据这两条数据对用户进行身份验证,因此只有知道自己密码的员工才被允许登录。作为攻击者,我们的工作是在不知道任何员工的凭据的情况下登录到Web应用程序。

(一)Task 2.1: SQL Injection Attack from webpage.
在网页端对网站进行SQL注入攻击。已知用户名admin,但是并不知道其密码。尝试SQL注入最简单的单引号’注入,以及#,在username栏目输入Admin’#成功进入。


(二)Task 2.2: SQL Injection Attack from command line
重复任务2.1,但你需要在不使用网页的情况下完成。您可以使用命令行工具,如curl,它可以发送HTTP请求。值得一提的是,如果您希望在HTTP请求中包含多个参数,则需要将URL和参数放在一对单引号之间;否则,用于分离参数(如&)的特殊字符将由shell程序解释,从而改变命令的含义。
将示例符号进行转译,以及注释符添加,输入http://www.seed-server.com/unsafe_home.php?username=admin%27%23,访问后得到结果。


(三)Task 2.3: Append a new SQL statement
上述两种攻击中,我们只能从数据库中窃取信息;如果我们能在登录页面中使用相同的漏洞来修改数据库会更好。一种想法是使用SQL注入攻击将一个SQL语句转换为两个,其中第二个是更新或删除语句。在SQL中,分号(;)用于分离两个SQL语句。请尝试通过登录页面运行两个SQL语句。有一种对策可以阻止您在此攻击中运行两个SQL语句。
Admin’;update credential set salary=0 where Name=“Boby”;#

后台使用的是mysqli.query() 进行数据库查询,其一次只支持一条sql语句,而我们上面的输入会使得存在两条sql语句,所以会报错。
三、Task 3: SQL Injection Attack on UPDATE Statement
如果更新语句发生了SQL注入漏洞,则损坏将更严重,因为攻击者可以使用该漏洞来修改数据库。在我们的员工管理应用程序中,有一个编辑配置文件页面(图2),允许员工更新他们的个人资料信息,包括昵称、电子邮件、地址、电话号码和密码。要进入此页面,员工需要首先登录。当员工通过“编辑配置文件”页面更新其信息时,将执行以下SQL更新查询。在不安全的编辑backend.php文件中实现的PHP代码用于更新员工的配置文件信息。PHP文件位于/var/www/SQLIn注入目录中

(一)Modify your own salary.
如“编辑个人资料”页面所示,员工只能更新他们的昵称、电子邮件、地址、电话号码和密码;他们无权更改工资。假设你(爱丽丝)是一个心怀不满的员工,而你的老板博比今年并没有增加你的薪水。您希望通过利用编辑配置文件页面中的SQL注入漏洞来增加自己的工资。请演示你如何才能实现这一点。假设你知道工资被存储在一个名为工资的栏中。
登录Alice账号后随机选择注入点,输入 110’,Salary='888888,发现修改成功。

(二)Modify other people’ salary
在增加了自己的薪水后,你决定惩罚你的老板博比。你想把他的薪水降到1美元。
使用where语句匹配,110’, Salary=1 where ID=2#,将老板薪水降到1。查看发现修改成功过。


(三)Task 3.3: Modify other people’ password.
登录boby的账户,造成进一步的损害。观察得到在网站上使用的是SHA1加密后的结果,所以如果需要修改密码,应该输入加密后的结果。
将密码修改成yyqxgalzyq,通过哈希加密得到如下:
912388ead317205b0e03d735c5971a9922e8ca82
注入113’,Password='912388ead317205b0e03d735c5971a9922e8ca82
’ WHERE ID=2;#

退出后通过普通登录,利用密码yyqxgalzyq登录,成功登入。

四、Task 4: Countermeasure — Prepared Statement
SQL注入漏洞的基本问题是未能分离出代码和数据。在构造SQL语句时,程序(例如PHP程序)知道哪些部分是数据,哪些部分是代码。不幸的是,当SQL语句被发送到数据库时,边界已经消失;SQL解释器看到的边界可能与开发人员设置的原始边界不同。要解决这个问题,必须确保服务器端代码和数据库中的边界视图是一致的。最安全的方法是使用已准备好的语句。
要了解准备好的语句如何防止SQL注入,我们需要了解当SQL服务器接收到查询时会发生什么。查询执行方式的高级工作流如图3所示。在编译步骤中,查询首先经过解析和规范化阶段,在这个阶段,查询将根据语法和语义进行检查。下一个阶段是编译阶段,其中的关键字(例如,选择、FROM、更新等)。被转换为一种机器可以理解的格式。基本上,在这个阶段,查询会被解释。在查询优化阶段,考虑不同计划的数量来执行查询,从中选择最佳的优化计划。所选的计划存储在缓存中,因此每当下一个查询进入时,它将根据缓存中的内容进行检查;如果它已经存在,将跳过解析、编译和查询优化阶段。然后将编译后的查询传递到实际执行的执行阶段。准备好的语句会在编译后和执行步骤之前进入图片中。一个准备好的语句将经过编译步骤,并被转换为一个具有数据空占位符的预编译查询。要运行此预编译的查询,需要提供数据,但这些数据不会通过编译步骤;相反,它们被直接插入预编译的查询,并发送到执行引擎。因此,即使数据内部有SQL代码,如果不经过编译步骤,该代码也将被简单地视为数据的一部分,没有任何特殊的含义。这就是准备好语句防止SQL注入攻击的方法。

对数据库查询语句进行修改:
更改unsafe_home.php文件,换用了预处理SQL方式,先用 prepare() 处理SQL模板,再用bind_param() 绑定数据,最后获取结果。

将对应index.html中的链接改成safe_home.php

在文件更改完成后,重新dcbuild,dcup,测试task2.1的单引号加#绕过,失败,证明防御成功。

网络攻防技术——SQL注入相关推荐

  1. 2018-2019-2 20165315《网络攻防技术》Exp6 信息搜集与漏洞扫描

    2018-2019-2 20165315<网络攻防技术>Exp6 信息搜集与漏洞扫描 目录 一.实验内容 二.实验步骤 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 3.基本的扫 ...

  2. 网络攻防技术(摆烂一天)

    网络攻防技术非常基础 1. 信息采集 信息采集的重点概念: 信息采集是黑客为了更有效的实施攻击而在攻击前对被攻击目标进行探测活动(信息渗透的过程) 信息采集是渗透重要的一部分:知道的越多就可能知道的更 ...

  3. 网络攻防技术(郑大信安个人总结版)

    网络攻防技术(郑大信安个人总结版) 目录 第1部分 绪论 2 第2部分 网络脆弱性分析 3 第3部分 网络侦察 5 第4部分 网络扫描 7 第5部分 拒绝服务攻击 11 第6部分 计算机木马 14 第 ...

  4. 网络攻防技术——黑客攻防

    前言 一.SQL注入 二.XSS 攻击 1.反射型 2.存储型 三.CSRF 攻击 四.DDoS 攻击 五.DNS劫持 六.JSON 劫持 七.暴力破解 总结 提示:文章同样适用于非专业的朋友们,全文 ...

  5. 2018-2019-2 20189215 《网络攻防技术》第五周作业

    <Python 黑帽子>第四章 代码托管:[https://github.com/jsjliyang/python3-Black.Hat/tree/master/chapter4) 教材& ...

  6. php mysql 注入一句话木马_渗透技术--SQL注入写一句话木马原理

    讲一下SQL注入中写一句话拿webshell的原理,主要使用的是 SELECT ... INTO OUTFILE 这个语句,下面是一个语句的例子: SELECT * INTO OUTFILE 'C:\ ...

  7. 20169205 2016-2017-2 《网络攻防技术》第7周学习总结

    20169205 2016-2017-2 <网络攻防技术>第7周学习总结 教材学习内容总结 课本第七章主要围绕windows操作系统安全攻防技术进行讲述,教材中主要涉及的攻击内容如下: W ...

  8. 2018-2019-2 20189215 《网络攻防技术》第九周作业

    教材<网络攻防技术>第九.十章学习 第9章 恶意代码安全攻防 9.1 恶意代码基础知识 恶意代码是指使计算机按照攻击者的意图执行以达到恶意目标的指令集.类型包括:计算机病毒.蠕虫.恶意移动 ...

  9. 2018-2019-2 20165212《网络攻防技术》Exp5 MSF基础应用

    2018-2019-2 20165212<网络攻防技术>Exp5 MSF基础应用 攻击成果 主动攻击的实践 ms17010eternalblue payload windows/x64/m ...

  10. 20155201 网络攻防技术 实验六 信息搜集与漏洞

    20155201 网络攻防技术 实验六 信息搜集与漏洞 一.实践内容 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 漏洞扫描: ...

最新文章

  1. 大叔也说Xamarin~Android篇~原生登陆与WebView的网站如何共享Session
  2. 如何动态修改windows下的host文件
  3. 《中国人工智能学会通讯》——11.66 结构属性表示及其在脑影像分析中的应用...
  4. php内部常量_PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
  5. 2021HDU多校6 - 7028 Decomposition(构造)
  6. 机器学习中非平衡数据处理
  7. JDBC –模拟序列
  8. log4j.properties log4j.xml 路径问题
  9. 数据结构作业1 讲解和拓展
  10. Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)
  11. Netty工作笔记0017---Channel和Buffer梳理
  12. 告诉你一个 AtomicInteger 的惊天大秘密!
  13. bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛
  14. smarty变量调节器--cat[连接字符串]
  15. odp.net连接oracle9i 出错解决_架构师成长之路:Kafka连接器深度解读之错误处理和死信队列...
  16. win10java编辑器_5个最好的Windows 10的字幕编辑软件
  17. HDU5510 Bazinga(KMP)
  18. 远程控制android盒子,电视盒子ADB教程 通过ADB远程安装应用方法(2)
  19. html网页抓取建一个网站前端,创建网页的方法以及生成HTML骨架
  20. 【前端】一、web技术基础

热门文章

  1. Python sklearn 实现过采样和欠采样
  2. JavaCV入门使用
  3. Python代码: 把几个PDF文件拼接为一个 Merge PDF files
  4. wps下一步快捷键_WPS常用快捷键大全(附下载)
  5. 爆肝三天,我整理了这份春招攻略【针对大三/研二】
  6. 《SpringMVC视频教程》(p2~p3)
  7. K3 CLOUD API接口说明书V2.0
  8. GB2312、BIG5、GBK、GB18030简介
  9. Mirth Connect 互联互通 第四章 通用资格服务实现
  10. Materials studio中的简单聚合物的建立及盒子的弛豫