一、 为什么我要来调试这款国产PM3客户端以及后续:
-
这款客户端每次运行都必须联网进行认证,通过认证才能使用。
-
作者后续更新的版本不对以前的用户开放。
-
自己好奇......
一、 下面开始整个过程,因为是事后再来写的文章,所有有些截图是直接从另外渠道获取的。
- 软件打开界面如下,需要输入购买的订单号才能进入主界面:
使用OD加载客户端,从入口地址来看,软件已加壳无法直接查看到字符串信息。
- 直接运行让程序跑起来,然后Ctrl-G,跳转到00401000,再搜索字符串即可看到程序的字符串信息了。
通过字符串信息分析、判断,code 608、code 601、code 602、code 603、code 604极有可能是服务器对登陆返回的验证码,其中608下还有data.taken和data.user_data,则为正确返回信息的可能性非常大。
- 双击608返回到代码段,当前CALL的前面下断点。然后点击程序的登录按钮,成功在我们的断点断下来,可在堆栈中查看到当前服务器的返回代码为601
手动修改堆栈中的值为608,继续单步运行发现,程序执行到004013E4时主界面成功加载出来。
- 接着我准备对程序进行修改,让它跳过网络验证。当然可以修改上面的验证代码,让程序执行的逻辑流程按照验证成功的流程进行执行。但是我这里想要的是跳过整个验证过程,运行程序后直接进入到主界面。我们再查看程序的字符信息,发现程序在加载验证界面前曾经联网进行了版本检查:
双击来到代码段,往前找到当前这个CALL的开头处:
其实之后执行的版本检测和联网验证都不是我们想要的内容,所以直接修改这里的代码,在CALL压栈结束后直接跳转到加载程序主界面的代码去:
根据以上代码进行修改保存后运行程序已跳过版本检测和网络验证,直接进入到程序主界面。
- 现在客户端已经达到我要的修改结果,但是我还想再继续研究下,我也想要在作者以后更新版本后能拿到新的版本。因为程序要联网进行版本检查,要进行认证,所以很可能是用的http协议,先看看检查版本的地方。来到之前找到的检查更新的地方,动态跟踪一下,找到了验证发送的代码:
将数据拼接一下后为:
测试发现参数id存在注入漏洞,sqlmap跑一波:
查询下管理员密码:
salt加密后的md5,目测解不出来,并且不支持到服务器的登录地址
继续翻看数据库中,在日志中找到了服务器平台搭建软件的官网地址:
访问官网,下载demo,本地搭建了一个,得到了后台登录地址:
翻看了下管理员日志,看到有登录失败的信息
猜测正确的密码估计也就是shop,2500中间或者后面多加个字母或数字,或者首字母大写什么的。最后还让我试出来了,成功登录进去了
利用模版上传功能,在官网代码的默认模版中插入了一句话,覆盖原始模版并应用。菜刀连一下:
拿到shell,翻看了下,是景安的虚拟主机,没有漏洞拿不到root。。。
上传了adminer,以后直接操作数据库,在数据库中可直接看到软件的下载地址,目的达到
收工。。。