使用SQLMap中的凭据直接连接到数据库

时间:2018-03-03 02:26:28

标签: python mysql sqlalchemy sql-injection sqlmap

我拥有 TARGET 网站数据库和SQLMap声明的凭据,您可以直接连接到数据库 这是我在Kali Linux中的SQLMap命令

sudo sqlmap -d mysql://USER:PASSWORD@TARGET_IP:MySQL_Port/DATABASE

例如

sudo sqlmap -d mysql://admin:12345@95.12.45.12:3306/information_schema

但这是我每次都得到的错误

[CRITICAL]  SQLAchemy connection issue ('(_mysql_exceptions.OperationalError)
(1045, "Access denied for user 'admin'@'17.45.65.11' (using password: YES)")')

IP 17.45.65.11是我的IP ofc否认

我的命令有问题吗?

或者任何人都知道使用凭据直接连接到目标数据库的更好方法吗?

3 个答案:

答案 0 :(得分:2)

MySQL的凭据不仅包括用户名和密码,还包括 允许的IP地址 。因此,即使我们拥有正确的用户名和密码,但是连接是从不允许的IP建立的,我们也会从sqplmap获得1045“拒绝访问”错误。

为了说明问题,我使用用户testdb设置了一个测试数据库admin。以下是用户的凭据:

MariaDB [testdb]> select host,user,password from mysql.user where user='admin';
+-------------+-------+-------------------------------------------+
| host        | user  | password                                  |
+-------------+-------+-------------------------------------------+
| 92.168.0.20 | admin | *00A51F3F48415C7D4E8900010101010101010101 |
+-------------+-------+-------------------------------------------+

host列中所示,允许用户admin仅从IP 92.168.0.20访问服务器。现在,如果我从这个IP运行sqlmap,它就会成功:

$ sudo sqlmap -d 'mysql://admin:12345@92.168.0.99:3306/testdb'

...

[*] starting at 09:28:43

[09:28:43] [INFO] connection to mysql server 92.168.0.99:3306 established
[09:28:43] [INFO] testing MySQL
[09:28:43] [INFO] resumed: [[u'1']]...
[09:28:43] [INFO] confirming MySQL
[09:28:43] [INFO] resumed: [[u'1']]...
[09:28:43] [INFO] the back-end DBMS is MySQL
back-end DBMS: MySQL >= 5.0.0
[09:28:43] [INFO] connection to mysql server 92.168.0.99:3306 closed

[*] shutting down at 09:28:43

如果我从不同的IP运行sqlmap,则会因1045“拒绝访问”错误而失败(与输出中完全相同):

$ sudo sqlmap -d 'mysql://admin:12345@92.168.0.99:3306/testdb'

...

[*] starting at 09:32:00

[09:32:00] [CRITICAL] SQLAlchemy connection issue ('(_mysql_exceptions.OperationalError)
  (1045, "Access denied for user 'admin'@'92.168.0.55' (using password: YES)")')

[*] shutting down at 09:32:00

因此,如果您确定自己拥有正确的用户名和密码,则很可能在允许的IP中出现问题。创建MySQL用户时,通常只允许从localhost访问。因此,您可能拥有正确的用户名和密码,但您只能在服务器上本地使用它们。另一方面,服务器接受来自外部的连接的事实可以指示允许一些其他IP连接。在这种情况下,您必须找出允许哪些IP并从其中一个连接。

答案 1 :(得分:0)

以足够的权限进入MySQL并检查您拥有的权限:

SHOW GRANTS FOR 'admin'@'17.45.65.11';
SHOW GRANTS FOR 'admin'@'%';
SELECT host, plugin FROM mysql.user WHERE user = 'admin';

最后一个是绝望,看你可能有什么。

如果不够,请执行

之类的操作
GRANT SELECT ON *.* TO 'admin'@'17.45.65.11' IDENTIFIED BY 'some password';

我说“类似”,因为您可能需要的不仅仅是SELECT,或者您可能希望将其限制为少于所有数据库(*.*),或者不仅仅是那个IP地址。等

注意:如果您已经有一些GRANT ... TO 'admin'@'localhost' ...,那就不够了。

此外,请注意,无论您做什么都应该仔细检查安全问题。

答案 2 :(得分:-1)

默认情况下,mysql服务器不允许远程访问,只允许localhost(127.0.0.1)。检查服务器上的用户访问权限。