目的:为了捕获应用程序和后端服务器之间的请求和流量并测试操纵这些类型的请求,我们使用web proxy。
如上所述,作为应用程序和后端服务器之间的设置专用工具,用于捕获两端之间的所有web请求。本质上是一个中间人(MITM)工具。注意:其他网络嗅探工具比如wireshark,都是通过产看本地流量操作,而web proxy主要使用web端口,包括但不限于80,443.
Burp Suite (Burp) - 发音为 Burp Sweet - 是用于 Web 渗透测试的最常见的 Web 代理。它的各种功能都拥有出色的用户界面,甚至还提供内置的 Chromium 浏览器来测试 Web 应用程序。某些 Burp 功能仅在商业版本Burp Pro/Enterprise
中可用,但即使是免费版本也是我们的武器库中极其强大的测试工具。
OWASP Zed Attack Proxy (ZAP)是另一种用于 Web 渗透测试的常见 Web 代理工具。 ZAP 是一个由开放 Web 应用程序安全项目 (OWASP)发起并由社区维护的免费开源项目,因此它没有像 Burp 那样的付费功能。它在过去几年中发展迅速,并作为领先的开源 Web 代理工具迅速获得市场认可。
首先,我们可以使用burp suite或者是zap内置的预配置浏览器。如果我们想使用自带的浏览器,我们可以再firefox中安装firefox proxy插件便捷更改代理端口,zap和burp默认端口为8080.
这里配置简单来说分为以下几步:
在本地firefox 安装插件firefox proxy,并设置proxy为本机ip:8080.
然后在burpsuite内置浏览器中打开http://burpsuite安装CA证书,并在浏览器中导入。
重启firefox即可。
例题:
通过拦截发送包 ,来绕过web端的黑名单字符。
如web端禁止使用数字外字符,那我们直接拦截请求包,在burp中更改数字为字符。
并通过javascript语法可知,“:‘表示语句结束,来构建命令注入攻击。
换一种解法:我们刷新页面,这次我们不截获发送包,我们截获返回包,在服务器将页面信息发送给web页面前拿到数据 :
这时,我们只需要更改type,maxlength的值,就可以 让我们能够填写的值的类型和场长度改变,这样我们直接可以输入我们想输入的值,直接命令注入攻击。
目的:我们希望我们的web proxy工具能够自动的修改所有传出或者传入的http请求。
让我们从自动请求修改的示例开始。我们可以选择匹配请求中的任何文本,无论是请求标头还是请求正文,然后用不同的文本替换它们。为了演示,让我们用HackTheBox Agent 1.0
替换我们的User-Agent
,这在我们可能处理阻止某些用户代理的过滤器的情况下可能会很方便。
Type : Request header | 由于我们想要进行的更改将在请求标头中而不是在其主体中。 |
---|---|
Match : ^User-Agent.*$ | 与包含User-Agent 整行相匹配的正则表达式模式。 |
Replace : User-Agent: HackTheBox Agent 1.0 | 该值将替换我们上面匹配的行。 |
Regex match : True | 我们不知道要替换的确切用户代理字符串,因此我们将使用正则表达式来匹配与我们上面指定的模式匹配的任何值。 |
修改之后,我们看到拦截之后的request header中user-agent变了。
效果同理,只不过从request变为了reposnse。
强制刷新后,可以发现我们不用手动修改,直接就变成text类型。
。
接着,我们尝试直接替换写的内容,
可以看到ip值直接变为cat。
重复请求让我们可以重新发送之前通过web的任何web请求。这是我们能快速更改之前的响应。
在burp中我们可以在proxy中的history列表查看我们先前发送的web请求。
当我们找到我们呢想要的请求后,我们可以将请求转发到repeater中去
转到repeater之后,我们可以直接修改报文再send,这样可以很高效的实现多次的发送报文。
当我们修改和发送自定义 HTTP 请求时,我们可能必须执行各种类型的编码和解码才能与网络服务器正确交互。这两个工具都内置了编码器,可以帮助我们快速编码和解码各种类型的文本。
Spaces
: May indicate the end of request data if not encoded
Spaces
:如果未编码,可能表示请求数据的结束&
: Otherwise interpreted as a parameter delimiter
&
:否则解释为参数分隔符#
: Otherwise interpreted as a fragment identifier
#
:否则解释为片段标识符要在 Burp Repeater 中对文本进行 URL 编码,我们可以选择该文本并右键单击它,然后选择 ( Convert Selection>URL>URL encode key characters
),或选择文本并单击 [ CTRL+U
]。如果我们右键单击并启用该选项,Burp 还支持在我们键入时进行 URL 编码,这将在我们键入时对所有文本进行编码。
虽然 URL 编码是 HTTP 请求的关键,但它并不是我们遇到的唯一编码类型。 Web 应用程序对其数据进行编码是很常见的,因此我们应该能够快速解码该数据以检查原始文本。另一方面,后端服务器可能期望数据以特定格式或特定编码器进行编码,因此我们需要能够在发送数据之前快速对其进行编码。
以下是这两个工具支持的一些其他类型的编码器:
要访问 Burp 中的完整编码器,我们可以转到Decoder
选项卡
在 Burp 的最新版本中,我们还可以使用Burp Inspector
工具来执行编码和解码(除其他外),该工具可以在多个地方找到,例如Burp Proxy
或Burp Repeater
:
尝试解码
VTJ4U1VrNUZjRlZXVkVKTFZrWkdOVk5zVW10aFZYQlZWRmh3UzFaR2NITlRiRkphWld0d1ZWUllaRXRXUm10M1UyeFNUbVZGY0ZWWGJYaExWa1V3ZVZOc1VsZGlWWEJWVjIxNFMxWkZNVFJUYkZKaFlrVndWVmR0YUV0V1JUQjNVMnhTYTJGM1BUMD0=
可以尝试base64
发现base64解码三次后变成一串带有%的加密字符,我们猜测是 url编码,因为%常见于 url编码,解出
HTB{3nc0d1n6_n1nj4}。
总结:
base64编码特征为==,url编码特征为%。
要通过我们的 Web 代理工具路由特定工具发出的所有 Web 请求,我们必须将它们设置为该工具的代理(即 http://127.0.0.1:8080
),类似于我们对浏览器所做的。每个工具可能有不同的方法来设置其代理,因此我们可能必须研究如何为每个工具执行此操作。
Linux 中一个非常有用的工具是 proxychains,它将来自任何命令行工具的所有流量路由到我们指定的任何代理。Proxychains
为任何命令行工具添加了代理,因此是通过我们的 Web 代理路由命令行工具的 Web 流量的最简单、最容易的方法。
简单设置代理:
在
txt/etc/proxychains.conf
文件中注释最后一行socks代理,为了直接使用我们的http代理。
添加一行
shellhttp 127.0.0.1 8080
这样为我们就可以直接类似一下用法:
cmdproxychains curl Google.com
来代理命令行,可以直接在burp中看到流量。
同样的nmap也可以代理,详情见man nmap
cmdnmap -proxies http://,,,,,,,:8080 -Pn -sC
然后我们也可以代理metasploite
我们应该从使用 msfconsole
启动 Metasploit 开始。然后,要为 Metasploit 中的任何漏洞设置代理,我们可以使用 set PROXIES
标志。让我们以 robots_txt
扫描程序为例,并针对我们之前的练习之一运行它:
shell-sessionKriem@htb[/htb]$ msfconsole msf6 > use auxiliary/scanner/http/robots_txt msf6 auxiliary(scanner/http/robots_txt) > set PROXIES HTTP:127.0.0.1:8080 PROXIES => HTTP:127.0.0.1:8080 msf6 auxiliary(scanner/http/robots_txt) > set RHOST SERVER_IP RHOST => SERVER_IP msf6 auxiliary(scanner/http/robots_txt) > set RPORT PORT RPORT => PORT msf6 auxiliary(scanner/http/robots_txt) > run [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed
Burp 和 ZAP 都提供了除默认 Web 代理之外的其他功能,这些功能对于 Web 应用程序渗透测试至关重要。两个最重要的额外功能是 Web 模糊测试和
Web 扫描仪
。内置的 Web 模糊测试程序是功能强大的工具,可用作 Web 模糊测试、枚举和暴力破解工具。这也可以作为我们使用的许多基于 CLI 的模糊测试程序的替代方案,例如 ffuf
、dirbuster
、gobuster
、wfuzz
等。
Burp 的 Web 模糊测试器称为 Burp Intruder
,可用于对页面、目录、子域、参数、参数值和许多其他内容进行模糊测试。尽管它比大多数基于 CLI 的 Web 模糊测试工具要先进得多,但免费的 Burp Community
版本被限制在每秒 1 个请求的速度上,与基于 CLI 的 Web 模糊工具相比,它的速度非常慢,后者通常每秒可以读取多达 10k 个请求。这就是为什么我们只使用免费版本的 Burp Intruder 进行简短查询。Pro
版具有无限速度,除了 Burp Intruder 非常有用的功能外,还可以与常见的 Web 模糊工具相媲美。这使其成为最好的 Web 模糊和暴力破解工具之一
同样的我们可以使用zap。
例题:
The directory we found above sets the cookie to the md5 hash of the username, as we can see the md5 cookie in the request for the (guest) user. Visit '/skills/' to get a request with a cookie, then try to use ZAP Fuzzer to fuzz the cookie for different md5 hashed usernames to get the flag. Use the "top-usernames-shortlist.txt" wordlist from Seclists.
我们将响应放入intruder中,增加cookie字段,然后将其设置为payload,我们对冲来爆破hash。
Web 代理工具的一个重要功能是它们的 Web 扫描仪。Burp Suite 带有 Burp Scanner
,这是一款针对各种类型 Web 漏洞的强大扫描程序,使用 Crawler
构建网站结构,并使用 Scanner
进行被动和主动扫描。
burp 可以在以下三种目标中选取扫描:
我们还可以单击 Dashboard
选项卡上的 New Scan
按钮,这将打开 New Scan
配置窗口以在一组自定义目标上配置扫描。让我们看看如何利用范围来正确定义使用 Target Scope (目标范围
) 从扫描中包含/排除的内容,而不是从头开始创建自定义扫描。Target Scope
可以与所有 Burp 功能一起使用,以定义将要处理的自定义目标集。Burp 还允许我们将 Burp 限制为范围内的项目,以通过忽略任何超出范围的 URL 来节省资源。
如果我们转到 (Target>Site 映射
),它将显示 burp 在通过其代理发出的各种请求中检测到的所有目录和文件的列表:
要将项添加到我们的范围,我们可以右键单击它并选择 Add to scope
:
如果扫描一些项目可能很危险或可能“像注销功能一样”结束我们的会话,我们可能还需要从范围中排除一些项目。要从范围中排除某个项,我们可以右键单击任何范围内的项,然后选择 Remove from scope (从范围中删除
)。最后,我们可以转到 (Target>Scope
) 查看范围的详细信息。在这里,我们还可以添加/删除其他项目,并使用高级范围控制来指定要包含/排除的正则表达式模式。
准备好范围后,我们可以转到 Dashboard
选项卡并单击 New Scan
来配置我们的扫描,该扫描将自动填充我们的范围内项目:
我们看到 Burp 为我们提供了两个扫描选项:Crawl 和 Audit
和 Crawl
。Web Crawler 通过访问其页面中找到的任何链接、访问任何表格以及检查它为构建网站综合地图而提出的任何请求来导航网站。最后,Burp Scanner 向我们展示了一张目标地图,将所有可公开访问的数据显示在一个地方。如果我们选择 Crawl and Audit,Burp
将在其 Crawler 之后运行其扫描程序(我们稍后将看到)。
注意:Crawl 扫描仅跟踪和映射在我们指定的页面中找到的链接,以及在其上找到的任何页面。它不会执行模糊扫描来识别从未被引用的页面,就像 dirbuster 或 ffuf 所做的那样。这可以通过 Burp Intruder 或 Content Discovery 完成,然后根据需要添加到范围。
让我们选择 Crawl
作为开始,然后转到 Scan configuration
选项卡来配置我们的扫描。从这里,我们可以选择单击“新建
”来构建自定义配置,这将允许我们设置配置,例如爬网速度或限制、Burp 是否会尝试登录任何登录表单以及其他一些配置。为简单起见,我们将单击 Select from library
按钮,该按钮为我们提供了一些可供选择的预设配置(或我们之前定义的自定义配置):
我们将选择 Crawl strategy - fastest
选项,然后继续到 Application login
选项卡。在此选项卡中,我们可以添加一组凭据,供 Burp 在它能找到的任何登录表单/字段中尝试。我们还可以通过在预配置的浏览器中执行手动登录来记录一组步骤,以便 Burp 知道要遵循哪些步骤才能获得登录会话。如果我们使用经过身份验证的用户运行扫描,这可能是必不可少的,这将允许我们覆盖 Burp 可能无权访问的 Web 应用程序部分。由于我们没有任何凭证,因此将其留空。
有了它,我们可以点击 Ok
按钮开始我们的 Crawl 扫描。扫描开始后,我们可以在 Tasks
下的 Dashboard
选项卡中查看其进度:
我们还可以单击任务上的 View details
按钮以查看有关正在运行的扫描的更多详细信息,或者单击齿轮图标以进一步自定义我们的扫描配置。最后,扫描完成后,我们将在任务信息中看到 Crawl Finished
,然后我们可以返回 (Target>Site map
) 查看更新的站点地图:
现在站点地图已完全构建,我们可以选择扫描此目标以查找潜在漏洞。当我们在 New Scan
对话框中选择 Crawl and Audit
选项时,Burp 将执行两种类型的扫描:被动漏洞扫描
和主动漏洞扫描
。
与主动扫描不同,被动扫描不会发送任何新请求,但会分析目标/范围内已访问的页面的来源,然后尝试识别潜在
漏洞。这对于快速分析特定目标非常有用,例如缺少 HTML 标签或潜在的基于 DOM 的 XSS 漏洞。但是,如果不发送任何请求来测试和验证这些漏洞,被动扫描只能建议潜在漏洞的列表。尽管如此,Burp Passive Scanner 确实为每个已识别的漏洞提供了一定程度的置信度
,这也有助于确定潜在漏洞的优先级。
让我们从尝试仅执行被动扫描开始。为此,我们可以再次在 (Target>Site map
) 中选择目标或在 Burp Proxy History 中选择一个请求,然后右键单击它并选择 Do passive scan
或 Passively scan this target
。被动扫描将开始运行,其任务也可以在 Dashboard (控制面板
) 选项卡中看到。扫描完成后,我们可以单击 View Details(查看详细信息
)以查看已识别的漏洞,然后选择 Issue activity(问题活动
)选项卡:
或者,我们可以在 Dashboard (控制面板
) 选项卡上的 Issue activity (问题活动
) 窗格中查看所有已识别的问题。正如我们所看到的,它显示了潜在漏洞的列表、它们的严重性和它们的置信度。通常,我们希望查找严重性为 High
和 Certain
confidence 的漏洞。但是,我们应该包括非常敏感的 Web 应用程序的所有严重性和置信度级别,特别关注 High
严重性和 Convicdent/Firm 置
信度。
我们终于到达了 Burp Scanner 最强大的部分,即它的 Active Vulnerability Scanner。主动扫描比被动扫描运行更全面的扫描,如下所示:
Burp Active 扫描程序被认为是该领域最好的工具之一,并且经常由 Burp 研究团队更新以扫描新发现的 Web 漏洞。
我们可以像开始被动扫描一样启动主动扫描,方法是从 Burp Proxy History 中请求的右键单击菜单中选择 Do active scan
。或者,我们可以使用 Dashboard (控制面板
) 选项卡中的 New Scan (新建扫描
) 按钮在我们的范围上运行扫描,这将允许我们配置主动扫描。这一次,我们将选择 爬行和审核
选项,它将执行上述所有要点以及我们到目前为止讨论的所有内容。
我们还可以设置 Crawl 配置(如前所述)和 Audit 配置。Audit configurations (审计配置) 使我们能够选择要扫描的漏洞类型(默认为 all),扫描程序将尝试在其中插入其有效负载,以及许多其他有用的配置。我们再次可以使用 Select from library
按钮选择配置预设。在我们的测试中,由于我们对可能允许我们控制后端服务器的高
漏洞感兴趣,因此我们将选择该 Audit checks - critical issues only
选项。最后,我们可以添加登录详细信息,正如我们之前在 Crawl 配置中看到的那样。
Once the scan is done, we can look at the Issue activity
pane in the Dashboard
tab to view and filter all of the issues identified so far. From the filter above the results, let's select High
and Certain
and see our filtered results:
We see that Burp identified an OS command injection
vulnerability, which is ranked with a High
severity and Firm
confidence. As Burp is firmly confident that this severe vulnerability exists, we can read about it by clicking on it and reading the advisory shown and view the sent request and received response, to be able to know whether the vulnerability can be exploited or how it poses a threat on the webserver:
Finally, once all of our scans are completed, and all potential issues have been identified, we can go to (Target>Site map
), right-click on our target, and select (Issue>Report issues for this host
). We will get prompted to select the export type for the report and what information we would like to include in the report. Once we export the report, we can open it in any web browser to view its details:
As we can see, Burp's report is very organized and can be customized to only include select issues by severity/confidence. It also shows proof-of-concept details of how to exploit the vulnerability and information on how to remediate it. These reports may be used as supplementary data for the detailed reports that we prepare for our clients or the web application developers when performing a web penetration test or can be stored for our future reference. We should never merely export a report from any penetration tool and submit it to a client as the final deliverable. Instead, the reports and data generated by tools can be helpful as appendix data for clients who may need the raw scan data for remediation efforts or to import into a tracking dashboard.
题目一:
给出的目标靶机上的luck.php页面上有一个按钮被禁用,尝试是按钮有效然后获取flag:
访问页面:
:
bp抓包查看html
发现确实按钮有一个disable默认禁用标示。
尝试拦截响应将disable去掉,来获取flag,发现并不能行。这里大概率是后端做了跟多的检验。
这里我的想法是,既然这个按钮被ban了,那我们直接自己写一个button,将原按钮的名字更改,替换到我们自己新建的按钮上,然后试一下
发现果然出现了两个按钮,我们点击下面哪一个:
题目二:
/admin.php 页面使用已多次编码的 Cookie。尝试对 Cookie 进行解码,直到获得包含 31 个字符的值。提交值作为答案。
bp抓响应包,拿cookie:然后解码,首先对3d字符敏感,判断出是ascii,然后解码,一眼base64,在解码出答案。
问题三:解码 Cookie 后,您会注意到它只有 31 个字符长,这似乎是一个缺少最后一个字符的 md5 哈希值。因此,请尝试使用所有字母数字字符对解码的 md5 Cookie 的最后一个字符进行模糊测试,同时使用您上面确定的编码方法对每个请求进行编码。(您可以使用 Seclist 中的“alphanum-case.txt”单词列表作为有效负载)
我们这里还是直接使用cookie爆破,因为我们注意到cookie是一个hash少了最后一个字符(hash md5默认一定为32个字符),所以我们对cookie最后一位爆破,设置cookie为payload,添加规则三个:1添加前缀31位hash 2.base64加密 3.ascii加密
成功登录
题目四:
+ 2 您正在 Metasploit 中使用 'auxiliary/scanner/http/coldfusion_locale_traversal' 工具,但它无法正常工作。您决定捕获 Metasploit 发送的请求,以便可以手动验证并重复该请求。捕获请求后,“/XXXXX/administrator/..”中调用的“XXXXX”目录是什么?
我们进行如下设置后:
相当于把metasploit的流量转到bp,这样我们就能使用bp抓到通信的流量包了:
可知答案。
本文作者:Hyrink
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!