SQLMAP从入门到精通

sdsz · · 50 次点击 · · 开始浏览    

获课♥》789it.top/2856/

 

SQLMAP 从入门到精通

在网络安全领域,SQL 注入漏洞是一种常见且危害较大的安全隐患。而 SQLMAP 作为一款强大的自动化 SQL 注入工具,为安全测试人员和渗透测试者提供了高效检测和利用 SQL 注入漏洞的手段。本文将带您从入门逐步走向精通 SQLMAP 的使用。

一、入门基础

(一)认识 SQLMAP

SQLMAP 是一款开源的渗透测试工具,它能够自动检测和利用 SQL 注入漏洞,支持多种数据库类型,如 MySQL、Oracle、Microsoft SQL Server 等。其不断更新的特性以及开源的优势,深受全球网络安全爱好者的青睐。它不仅可以检测出注入点,还能在条件允许的情况下,获取数据库中的敏感信息,甚至进一步获取服务器权限。

(二)安装 SQLMAP

Kali Linux 系统:如果你使用的是 Kali Linux 系统,SQLMAP 已经默认安装。你可以通过在终端输入 “sqlmap” 来启动它。如果出现相关的命令参数提示界面,那就说明 SQLMAP 安装成功且可用。

其他系统安装:对于其他操作系统,你可以从 SQLMAP 的官方 GitHub 仓库下载源代码进行安装。首先确保你已经安装了 Python 环境(SQLMAP 基于 Python 开发),然后下载源代码包并解压。进入解压后的目录,在终端执行相关的安装命令,按照提示完成安装过程。

(三)基本使用场景

在开始使用 SQLMAP 前,你需要明确目标。通常,我们需要先使用其他扫描工具,如 AWVS、Nessus 等,对目标网站进行初步扫描,找出可能存在 SQL 注入漏洞的页面链接(即注入点)。然后,再使用 SQLMAP 对这些疑似注入点进行验证和深入利用。例如,通过必应搜索特定类型的网站,如 “inurl:news.asp?id=

site:edu.cn

”“inurl:news.php?id=

site:edu.cn

”“inurl:news.aspx?id=

site:edu.cn

” 等,来获取一些可能存在注入点的目标网址。

二、基础使用教程

(一)检测注入点

指定单个 URL 检测:使用 “-u” 参数来指定需要检测的 URL,例如:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' 。在执行命令后,SQLMAP 会开始对指定的 URL 进行检测,尝试判断是否存在 SQL 注入漏洞以及可能的注入类型和所使用的数据库类型及版本。过程中如果遇到需要确认的提示,一般输入 “y” 继续。例如,对本地搭建的 SQL - labs 靶场中的某一页面进行检测:sqlmap -u '
http://192.168.31.180/sqli - labs - master/Less - 1/?id=1' 。

批量检测 URL:当你有多个需要检测的 URL 时,可以准备一个文本文件,将每个 URL 按行写入其中。然后使用 “-m” 参数指定该文件来进行批量扫描。如:sqlmap -m urls.txt 。SQLMAP 会逐个扫描文件中的 URL,遇到需要确认的情况,按 “y” 键继续扫描下一个。

(二)脱库操作

获取数据库信息

获取所有数据库:使用 “--dbs” 参数可以获取目标网站所使用的所有数据库名称。例如:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' --dbs 。

获取当前使用的数据库:通过 “--current - db” 参数,能够得知当前正在使用的数据库。命令如下:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' --current - db 。

获取数据库版本:在检测注入点的过程中,SQLMAP 有时会直接显示数据库的版本信息。你也可以通过特定命令来明确获取,例如针对某些数据库,执行相应命令后可在结果中找到版本信息。

获取数据表:使用 “--tables” 参数来获取数据库中的表。如果要指定某个数据库来获取其表,可结合 “-D” 参数,如:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' -D ' 数据库名 ' --tables 。若不指定数据库,直接使用 “--tables”,则会尝试获取所有数据库中的表信息。

获取字段:利用 “--columns” 参数获取表中的字段信息。同样,需要指定数据库和表,例如:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' -D ' 数据库名 ' -T ' 表名 ' --columns 。只指定数据库而不指定表会报错。

获取字段类型:“--schema” 参数可用于获取字段类型,你可以指定数据库或表来获取相应的字段类型信息。若不指定,则会尝试获取数据库中所有字段的类型。

获取数据:使用 “--dump” 参数获取表中的实际数据。你可以精确指定数据库、表和字段来获取特定数据,例如:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' -D ' 数据库名 ' -T ' 表名 ' -C ' 字段 1, 字段 2' --dump 。若想获取指定数据库中所有表的数据,可使用:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' -D ' 数据库名 ' --dump 。同时,还能通过 “--start” 和 “--stop” 参数指定开始和结束的行,只获取部分数据,如:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' -D ' 数据库名 ' -T ' 表名 ' --start 1 --stop 5 --dump 。

(三)其他常见操作

POST 请求检测:当目标存在于 POST 请求中的注入点时,我们可以使用 Burp Suite 等抓包工具将 HTTP 请求内容保存为 txt 文件。然后使用 “-r” 参数指定该文件,让 SQLMAP 通过 POST 请求方式检测目标,例如:sqlmap -r bp.txt 。

cookie 注入:如果需要进行 cookie 注入测试,可使用 “--cookie” 参数指定 cookie 的值,例如:sqlmap -u "http:// 目标网址?参数 = 值" --cookie "cookie 内容" 。

三、中级进阶技巧

(一)批量化扫描

扫描 Burp 的请求日志:首先在 Burp 的配置项中进行设置,使其记录所有的 request 请求,并将这些请求保存到 SQLMAP 目录下的一个文本文件(如 sql.txt)中。接着设置浏览器的 Burp 代理,访问测试 URL,确保有请求被记录到文件中。最后使用 SQLMAP 对该文件进行扫描,命令为:sqlmap.py -l sql.txt --batch -smart 。其中,“batch” 参数会让 SQLMAP 自动选择 “yes”,无需手动确认;“smart” 参数采用启发式快速判断,能够节约扫描时间。扫描结果将导出到 C 盘下的 SQLMAP 目录下的 output 目录。

扫描文本中的多个目标:将多个要测试的 URL 写入一个文本文件(如 url.txt),然后使用 SQLMAP 对该文件进行扫描,命令为:sqlmap.py -m url.txt --dbs 。这样就可以批量检测文本中的 URL 是否存在 SQL 注入漏洞,并获取相关数据库信息。

(二)利用正则过滤目标网址

在扫描 Burp 请求时,往往会有很多不必要的请求,并非我们真正要扫描的网址。此时可以利用正则表达式来过滤目标网址,使用 “–scope” 参数。例如,若只想要以 “www” 开头,以 “.com”“ .net”“ .org” 结尾的网址,可使用命令:Python2

sqlmap.py

-l burp.log --scope=”(www)?.target.(com|net|org)” 。

(三)利用谷歌批量扫描

通过结合谷歌搜索语法和 SQLMAP,我们可以实现批量扫描。使用 “-g” 参数来利用谷歌搜索,例如:sqlmap -g “inurl:php?id=10

site:.com.cn

” --proxy “

http://127.0.0.1:1080

” --threads 5 --batch --answer “extending=N,follow=N,keep=N,exploit=n” --smart 。其中,“-g” 后面跟谷歌搜索语法;“--proxy” 设置代理(若使用了科学上网工具,可直接代理本地);“--threads” 设置线程数,提高扫描速度;“--batch” 让 SQLMAP 自动回复;“-answer” 可对一些特定问题作出预设回答,在自动化注入中很有用;“--smart” 在有大量目标时,只检查基于错误的注入点,提高效率。

四、高级应用与技巧

(一)关于文件写入与 shell 获取

执行指定 SQL 命令:使用 “sql - shell” 参数可以进入一个交互界面,在其中执行指定的 SQL 命令。这在需要寻找文件绝对路径等操作时非常有用。

执行指定的 SQL 语句:“–sql - query” 参数可用于直接执行指定的 SQL 语句,方便进行一些特定的数据库操作测试。

读取指定文件:通过 “–file - read” 参数,能够读取目标服务器上的指定文件内容。例如:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' --file - read / 路径 / 文件名 。

写入本地文件:利用 “–file - write” 和 “–file - dest” 参数,可将本地文件写入到目标服务器的指定路径。如:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' --file - write / 本地路径 / 本地文件名 --file - dest / 目标服务器路径 / 目标文件名 。例如:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' --file - write /test/test.txt --file - dest /var/www/html/1.txt ,即将本地的 test.txt 文件写入到目标服务器的 /var/www/html/1.txt 路径下。

执行系统命令与获取系统交互 shell:“–os - cmd” 参数可用于执行系统命令,例如:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' --os - cmd=id 。而 “–os - shell” 参数则可以获取一个系统交互 shell,方便在目标服务器上进行更深入的操作,但此操作需要目标服务器存在相应的可利用漏洞且权限允许。

读取 win 系统注册表:在针对 Windows 系统的目标时,“–reg - read” 参数可用于读取 Windows 系统注册表信息。

(二)绕过 WAF 防火墙

Web 应用防火墙(WAF)会对 SQL 注入等攻击进行拦截。然而,SQLMAP 提供了一些方法来尝试绕过 WAF。

使用 tamper 脚本:SQLMAP 自带了一些 tamper 脚本,这些脚本可以对注入语句进行变形,从而绕过一些 WAF 的检测。在使用时,通过在命令中添加相应的 tamper 脚本参数来启用,例如:sqlmap -u 'http:// 目标网址 /? 参数 = 值 ' --tamper 脚本名 1, 脚本名 2 。不同的脚本针对不同类型的 WAF 和注入场景有不同的效果,需要根据实际情况选择。

利用特定漏洞和技巧:例如,利用 IIS 解析漏洞等一些服务器或应用程序的特定漏洞,结合 SQLMAP 的操作来绕过 WAF。对于某些 WAF,还可以通过精心构造请求头、巧妙利用编码方式等技巧来绕过其检测,但这需要对 WAF 的检测机制和相关技术有深入的理解。

五、安全防范意识

虽然 SQLMAP 是一款强大的安全测试工具,但如果被恶意使用,也会对网站和数据库安全造成极大威胁。对于网站管理员和开发者来说,防范 SQL 注入攻击至关重要。

输入验证:对所有用户输入的数据进行严格的验证和过滤,限制输入的数据类型和格式,避免非法字符进入数据库查询语句。

使用参数化查询:在编写数据库查询代码时,尽量使用参数化查询,而不是直接将用户输入拼接到 SQL 语句中,这样可以有效防止 SQL 注入漏洞的产生。

定期安全检测:使用专业的安全扫描工具定期对网站进行安全检测,及时发现并修复可能存在的 SQL 注入等安全漏洞。

监控与日志分析:建立完善的监控和日志分析机制,对网站的访问日志和数据库操作日志进行分析,及时发现异常的数据库访问行为,并采取相应的措施。

通过以上从入门到精通的学习过程,您将对 SQLMAP 有全面且深入的掌握。无论是用于合法的安全测试,还是为了更好地防范 SQL 注入攻击,这些知识和技能都将为您在网络安全领域的探索和实践提供有力的支持。

50 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传