介绍

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使用-kwget使用--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工具的流量相关推荐

  1. 杀疯了!通过游戏“元宇宙”,Deepmind让AI学会玩各种没玩过的游戏,骚操作不断...

    来源:大数据文摘本文约1800字,建议阅读7分钟 面对任务一看就会的AI,离我们心里的通用人工智能还有多远呢? 对于AI来说,完成一个单一任务或许相对简单,但是涉及到合作和博弈时,AI往往显得有些愚蠢 ...

  2. 你没玩过的全新版本!Win10这些骚操作你知多少

    你没玩过的全新版本!Win10这些骚操作你知多少 [PConline技巧]不知不觉,Win10与我们相伴已经整整四个年头了,从最开始的组团抗拒到现在的默默接受,个中滋味相信谁心里都有个数.近日微软开始 ...

  3. C#中的9个“黑魔法”与“骚操作”

    C#中的9个"黑魔法"与"骚操作" 我们知道 C#是非常先进的语言,因为是它很有远见的"语法糖".这些"语法糖"有时过于 ...

  4. 数据治理项目失败,90%都是被这29条骚操作搞垮的

    数字化时代,数据作为新的生产要素受到了各界前所未有的重视. 随着数据越来越多,怎么管好.用好数据,让数据发挥价值,成为了很多企业的一个难题,而且还是一个必选题! 这就引出了数据治理. 有效的数据治理可 ...

  5. 20 个短小精悍的 pandas 骚操作

    本次为大家整理了一个pandas骚操作操作的大集合,共20个功能,个个短小精悍,一次让你爱个够. 1. ExcelWriter 很多时候dataframe里面有中文,如果直接输出到csv里,中文将显示 ...

  6. 苹果发布新款iPad Pro!就换了个「芯」,转换器骚操作笑翻网友

    [新智元导读]苹果iPad系列上新了,但也没有完全上新. 昨晚,苹果悄悄地发布了最新的iPad和一系列新配件. 一大早,新款iPad就连上N条热搜. 为啥这么悄咪咪的呢?因为这次,苹果没有抬出什么让人 ...

  7. 揭秘职业骗保师月入十万的骚操作

    有这么一群人,只要看到商品七天无理由退款退货,就会大量下单,难道这就是传说中的土豪?还是有什么不可告人的秘密呢? 莫慌,今天我们就来揭秘这群人的捞钱方式. 杭州的某宝卖家小徐,最近遇到了一单奇怪的生意 ...

  8. 法国队夺冠!央视转播背后的骚操作

    法国队夺冠!央视转播背后的骚操作 文 | 史中 2018 世界杯,法国队第二次夺冠了.(我从没见过法国队夺冠,上次法国队夺冠的时候,你中哥还没出生呢.) 我和几位朋友,是在不同地方看的法国和克罗地亚这 ...

  9. 各种骚操作试试 V7变回V5试试,直接变胖FAT,刷。。。2020-10-26

    本文稿原创,未经许可授权,不得转载!!!! 机器买回来还是很兴奋的... 查资料,看说明,学技术....终于!从廋变成胖的了....兴奋! 买了二个,一个胖一个廋,两全了,接入AC,配置,一开始不成功 ...

最新文章

  1. 2013大数据全球技术峰会观后感
  2. java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法
  3. 大学python教材实验七字典与集合答案_2018-08-28 day7 python基础 字典和集合(含作业)...
  4. 新同事,git又报错Please move or remove them before you merge
  5. Django--Forms组件使用
  6. android 外部存储列表,如何获取Android设备的已安装外部存储列表
  7. Oracle二三事之 12c 可插拔数据库PDB
  8. 苹果ll是什么版本_如何鉴别自己的iPhone手机,是什么版本呢?国行,美版,还是韩版?...
  9. SourceTree 密码填写正确但是拉取显示密码错误解决
  10. 【数据库学习】——从零学习SQL语句(含SQL数据类型、SQL语句实例操作)
  11. 海康威视ivms-4200(v2.8.2.2_CN)监控软件安装教程
  12. 锂电池的充电原理以及快充原理
  13. VisualStudio运行的时候mian已在xxx中定义
  14. Python中的盆地跳跃(Basin Hopping)优化
  15. UWB定位算法比较TDOA和TWR究竟哪个好
  16. springboot学习中的错误
  17. c语言错误c2142,应数计算机程序设计(C语言)实验选编.docx
  18. 服务器常见错误代码500、501、502、503、504、505
  19. 面试题之优惠券超发怎么测试?
  20. linux 进程间通信方式

热门文章

  1. CentOS 挂载硬盘,适用于fdisk找不到硬盘的场景
  2. alertmanager接微信
  3. 42个字,说尽人生六大悔事
  4. mysql删除重复数据只保留一条_【SQL】mysql删除重复数据只保留一条
  5. 慧荣发布首款单芯片SSD:主控集成3D闪存
  6. Learning a Similarity Metric Discriminatively, with Application to Face Verification.
  7. 数据处理(6):Arcmap10.8加载天地图在线地图
  8. Python读取csv、xlsx文件并做柱状图
  9. Code-Server搭建——让平板也可以写代码
  10. Excel函数(3):查找引用