内容
内容相当简单。Theodo的工资单外包给了另一家公司:Silaexpert。我们已经获得了访问权限,以及一个访问假期和工资表的url。
一切都从这个环节开始:http://www.silaexpert01.fr/silae.
这个链接在Chrome、Firefox、Safari上无法打开,在WindowsS10系统中也无法运行。
似乎只能在windows7的IE浏览器中打开,这对于所有在Theodo中运行Linux或OSX的开发者来说都不是一个好消息。
黑盒
我们可以从微软下载免费的虚拟机:https://developer.Microsoft.com/en-us/Microsoft-edge/tools/VMs/。为此,VM和IE9将在Windows7上更好地工作。
因此,如果您有一个虚拟机并且可以运行它,您就可以访问该url。但是,它正在下载一个胖客户端,并且已经开始了某种安装过程。
最后,您可以登录并下载您的最终工资单。然后下个月再重复这个过程。如果你重置虚拟机,它也不会工作,因为你没有许可证。
正式开始
如果你想直接从你自己的Mac或Linux电脑上下载文件而不通过虚拟机。你必须向远程服务器发送正确的请求(具体地址我还不知道,可能已经被下载的胖客户端代码加密了)。
因此,让我们先嗅一下所有来自虚拟机的网络流量。
您可以在自己的平台上使用任何嗅探工具:
可以在大多数系统中使用的Wireshark可能有些过头了。
查尔斯代理,可用于Mac。
Mitm代理,喜欢用python的人可以选择。
Fiddler,用于windows(试用版可用于Mac和Linux)。
这里以代理为例:
1.首先在主机上启动HTTP代理。输入代理,然后设置代理,注意使用的端口。
2.启动虚拟机
1)打开命令行并运行ipconfig/all,注意默认网关IP。这是你的主机IP。
2)打开IE浏览器,找到互联网选项>;连接>:局域网设置,然后设置代理服务器的IP和端口。
3)完成了!现在,您可以在Charles上看到VM的所有通信。
现在,如果你登录胖客户端,下载一个工资表,应该有足够的数据来考虑下一个问题。
数据分析
现在我们有了客户机和服务器之间完整的信息交换。
首先要注意的是,并非所有的通信都由SSL/TLS加密。真的是很容易的数据!也就是说,我们仍然可以通过虚拟机上的代理服务器生成假CA来嗅探加密通信。
我们也会注意到这些事情:
1.单个web服务端点:
Http://www.silaexpert01.fr/SILAE/IWCF/IWCF.svc,所有的请求都会转到这个网址。
2.使用的协议是SOAP,没有任何web安全模块。
3.登录请求似乎不同于所有其他请求,尽管它们看起来都很相似。
4.还有一堆base64加密的数据。
你可以尝试解码这些base64加密的数据,但是解码后得到的只是一堆不可读的数据,可能只是加密的二进制数据。
登录请求
对服务器的第一个请求只包含一个有趣的数据,它是一个键K:
这个密钥k是客户端使用的RSA公钥。响应还包含一个密钥,使用相同的格式和某种类型的标识符$USR。该密钥是服务器使用的RSA公钥。
我们刚刚见证了RSA的密钥交换。RSA不能用于加密大量数据。数据大小取决于所使用的填充技术。这里,我们使用2048位的密钥,最多可以加密245个字节,不能再多了。
常见的技术是用公钥/私钥RSA密钥加密对称密钥,然后用对称密钥加密交换过程。
很好,现在您已经有了客户端和RSA密钥,下一步是什么?
这个问题问得好。接下来要做的是解码第二条消息的base64二进制。
echo "AQABAAAOE6jZqMmDnFHefXddjDq...W5A=" | base64 -D | hexdump -C如果您多次这样做,那么在发出许多登录请求后,您可能会发现这样的场景。
前几个字节都是0100010000。这在base64中可以直接看出来:前几个字母是“AQABAA”。有趣的是,00010000是二进制表示,换算成十进制就是256。
另一个我们可能注意到的是偏移量261(1+4+256)。字节始终为20000000,十进制为32。
这是天才行动的一部分。常见的对称加密系统是AES256,它使用32字节的初始化向量(IV)。
简单总结一下:
第一个字节总是01。
接下来的4个字节是AES密钥的大小:256个字节。
接下来的256个字节代表实际的AES密钥,用RSA公钥K加密,将在第一阶段发送到服务器。
接下来的4个字节是IV的大小:32个字节。
接下来的32个字节定义IV。
剩下的就不得而知了。可以用AES密钥加密的登录名/密码。
虽然只有一个AES,但是有很多变体。你可以尝试所有这些变体,但这需要很长的时间和大量的精力。
到目前为止,我们还没有用完所有的筹码。还记得那个胖客户吗?这是我们加密问题的关键。
客户端使用NET语言,当然java也是可以的。
让我们来看看这段代码。您可以读取其他代理请求来获取要访问的url。exe。导入反编译的。exe(我是试用版的。WindowsVM中使用的Netreflector),然后寻找一些有趣的代码,可惜什么都没找到。
除了这个小DLL,Sila.WCFDLL.dll。导出它,然后重新导入进行反编译。现在,所有安全内容都将由串行化器/去串行化器处理。
我们必须获得正确的AES。它使用由AES加密的Rijndael256变量和一个自定义序列化程序。
获取信息
我们不能解密任何AES密钥,因为解密需要私钥RSA。获得这个AES密钥的唯一方法是编写一个MITM服务器来拦截每个客户端和服务器之间的请求。
一旦服务器写好了(https://github.com/kraynel/sila-cli/blob/master/server.js),固定缓冲区/字节转换/RSA/mcrypt的所有问题都解决了,就可以重新加载你的VM,重新登录了。
接下来,使用Charlesproxy的“MapRemote”选项重定向http://www.silaexpert01.fr/SILAE/IWCF/IWCF.svc和您的本地端点之间的所有通信,这将依次解密通信并公开真正的端点。
现在我们已经以二进制形式解密了所有请求。
序列化/反序列化
该请求不可直接读取。它们不是使用xml序列化,而是使用序列化技术自定义编写的。但现在我们有了代码,可以仔细研究了。
现在,我们得到了所有的请求及其响应,以及一个可读的JS。通过使用不同的参数,我们可以发现两个有趣的请求:
采购公告,其中列出了可用的工资单;
下载工资单的pdf文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)