通常来说,使用 burp 截取数据,需要两步:
1、让命令行工具代理流量到 burp
2、让命令行工具信任 burp 的证书(CA)或者忽略信任
curl 和 wget 是 linux 下默认的 web 页面访问工具
需要设置全局变量,将本地默认代理设置为 burp 的代理服务地址和端口,可以使用如下命令:
export http_proxy=localhost:8080
export https_proxy=localhost:8080
curl ifconfig.io
wget -O /dev/null ifconfig.io
也可以连在一起使用:
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
最终结果如图:
如果不信任的话,在使用 curl 和 wget 访问 https 网站时报错,如图:
对于这种情况,有两种解决办法:
1、禁用证书信任验证
curl 可以使用 -k
参数,wget 可以使用 --no-check-certificate
2、配置系统信任 Burp 的 CA
我们需要访问 https://localhost:8080 下载 Burp 的证书,然后执行下面的操作:
mkdir ~/certs
wget -O ~/certs/burpca.der http://localhost:8080/cert
cd ~/certs
openssl x509 -inform DER -in burpca.der -out burpca.crt
如果使用的是 mimtproxy
证书需要放在目录 ~/.mitmproxy
下
在 Moc OSK 系统,只需要双击下载的 der 文件,让它受机器上所有用户的信任,导入后,搜索 "PortSwigger" 并打开证书,在 SSL 选项中选择 Always Trust
在 windows 系统,同样双击 der 文件,选择安装证书,选择受信任的根认证机构来安装和信任 Burp 的 CA:
在 Linux 下,信任证书的存储位置在 /usr/share/ca-certificates
,复制 burpca.crt 到该目录下,然后运行:
sudo update-ca-certificates
然后不需要使用跳过验证的参数就可以用 burp 截取到 wget 和 curl 的流量了:
通常 jar 程序是没有设置代理的选项的,但是如果遇到这样的情况该怎么办?
在启动 jar 程序时可以使用 JVM 的一些属性来使用代理,如:
http.proxyHost
http.proxyPort
https.proxyHost
https.proxyPort
http.nonProxyHosts
随便找一个 jar 的程序来测试,比如使用 acli
获取云实例上的 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
可以在指定 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 的错误:
Java 实际上是使用自己到密钥存储,所以还需要添加证书。
默认的证书存储位置在 JAVA_HOME/lib/security/cacerts,如果不知道 JAVA_HOME 的位置,可以使用下面的命令查询:
java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home'
java.home = /Users/RonnieFlathers/.sdkman/candidates/java/11.0.3-zulu
可以使用 Java 的 keytool 程序来为 Java 的密钥存储添加证书,该程序所在位置 $JAVA_HOME/bin/keytool
,导入命令如下:
$JAVA_HOME/bin/keytool -import -alias burpsuite -keystore $JAVA_HOME/lib/security/cacerts -file $HOME/certs/burpca.crt -trustcacerts
提示的密钥存储密码,默认是 changeit
,然后是否信任证书选择 yes
:
现在,在来执行上面的命令,可以看到数据:
以上方法对于测试一些二进制文件的数据请求方式有很大的帮助,能够了解其对外发送数据包的情况,来猜测二进制文件的执行原理,欢迎试用。