在Glink中有一可获得远程shell的方法
原理是通过domainlogin登录后,发送domaincmd协议来执行shell指令
某些gde被修改了其登录验证逻辑,绕过了验证流程,从而可以直接执行shell指令。
其源码中验证函数看起来是使用了证书验证,不过这些都是硬编码在程序中,明白人或许可以通过其源代码来获得远程shell权限。
下面介绍如何通过IDA更改glinkd来屏蔽domainlogin协议。Domaincmd修改原理一样,自行摸索
首先查看这两个协议中源码的处理函数

这里有一个判断,if(data!=nonce) ,如果不相等,则会进入代码块关闭当前链接,我们可以利用这点,修改glinkd,让该函数从开头跳转到此代码块,关闭对方的连接。
利用IDA来打开glinkd,由于符号被移除,无法通过函数名来查找到对应函数,但是可以在其中找到DomainLogin的虚表,通过其虚表地址中记录的函数与原代码对比,找到这个Process函数。
先通过搜索找到其vtable定义处,里面是所有虚函数地址

vtable:

随后点击每个函数查看代码,通过对比发现 0811F8DC 这个地址就是Process函数
此外源代码中,还有一点可以利用的地方就是记录了日志,其中使用了字符串“DomainLogin failed”,这个可以帮助我们快速定位到关闭连接的代码块,通过搜索发现以下信息

发现其代码块为loc_811FF00。现在我们回到函数开始处修改

这里修改跳转不能破坏栈帧平衡,需要在合适的位置跳转,否则引发段错误,程序会被终止!
选图中所示mov edx,[ebp+arg_0] 这行,再点击菜单栏中edit ->patch program->assemble...
在弹出的框中填入 jmp loc_811FF00 后点击OK

修改后如下图所示:

后面的代码无需管了,因为跳转的代码块中ret了,永远不会被执行。
现在修改完后选择edit->patch program -> apply patchs to input file 将修改后的内容同步到原文件。恭喜,你已经成功屏蔽了domainlogin协议!
上面示例的版本为155,通过010Editor快速修改,其文件偏移量为0xD78E8,将该位置对应的5个字节修改为 E9 13 06 00 00 即可!
评论已关闭!