「JavaSnoop使用入门」

  CREATED BY JENKINSBOT

Applet和Java Web Start应用程序默认配置运行在严格的沙箱中。显然内部类和私有域的修改通常是不被允许的。这意味着我们必须将安全性“关闭”。JavaSoop中提供的startup.bat文件实现了这个需求,我们需要使用startup.bat来运行JavaSnoop。

该批处理文件将实现以下功能:
1.检查环境变量JAVA_HOME的值是否包含JDK1.6的路径
2.关闭JavaSnoop的安全性
3.启动JavaSnoop工具
4.退出工具后,再次将Java安全性恢复为安全浏览

将JavaSnoop”附加”到进程中

JavaSnoop工具提供了两种注入进程的方式。

附加到现有进程

我们可以通过从可用的正在运行的进程列表中选择一个已经运行的进程来注入JavaSnoop.

创建新的进程

我们也可以通过选择要拦截的JAR文件来启动一个新进程。

工具主界面介绍

JavaSnoop工具的主界面分为四部分,如下图所示:

第一部分

在这部分中,我们选择需要hook的类或方法。界面「Add New Hook」按钮来添加一个新的hook。然后我们可以从列表中提供的类里添加一个方法,如下图所示:

第二部分

本部分提供了用于设置截取方法调用的各种选项的功能。 我们可以设置正则表达式条件来匹配和拦截来方法调用的内容。如下图所示:

第三部分

这一部分针对Hook提供了各种选项提供了以下各种选项:
将parameters / stacktrace打印到控制台或特定文件
运行自定义脚本
篡改参数
修改返回值
暂停程序

第四部分

来自目标应用程序的Hook修改内容和反编译类的输出显示在此区域中。

使用JavaSnoop拦截来自基于JAVA的应用程序的数据

在本文中,我们将介绍两个基于Java的示例应用程序,并学习如何拦截JavaSnoop工具中的数据:
1.拦截浏览器中运行的applet的数据。
2.拦截基于JAVA的胖客户端的数据。

1.拦截浏览器中运行的Applet的流量。

Java小程序是以Java字节码的形式传递给用户的小程序。Java小程序可以是Web页面的一部分,并且由Java虚拟机(JVM)在与Web浏览器分开的过程中执行,也可以在Sun的AppletViewer中运行(AppletViewer是用于测试applet小程序的独立工具)。

很难拦截作为网页一部分的applet小程序的数据。普通代理工具(如Burpsuite和Paros)无法拦截/修改来自这些applet程序的流量。下面我们演示一个使用JavaSnoop工具来拦截applet小程序的例子。

步骤1:我们将一个登录小程序嵌入到Web浏览器中,小程序接收用户登录的数据并将其转发到服务器进行身份验证。 为了拦截来自Java Applet的流量,我们使用JavaSnoop来拦截流量
下面的图片展示了实例applet小程序:

步骤2:由于我们已经在浏览器中打开了Java Applet,因此我们在JavaSnoop工具中选择「An existing process」选项,将代理程序附加到运行的Applet小程序中,如下图所示:

步骤3:通过JavaSnoop连接到运行的小程序,然后我们可以选择想要拦截数据的类相应的方法。我们来选择hook的方法所需的类,如下图:

步骤4:我们然后选择类的方法,如下图所示:

步骤5:下面的屏幕截图显示了包含hook方法的JavaSnoop接口以及拦截Java applet数据的方法和条件。

步骤6:一旦我们在“登录”小程序上提交用户登录数据,该工具将进行拦截,并且会弹出一个窗口,用于编辑和转发拦截的数据。

2.拦截基于JAVA的胖客户端的数据

在上面的部分中,我们学会了拦截Java applet小程序的数据,下面我们学习拦截Jar应用程序的流量。例如,我们尝试拦截Burp代理工具的数据。

由于JavaSnoop可以篡改应用程序的数据跟流量,因此找出正确Hook的类跟方法成为评估的难点。通过代码审计的方式了解程序的逻辑结构再好不过了,但是在没有拿到源码的情况下,很难正确的hook相关的方法。 我们可以选择我们怀疑有可能是需要Hook的类跟方法,可以通过名称或类进行搜索,并且可以使用JavaSnoop的”Canary Mode”模式。这种模式在较大的应用中非常有用,因为较大的应用中需要hook的类跟方法查找起来比较困难。我们可以通过在JavaSnoop工具中拦截Burp来了解Canary Mode模式。

下面的图片显示了加载到JavaSnoop工具中的大量Burp的类。我们很难从里面识别用于Hook的类和方法。

即使在搜索和猜测之后,面对大量的类也很难找到hook的方法。攻击者可能会对数据进入的UI界面感兴趣,我们可以通过跟踪UI界面传递过来的数据来确定需要hook的方法。

通过跟踪数据来定位需要hook的方法是Canary Mode模式的目的,这是JavaSnoop独特而有用的功能。在此模式下,我们可以定义要通过系统跟踪的一些“canary”值。这应该是通过表单域或者属性文件进入应用程序的一些独特的标识。

选择此值后,即可开始。然后JavaSnoop将删除当前正在使用的其他钩子,然后将监听JVM中每个参数为我们设定的canary值的所有方法。

每次发现canary被发送到一个方法时会将一个chirp发送回JavaSnoop,让用户知道正在运行canary值的方法。在某种程度上,这相当于一种非常原始,笨拙的数据流分析形式。

测试的方法步骤如下:
1.将JavaSnoop代理注入Burp进程
2.在JavaSnoop工具中打开Canary模式界面
3.在输入字段中输入要搜索的字符串
4.从界面启动canary模式
5.从Google浏览器向Burp发送请求,JavaSnoop工具将开始查找传递输入字符串(例如Google.com)的方法列表,然后我们可以勾选这些方法进行测试,如下图所示:

在本文中,我们看到了在评估基于Java的胖客户端 应用程序时可能面临的缺点,并且还看到了如何使用JavaSnoop工具来克服这些困难。

参考文献

使用JavaSnoop测试Java应用程序: http://baijiahao.baidu.com/s?id=1569587769445793&wfr=spider&for=pc