freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

这可能是有史以来最快的手工SQL注入
2024-04-23 15:34:33

阅读须知

本文的知识内容,仅供网络安全从业人员学习参考,用于已获得合法授权的网站测试,请勿用于其它用途。请勿使用本文中的工具、技术及资料,对任何未经授权的网站、系统进行测试,否则,所造成的直接或间接后果,均由您自行承担。

数据处理模块的使用场景

在诸如SQL注入、XSS等测试场景中,我们需要频繁构造不同的测试向量(Payload)发送请求数据,验证漏洞是否存在,是否可被利用。比如,在SQL注入场景下,我们通常会使用' or 1=1 # ' or 1=2 # 等Payload来判断注入是否存在,使用' order by N # 来判断当前查询的字段数是多少,会不断修改 Payload 直至得到测试数据。

在这个测试过程中,我们需要频繁在数据包中的特点位置修改Payload,通常还需要对Payload进行编码或解码。特别是当涉及到Payload的多重混合编码时,这样的操作更加繁琐,也更耗费时间。

在1.6.4 版本的 HTTP抓包测试工具中,我们在HTTP重放模块中新增了数据处理功能,这是一个很有意义的创新功能。该功能可以帮我们一直锁定要修改的Payload的位置,甚至进行撤销、重做、切换测试标签页、关闭工具,都会帮我们记录和锁定。我们只需要在一个独立的编辑器中对Payload进行编辑、编码解码和发送,甚至还支持自定义数据处理流程。

下图我们手工SQL注入过程为例,对比了常规工具与我们的重放模块的数据处理功能的差异:image.png

(常见工具 VS TangGo)

通过对比分析上述流程图,我们可以清晰地得出以下结论:当进行手工 SQL 注入时,在第一次Payload测试中,双方步骤大致相同,但在第二次和第三次 Payload 测试中,而TangGo 都明显优于常用工具 3 步。这是因为 TangGo 的数据处理模块对所需修改的数据进行了锁定,不需要反复框选数据,同时数据处理模块还能对框选数据进行一键编码并发送。由此可见,相较于常用工具,使用TangGo 的数据处理功能进行Payload测试能够显著减少操作步骤,极大地提高了工作效率。

本次更新的数据处理模块具体功能如下:

数据修改锁定:使用数据处理模块时,当需要修改指定位置的数据时,只需首次框选该数据,之后即使数据进行了修改和替换,也不需要重新框选该处数据。

撤销:框选数据被修改后,可以点击撤销回到修改前。

重做:误操作撤销数据后,可以点击重做回到撤销前。

标签页切换锁定:当需要使用多个标签页的时候,每个标签页的框选位置将会独立保留,标签页来回切换并不会导致框选位置丢失。

自定义规则:

  • 处理方式:包含多种编码、解码的处理方式。

  • 组合规则:多种规则之间可以自由组合,实现数据的多重处理。

  • 顺序交换:可以设置各个规则的先后执行顺序,确保正确的处理流程。

  • 规则启用:可以随时启用和关闭规则,无需多次新建和删除。

  • 全局同步:自定义规则在每个标签页都能使用。

使用方法

本文通过测试靶场来演示新功能“数据处理模块”。

测试靶场:https://github.com/Audi-1/sqli-labs

测试漏洞:联合查询型 SQL 注入漏洞。

使用工具:HTTP抓包测试工具、数据处理模块。

下载地址:TangGo测试平台 (nosugar.tech)

image.png

测试思路

访问目标网站:访问目标网站。

识别注入点: 首先要确定应用程序中的注入点,可能是表单、URL参数或Cookie等位置。本文注入点是通过 URL 提交参数。

判断注入点的类型:根据参数类型可分为字符型和数字型。本文为字符型注入。

确认注入类型:确定注入点类型并且能够注入,本文确定注入类型为联合查询型。

构造 SQL 测试Payload:根据注入流程使用不同的 Payload,模拟真实的注入流程。

提交不同 Payload****:使用数据处理功能快速修改 Payload,拿到测试数据。

访问目标网站

使用 HTTP 抓包测试工具,打开右上角的内置浏览器image.png,在浏览器中访问测试靶场,加载后为一个带有提示信息的界面:

image.png

(靶场界面)

该界面黄色字体提示我们“Please input the lD as parameter with numeric value”,按照提示要求,我们在 URL 中输入“ ?id=1”,“ ?id=1”是使用 GET 方法传递参数的一种常见方式,其中的 id是参数的名称,1是对应的值。这个参数告诉服务器查询参数为 id 值为 1 的对应数据。发送请求后,可以看到页面显示了对应的查询数据。
image.png

(查询 id=1)

因为完整的手工 SQL 注入流程需要不断的修改 Payload,所以接下来我们使用 HTTP抓包测试工具中的重放模块来进行测试。在 HTTP 抓包测试工具中,打开左上角的拦截开关,开启拦截数据之后重新提交浏览器的请求数据,提交之后,HTTP 抓包测试工具已成功捕获到数据包:

image.png

(抓取请求数据包)

将捕获到的数据发送到数据重放模块中,在重放页面中,构造不同的 SQL 注入语句,同时利用数据处理模块对数据进行处理。

数据处理(新功能)

在重放页面中,点击发送后,在右侧页面中可以查看到响应数据。为了能够直观地查看响应数据返回的内容,本教程之后步骤中都将通过点击“页面浏览”选项来查看返回结果。在页面浏览中,我们可以直观的看到查询显示的数据。

image.png

(页面浏览)

接下来按照 SQL 注入的流程测试来进行操作。

步骤 1:判断字符类型

判断 SQL 注入的参数类型,使用 Payload1 ' 进行测试。

框选请求数据包中需要修改的数据1

image.png

(框选数据)

点击右侧打开数据处理模块:
image.png

(数据处理模块)

已选中数据中的内容为我们所框选的数据,此处为需要修改数据1

因为需要修改1****为1 ' ,所以在“流程一:替换选择数据”内填入修改后的 Payload1 '

勾选流程一:替换选择数据选项框并填入修改后的Payload1 '

image.png

(填入 Payload)

因为 Payload 中含有特殊字符串空格,为了确保 URL 能够正确传输和解析,所以这里需要对空格进行 URL 编码。

勾选流程二:对数据进行处理,选择该选项后会对流程一中填入的数据进行处理,此处需要进行 URL 编码,所以在左侧选项框中点击编码,右侧选项框中点击 URL 编码。

详细的处理规则分类如下:

编码:对数据进行指定格式的编码。

image.png

(编码)

image.png

(编码格式)

解码:对数据进行指定格式的解码。

image.png

(解码)

image.png

(解码格式)

自定义规则:按照自定义规则对数据进行编码。详细设置步骤如下:

点击流程二:对数据进行处理旁边的自定义规则。

image.png

(自定义规则)

点击新建自定义处理规则,设置一个方便记忆的名称。

image.png

(设置名称)

点击右侧添加规则。

image.png

在弹出的会话框中,你可以自定义处理方式。

image.png

(处理方式)

你可以添加多个规则,这些规则将按照表中的顺序依次执行。

image.png

(建立多个规则 )

你可以通过点击按钮来开启或关闭该规则。

image.png

(开启和关闭)

你可以通过点击向上的箭头来交换规则执行的顺序。

image.png

(交换顺序)

设置完成后,左侧选择自定义规则,右侧可以选择设置的自定义规则。

image.png

(自定义规则选择)

设置完成流程二之后,移动至右下角的三个点处,可以选择处理完成后的应用方式。

image.png

(方式选择)

应用到请求数据:该选项会把处理完成后的数据应用到原始请求数据包中。

应用并发送数据包:该选项会把处理完成后的数据应用到原始请求数据包中并发送数据包。

应用并去掉 Cookie 发送:该选项会把处理完成后的数据应用到原始请求数据包中并发送去掉 Cookie 后的数据包。

应用并去掉 Referer 发送:该选项会把处理完成后的数据应用到原始请求数据包中并发送去掉 Referer 后的数据包。

点击应用并发送数据包,请求数据包中的内容已经被自动替换为 URL 编码后的数据。

image.png

(URL 编码替换)

打开页面浏览,网页显示一串错误,根据错误信息可以判断为字符型类型。

image.png

(错误信息)

步骤 2:判断列数

使用测试 Payload1'order by 1,2,3,4 # 进行列数判断,之前框选过的数据在替换之后仍会处于框选状态,所以无需再次框选数据,在流程一中填入需要替换的 Payload,流程二依旧设置为编码和 URL 编码,点击应用并发送数据包。

在页面浏览中可以看到页面返回的提示为“Unknown column '4' in 'order clause'”,根据提示得出该数据表只有 3 列。

image.png

(错误提示)

步骤 3:确定显示位

使用Payload-1 'union select 1,2,3 # 确定显示位,操作和之前一致,在流程一中填入需要替换的 Payload,点击应用并发送数据包。

根据页面浏览中的显示内容可以确定第二位和第三位为回显位,之后的数据都能通过第二位和第三位显示出来。
image.png

(确定回显位)

之后的注入流程就不一一展示了。

不过这里需要说明的是,数据处理功能不仅能够处理发送数据的请求包,也能处理收到响应数据的响应包。接下来为了能够举例说明,我们稍微对靶场中的数据进行了修改。当使用 Payload-1' UNION SELECT id, username, password FROM users WHERE username = 'admin' # 的时候,这时候页面会返回账户名称为 admin 的相关信息,在页面浏览中可以发现,账户的密码进行了 base64 的编码,所以接下来使用数据处理功能对响应数据进行解码。

image.png

(admin 相关信息)

点击响应数据页面,在响应数据返回的 HTML 代码中,框选“Your Password:YWRtaW4=”中的“YWRtaW4=”,框选完成后勾选流程二,对数据进行解码,选择 base64 解码,点击应用到响应数据后。

image.png

(框选源码)

应用完成后可以看到 HTML 中的源码做出了对应的修改,其中编码前的数据“YWRtaW4=”已经修改为解码后的数据“admin”。成功拿到了账号 admin 的密码。

image.png

(解码数据)

注意:工具使用内容请以最新版本为主。

# 渗透测试 # 网络安全 # web安全 # 抓包工具
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录