你没见过的Burpsuite骚操作——拦截CLI工具的流量
介绍
Burp Suite,mitmproxy都是非常有用的HTTP代理工具。它们不仅仅用于渗透测试和安全研究,也用于开发、测试和API研究上。实际上,我自己现在更多的是用Burp来进行调试和学习,而不是用于实际的渗透测试。观察网络中的实际HTTP请求,对理解复杂的API或测试我的脚本或工具是否正常工作是非常有帮助的。
像Burp或mitmproxy这样的工具的一般使用方法是配置浏览器通过它进行通信,网上有很多关于如何配置Firefox、Chrome等与Burp Suite会话并信任Burp签名的证书颁发机构的文章和教程。
然而,我经常需要检查来自除浏览器以外的其他工具的流量,最常用的是命令行工具。很多常用服务的CLI工具只是可以发出HTTP请求,检查和或修改这些流量很有研究意义。如果一个CLI工具没有正常工作,有时候查看错误信息也没有帮助,那么只要你看看它实际发出或者接收的HTTP请求和响应,问题就会很快解决。
关于burpsuite实战,在成熟的实践环境下,会有比较明显的提升。 https://www.hetianlab.com/cour.do?w=1&c=C172.19.104.182014112610353900001&pk_campaign=weixin-wemedia
我曾使用这些技术来检查常用的CLI工具,如Azure 的CLI 程序。以前,我甚至代理了我们使用的商业安全工具提供的CLI工具,并了解到了一些未公开的API和行为,这些网络行为并不在他们的说明文档中。有了这些知识,我就能够很简单的完成某些事情,而这些事情是无法通过他们的 CLI或发布的API文档来实现的。
在这篇文章中,我想展示各种方法,配置不同语言编写的CLI工具,通过Burp Suite代理他们的HTTP(S)流量。一般来说,有两件事我们必须要配置。
Burp代理CLI的流量
让CLI信任Burp的 CA证书(或忽略信任)
一般来说,第二步通常比较困难,但并非不可能实现。
在大多数的例子中,我让Burp Suite在localhost:8080上监听,并在同一台机器上运行CLI工具。如果Burp运行在不同的主机或接口上,你应该将localhost替换成Burp的IP。
例一 代理wget或者curl
对于第一个例子,我将展示如何代理 curl 和 wget。这两个工具都可以很容易地配置代理,它们可以从环境变量中获取代理设置。
http_proxy
https_proxy
你可以用以下的方式来进行代理配置.
export http_proxy=localhost:8080
export https_proxy=localhost:8080
curl ifconfig.io
wget -O /dev/null ifconfig.io## or ##http_proxy=localhost:8080 https_proxy=localhost:8080 curl ifconfig.io
http_proxy=localhost:8080 https_proxy=localhost:8080 wget -O /dev/null ifconfig.io
在burp中我们可以看到wget和curl的流量请求
这很好用,因为它只是HTTP。那HTTPS呢?如果你尝试着运行的话,你肯定会失败的。
curl不信任Burp的证书,这些错误信息是相当有用的。大多数CLI工具在信任证书时,都会听取操作系统的安排。所以我们有两个选择:
禁用信任核查
将我们的操作系统配置为信任Burp CA
禁用信任核查
第一种选择最简单。对于curl
使用-k
或wget
使用--no-check-certificate
参数:
http_proxy=localhost:8080 https_proxy=localhost:8080 curl -k https://ifconfig.io
http_proxy=localhost:8080 https_proxy=localhost:8080 wget -O /dev/null --no-check-certificate https://ifconfig.io
使操作系统信任代理证书
对于第二个选项,我们必须从Burp内导出BurpCA。我们可以将DER格式的Burp证书下载到~/certs
。
mkdir ~/certs
wget -O ~/certs/burpca.der http://localhost:8080/cert
cd ~/certs
openssl x509 -inform DER -in burpca.der -out burpca.crt
注意:如果您使用mitmproxy
,则证书已经在~/.mitmproxy
目录下了。
MAC OS
在Mac上,只需双击下载的DER文件,OSX就会提示您将证书添加到信任的名单中。如果选择“系统”,则计算机上的所有用户都将信任它。然后,在导入后,您必须信任它。搜索“ PortSwigger”并打开证书。在“信任”下,为SSL选择“始终信任”:
WINDOWS
在Windows上,双击DER文件并选择“ Install Certificate”。选择“受信任的根证书颁发机构”证书存储以安装并信任BurpCA。
LINUX
对于大多数linux发行版,都包含受信任的证书/usr/share/ca-certificates
。将burpca.crt
文件复制到/usr/share/ca-certificates
,然后运行:
sudo update-ca-certificates
通过使用操作系统信任的Burp CA,您不再需要使用curl的-k参数或者wget的--no-check-certificates参数,您可以在Burp中看到HTTPS流量:
例二 代理java jar
虽然我喜欢用Python或npm包或Go文件,而且我接触的很多CLI工具都是JAR形式的工具,现在,这些程序中一些有代理支持,可以通过命令行选项进行配置。然而其中一些没有,我需要强制JAR文件来使用我的代理工具。
以前使用的一个安全扫描器有一个API,并配有说明文档。使用API的token与它进行交互的唯一方式是使用他们的Java JAR CLI工具。但是我们需要开发我们的自动化工具,希望能写一个Python工具和我们的API进行交互,所以我使用了这种技术来代理他们的JAR,并弄清楚了如何使用API 的token来进行验证。
我在我找到的一个Atlassian CLI工具上演示与Jira的交互过程。例如,我可以用这个CLI来查询云托管实例上运行的Jira版本。
java -jar acli-9.1.0.jar -s https://greenshot.atlassian.net -a getServerInfo
Jira version: 1001.0.0-SNAPSHOT, build: 100119, time: 2/6/20, 6:26 AM, description: Greenshot JIRA, url: https://greenshot.atlassian.net
不幸的是,CLI工具没有用于指定代理的任何选项。好消息是,在启动Java时,强制JVM通过某些属性使用代理实际上是可行的:
http.proxyHost
http.proxyPort
https.proxyHost
https.proxyPort
http.nonProxyHosts
要通过Burpsuite代理JAR,我们需要为代理设置前4个选项,并使最后一个选项为空值。这将强制Java通过Burp代理所有主机。为此, 我们在指定JAR之前将它们作为命令行参数添加到命令中:
java -Dhttp.nonProxyHosts= -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8080 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8080 -jar acli-9.1.0.jar -s https://greenshot.atlassian.net -a getServerInfo
但是我们现在看到了一个SSL错误:
即使我的操作系统中信任了Burp证书,Java仍实际上使用其自己的密钥库。因此,我们还需要在其中添加Burp证书。
将证书添加到Java密钥库
默认密钥库位于$JAVA_HOME/lib/security/cacerts
。如果您没有设置$JAVA_HOME
环境变量,您也可以使用java
命令快速找到它:
java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home'java.home = /Users/RonnieFlathers/.sdkman/candidates/java/11.0.3-zulu
要将证书添加到Java的密钥库中,我们可以利用Java的keytool
程序,该工具包含在$JAVA_HOME/bin/keytool
中。要导入Burp证书,我们必须将PEM格式的文件导入到受信任的CA证书中:
$JAVA_HOME/bin/keytool -import -alias burpsuite -keystore $JAVA_HOME/lib/security/cacerts -file $HOME/certs/burpca.crt -trustcacerts
这里提示您输入密钥库密码。默认情况下,值为changeit
。然后指定“是”以信任证书:
现在有了Java信任的Burp证书,我们可以查看Burp中的HTTP流量:
例三 代理Python请求
下一个示例将介绍Python CLI。最近,我经常使用这个工具,因为之前我做了很多Azure自动化工作,并希望很好的使用zaure的cli来提高工作效率。不过,在示例中,我已经使用homebrew安装了Azure CLI,并已经完成了azure账号的登录。
我可以使用以下方法查看可用的资源组:
$ az group list
[{"id": "/subscriptions/300b646c-f573-49d4-96d5-c01efe36c282/resourceGroups/ropnoptest","location": "centralus","managedBy": null,"name": "ropnoptest","properties": {"provisioningState": "Succeeded"},"tags": {},"type": "Microsoft.Resources/resourceGroups"}
]
幸运的是,通过截取发出的请求,Python会使用 "正常 "的代理环境变量。然而当试图设置这些变量的时候,得到的结果却是SSL错误。
$ HTTPS_PROXY=http://localhost:8080 az group list
request failed: Error occurred in request., SSLError: HTTPSConnectionPool........
由于我的操作系统信任Burp CA,因此在测试Python的时候未使用它。
向python添加证书
Python 的 CA 证书处理有点奇怪。大多数的Python CLI可能会使用requests库,它会使用自己的CA bundle,然后也会查看另一个certifi库包含的CA bundle,但是它使用了Mozilla的bundle。为了信任我们的CA,我们可以将它添加到与certifi一起包含的Mozilla bundle中。
需要注意的是,Python解释器的版本也会影响试验结果, 所以如果你使用的是虚拟环境,你需要确保使用正确版本的Python运行以下命令。
首先,我想验证 az 如何调用 Python,以及它使用的是哪个版本。
$ head `which az`
#!/usr/bin/env bash
/usr/local/Cellar/azure-cli/2.0.74/libexec/bin/python -m azure.cli "$@"
因此,az
它会调用自己内置的Python解释器,该解释器已在homebrew上安装。
首先,为了确定导入证书的位置,我们导入certifi
并运行certifi.where()
命令。
$ /usr/local/Cellar/azure-cli/2.0.74/libexec/bin/python -c "import certifi; print(certifi.where())"
/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/certifi/cacert.pem
该cacert.pem
文件是PEM格式的所有受信任的CA证书列表。要添加Burp CA,我们只需将PEM附加到该文件中即可:
cat ~/certs/burpca.pem >> /usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/certifi/cacert.pem
将Burp CA添加到Mozilla bundle中,我们现在就可以代理az命令了!
$ HTTPS_PROXY=http://localhost:8080 az group list
现在我们想要运行的任何 az 命令都可以进行查看或者修改。
例四 代理Node js
在这个例子中,我希望能够代理到来自NPM包的流量,以便与https://zeit.co进行交互。
我已经使用如下命令行安装了工具。
npm i -g now@latest
登录后,我可以查看我当前的部署:
运行:
$ HTTPS_PROXY=http://localhost:8080 now list
发现服务器返回了数据,Burp中并没有出现任何内容。看来,Node并不支持全局代理设置,但这并不意味着我们不能强行设置。
首先,我们来看看now命令调用了哪些内容:
$ which now
/Users/RonnieFlathers/.nvm/versions/node/v12.15.0/bin/now$ head -c100 `which now`
#!/usr/bin/env node
require('./sourcemap-register.js');module.exports=function(e,t){"use strict";var%
now程序是一个JS文件,位于Node的bin目录中,我们也可以直接用node调用那个文件来运行now命令。
$ node /Users/RonnieFlathers/.nvm/versions/node/v12.15.0/bin/now -v
Now CLI 17.0.3
17.0.3
虽然node没有全局代理的支持,但是一个名为global-agent的项目解决了这个问题,它可以在Node项目中设置一个可配置的代理。要使用它,我们使用npm将它安装到我们当前的目录中。
$ mkdir nodeproxy
$ cd nodproxy/
$ npm install global-agent
该模块使用了GLOBAL_AGENT_HTTP_PROXY环境变量,所以我们必须先使用命令设置环境变量,现在我们可以将项目注入到now包中。
$ export GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8080
$ node -r 'global-agent/bootstrap' `which now`
现在要为Burp添加SSL证书。
为Node添加证书
这其实比Python简单不少。Node命令的一个环境变量,叫做NODE_EXTRA_CA_CERTS。如果要把我们的Burp证书加载为可信的,我们只要把这个环境变量导出,然后指向Burp的PEM文件就可以了。
export NODE_EXTRA_CA_CERTS=$HOME/certs/burpca.crt
export GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8080
node -r 'global-agent/bootstrap' `which now`
现在可以用了! 我们可以在Burp中查看now包的流量。
例五 代理Go程序
越来越多开发者开始将静态的Go二进制文件以CLI形式发布。因为Go是一门很优秀的语言。Go设置代理非常简单,因为每个Go程序都能使用环境变量http_proxy和https_proxy。
在这个例子中,我将代理Github的hub工具(对于命令行用户,GitHub提供了名为`hub命令行工具,对Git进行了简单的封装。该项目在GitHub上的地址为:https://github.com/defunkt/hub )。下载并安装了hub后,在Git repo中,我可以像这样检查看我当前的CI状态。
$ hub ci-status
success
由于hub是一个Go语言开发的二进制程序,所以我只需要设置代理的参数即可。
$ https_proxy=127.0.0.1:8080 hub ci-status
Error fetching statuses: Get https://api.github.com/repos/ropnop/blog.ropnop.com/commits/89c7759ac344d5a412dc63ce3f053fc3f06d09a0/status: x509: certificate signed by unknown authority
而这里我们得到一个SSL错误的返回结果。
设置GO的信任证书
不幸的是,Go没有提供任何渠道来设置信任外界的CA证书。对于每个平台,Go都会在操作系统上寻找受信任的CA证书。
这时,你必须将Burp证书添加到你的系统的密钥链中。之后,Go就会检查到它,你就可以代理Go语言的二进制文件了。
$ https_proxy=127.0.0.1:8080 hub ci-status
success
总结
希望这些内容对你能有帮助。Python、Node和Go囊括了我使用的绝大多数CLI工具,当然还有其他工具。无论你是在对一个应用或CLI进行渗透测试,还是只是在开发中想进行调试,学会拦截HTTP流量并对其进行分析真的很重要。
你没见过的Burpsuite骚操作——拦截CLI工具的流量相关推荐
- 杀疯了!通过游戏“元宇宙”,Deepmind让AI学会玩各种没玩过的游戏,骚操作不断...
来源:大数据文摘本文约1800字,建议阅读7分钟 面对任务一看就会的AI,离我们心里的通用人工智能还有多远呢? 对于AI来说,完成一个单一任务或许相对简单,但是涉及到合作和博弈时,AI往往显得有些愚蠢 ...
- 你没玩过的全新版本!Win10这些骚操作你知多少
你没玩过的全新版本!Win10这些骚操作你知多少 [PConline技巧]不知不觉,Win10与我们相伴已经整整四个年头了,从最开始的组团抗拒到现在的默默接受,个中滋味相信谁心里都有个数.近日微软开始 ...
- C#中的9个“黑魔法”与“骚操作”
C#中的9个"黑魔法"与"骚操作" 我们知道 C#是非常先进的语言,因为是它很有远见的"语法糖".这些"语法糖"有时过于 ...
- 数据治理项目失败,90%都是被这29条骚操作搞垮的
数字化时代,数据作为新的生产要素受到了各界前所未有的重视. 随着数据越来越多,怎么管好.用好数据,让数据发挥价值,成为了很多企业的一个难题,而且还是一个必选题! 这就引出了数据治理. 有效的数据治理可 ...
- 20 个短小精悍的 pandas 骚操作
本次为大家整理了一个pandas骚操作操作的大集合,共20个功能,个个短小精悍,一次让你爱个够. 1. ExcelWriter 很多时候dataframe里面有中文,如果直接输出到csv里,中文将显示 ...
- 苹果发布新款iPad Pro!就换了个「芯」,转换器骚操作笑翻网友
[新智元导读]苹果iPad系列上新了,但也没有完全上新. 昨晚,苹果悄悄地发布了最新的iPad和一系列新配件. 一大早,新款iPad就连上N条热搜. 为啥这么悄咪咪的呢?因为这次,苹果没有抬出什么让人 ...
- 揭秘职业骗保师月入十万的骚操作
有这么一群人,只要看到商品七天无理由退款退货,就会大量下单,难道这就是传说中的土豪?还是有什么不可告人的秘密呢? 莫慌,今天我们就来揭秘这群人的捞钱方式. 杭州的某宝卖家小徐,最近遇到了一单奇怪的生意 ...
- 法国队夺冠!央视转播背后的骚操作
法国队夺冠!央视转播背后的骚操作 文 | 史中 2018 世界杯,法国队第二次夺冠了.(我从没见过法国队夺冠,上次法国队夺冠的时候,你中哥还没出生呢.) 我和几位朋友,是在不同地方看的法国和克罗地亚这 ...
- 各种骚操作试试 V7变回V5试试,直接变胖FAT,刷。。。2020-10-26
本文稿原创,未经许可授权,不得转载!!!! 机器买回来还是很兴奋的... 查资料,看说明,学技术....终于!从廋变成胖的了....兴奋! 买了二个,一个胖一个廋,两全了,接入AC,配置,一开始不成功 ...
最新文章
- 2013大数据全球技术峰会观后感
- java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法
- 大学python教材实验七字典与集合答案_2018-08-28 day7 python基础 字典和集合(含作业)...
- 新同事,git又报错Please move or remove them before you merge
- Django--Forms组件使用
- android 外部存储列表,如何获取Android设备的已安装外部存储列表
- Oracle二三事之 12c 可插拔数据库PDB
- 苹果ll是什么版本_如何鉴别自己的iPhone手机,是什么版本呢?国行,美版,还是韩版?...
- SourceTree 密码填写正确但是拉取显示密码错误解决
- 【数据库学习】——从零学习SQL语句(含SQL数据类型、SQL语句实例操作)
- 海康威视ivms-4200(v2.8.2.2_CN)监控软件安装教程
- 锂电池的充电原理以及快充原理
- VisualStudio运行的时候mian已在xxx中定义
- Python中的盆地跳跃(Basin Hopping)优化
- UWB定位算法比较TDOA和TWR究竟哪个好
- springboot学习中的错误
- c语言错误c2142,应数计算机程序设计(C语言)实验选编.docx
- 服务器常见错误代码500、501、502、503、504、505
- 面试题之优惠券超发怎么测试?
- linux 进程间通信方式
热门文章
- CentOS 挂载硬盘,适用于fdisk找不到硬盘的场景
- alertmanager接微信
- 42个字,说尽人生六大悔事
- mysql删除重复数据只保留一条_【SQL】mysql删除重复数据只保留一条
- 慧荣发布首款单芯片SSD:主控集成3D闪存
- Learning a Similarity Metric Discriminatively, with Application to Face Verification.
- 数据处理(6):Arcmap10.8加载天地图在线地图
- Python读取csv、xlsx文件并做柱状图
- Code-Server搭建——让平板也可以写代码
- Excel函数(3):查找引用