开发病毒、木马、和其他恶意软件,或者是创建和使用各种自动化脚本进行攻击或防御。黑客需要深厚的编程知识来理解和挖掘软件、硬件或网络系统中的漏洞,进而利用这些漏洞进行攻击或防御。编程语言既是一种工具也是一种武器,黑客通过精通一种或多种编程语言来提高其技能水平,能够更加精准和高效地达到其目的。
面对域名劫持,我们该如何确保网站与访客的安全?
概念解析:域名劫持,也称为DNS劫持,是指通过非法手段取得对域名控制权限,导致域名解析到错误的IP地址,从而使用户无法正常访问原定网站或被导向恶意网站。
潜在危害:一旦域名被劫持,不仅影响网站的正常运营,还可能导致个人信息泄露、数据丢失,甚至进一步的网络安全问题。
Q1: 域名劫持和网络钓鱼有何不同?
A1: 域名劫持主要是通过非法手段控制域名解析,使访问者被引导至错误或恶意的网站,而网络钓鱼则是通过制作假冒的网站或邮件来骗取用户的个人信息,如账号密码、信用卡信息等,两者都涉及网络安全,但手法和目的有所不同。
Q2: 如何简单检测自己的网络是否遭受DNS劫持?
A2: 可以使用在线DNS检测工具如 DNSLeakTest 或其他网络安全服务进行检测,这些工具可以帮助检查你的网络请求是否被不正确地解析到了非预期的IP地址,从而识别是否存在DNS劫持。 @yy8321
概念解析:域名劫持,也称为DNS劫持,是指通过非法手段取得对域名控制权限,导致域名解析到错误的IP地址,从而使用户无法正常访问原定网站或被导向恶意网站。
潜在危害:一旦域名被劫持,不仅影响网站的正常运营,还可能导致个人信息泄露、数据丢失,甚至进一步的网络安全问题。
Q1: 域名劫持和网络钓鱼有何不同?
A1: 域名劫持主要是通过非法手段控制域名解析,使访问者被引导至错误或恶意的网站,而网络钓鱼则是通过制作假冒的网站或邮件来骗取用户的个人信息,如账号密码、信用卡信息等,两者都涉及网络安全,但手法和目的有所不同。
Q2: 如何简单检测自己的网络是否遭受DNS劫持?
A2: 可以使用在线DNS检测工具如 DNSLeakTest 或其他网络安全服务进行检测,这些工具可以帮助检查你的网络请求是否被不正确地解析到了非预期的IP地址,从而识别是否存在DNS劫持。 @yy8321
添加域名(虚拟主机),再上传程序到网站根目录,并给予755权限,程序下载:Github。然后新建数据库,打开域名,填入数据库信息,管理员密码等进行安装 @yy8321
工程防病毒逃避
经过多年绕过防病毒软件的经验,如果我们可以与社区分享任何见解,那就是恶意软件检测几乎总是基于字符串、API 钩子或两者的组合。
即使对于实现机器学习分类器的产品(如 Cylance),没有字符串、API 导入和可挂钩 API 调用的恶意软件也肯定会像足球一样穿过 Sergio Rico 的防守。
Meterpreter 有数千个字符串,API 导入不会以任何方式隐藏,并且诸如“WriteProcessMemory”之类的敏感 API 可以通过用户空间 API 钩子轻松拦截。因此,我们需要以自动化的方式补救,这产生了两个潜在的解决方案:
源到源代码重构
LLVM 在编译时会对代码库进行混淆。
后者将是首选方法,许多流行研究也得出了相同的结论 [2]。主要原因是转换过程只需编写一次,然后就可以重复使用,而不受软件编程语言或目标架构的影响
但是,这样做需要能够使用 Visual Studio 以外的编译器来编译 Meterpreter。虽然我们在 2018 年 12 月发布了一些工作来改变这种情况,但一年多后,官方代码库的采用仍然是一个持续的过程。
与此同时,我们决定实施第一种方法。在彻底审查了源代码重构的最新进展后,libTooling(Clang/LLVM 工具链的一部分)似乎是解析 C/C++ 源代码并对其进行修改的唯一可行候选方案。
注意:由于代码库严重依赖 Visual Studio,Clang 将无法解析 Metepreter 的大部分内容。但是,仍然可以利用这一成功率绕过目标防病毒软件。在这里,我们可能拥有源到源转换相对于编译时转换的唯一优势:后者要求整个项目编译时没有任何错误。前者可以抵御数千个编译错误;你最终会得到一个不完整的抽象语法树,这完全没问题。
字符串混淆
在 C/C++中,一个字符串可能位于许多不同的上下文中。libTooling并不是真正令人愉快的玩意,所以我们应用了帕累托定律,并将自己限制在那些涵盖 Meterpreter 代码库中最可疑的字符串出现的环境中:
函数参数
列表初始化器
函数参数
例如,我们知道 ESET Nod32 会在以下上下文中将字符串“ntdll”标记为可疑:
ntdll = LoadLibrary(TEXT("ntdll"))
然而,按照以下方式重写此代码片段可以成功绕过检测:
wchar_t ntdll_str[] = {'n','t','d','l','l',0};
ntdll = LoadLibrary(ntdll_str)
在后台,第一个代码片段将导致字符串“ ntdll ”存储在生成的二进制文件的.rdata部分中,并且很容易被防病毒软件发现。第二个代码片段将导致字符串在运行时存储在堆栈中,并且至少在一般情况下与代码静态不可区分。IDA Pro或其他程序通常能够识别该字符串,但它们也会对二进制文件运行更高级、计算密集型的分析。
经过多年绕过防病毒软件的经验,如果我们可以与社区分享任何见解,那就是恶意软件检测几乎总是基于字符串、API 钩子或两者的组合。
即使对于实现机器学习分类器的产品(如 Cylance),没有字符串、API 导入和可挂钩 API 调用的恶意软件也肯定会像足球一样穿过 Sergio Rico 的防守。
Meterpreter 有数千个字符串,API 导入不会以任何方式隐藏,并且诸如“WriteProcessMemory”之类的敏感 API 可以通过用户空间 API 钩子轻松拦截。因此,我们需要以自动化的方式补救,这产生了两个潜在的解决方案:
源到源代码重构
LLVM 在编译时会对代码库进行混淆。
后者将是首选方法,许多流行研究也得出了相同的结论 [2]。主要原因是转换过程只需编写一次,然后就可以重复使用,而不受软件编程语言或目标架构的影响
但是,这样做需要能够使用 Visual Studio 以外的编译器来编译 Meterpreter。虽然我们在 2018 年 12 月发布了一些工作来改变这种情况,但一年多后,官方代码库的采用仍然是一个持续的过程。
与此同时,我们决定实施第一种方法。在彻底审查了源代码重构的最新进展后,libTooling(Clang/LLVM 工具链的一部分)似乎是解析 C/C++ 源代码并对其进行修改的唯一可行候选方案。
注意:由于代码库严重依赖 Visual Studio,Clang 将无法解析 Metepreter 的大部分内容。但是,仍然可以利用这一成功率绕过目标防病毒软件。在这里,我们可能拥有源到源转换相对于编译时转换的唯一优势:后者要求整个项目编译时没有任何错误。前者可以抵御数千个编译错误;你最终会得到一个不完整的抽象语法树,这完全没问题。
字符串混淆
在 C/C++中,一个字符串可能位于许多不同的上下文中。libTooling并不是真正令人愉快的玩意,所以我们应用了帕累托定律,并将自己限制在那些涵盖 Meterpreter 代码库中最可疑的字符串出现的环境中:
函数参数
列表初始化器
函数参数
例如,我们知道 ESET Nod32 会在以下上下文中将字符串“ntdll”标记为可疑:
ntdll = LoadLibrary(TEXT("ntdll"))
然而,按照以下方式重写此代码片段可以成功绕过检测:
wchar_t ntdll_str[] = {'n','t','d','l','l',0};
ntdll = LoadLibrary(ntdll_str)
在后台,第一个代码片段将导致字符串“ ntdll ”存储在生成的二进制文件的.rdata部分中,并且很容易被防病毒软件发现。第二个代码片段将导致字符串在运行时存储在堆栈中,并且至少在一般情况下与代码静态不可区分。IDA Pro或其他程序通常能够识别该字符串,但它们也会对二进制文件运行更高级、计算密集型的分析。
一些细节的坑点就不展开说了,总之就是各种反射各种 try/catch,我尽了最大的努力来提高其对各种 Tomcat 环境的兼容性,文章最后会将这个成果分享给大家。有了这个比较好用的回显 payload,搭配 K1/K2 来触发反序列化流程,就打造成了 xray 高级版/商业版中 Shiro 反序列化回显检测的核心逻辑,回显效果如下
使用 xray 扫到过 xss 的同学应该都有所体会,xray 扫到的 xss 漏洞不一定可以直接弹框,但相关参数一定存在可控的代码注入,经常会遇到网站存在 waf 但 xray 依然可以识别出 xss 的情况。纵观整个 Shiro 反序列化的流程,步步都是在针尖上跳舞,一步出错便前功尽弃。倘若目标站点部署了 RASP 等主机防护手段,很有可能导致反序列化中断而与 RCE 擦肩而过,有没有什么办法能够像 xss 一样大幅的提高其检测能力的下限呢?和 l1nk3r 师傅交流了一下,他提到一种检测 Shiro Key 的方法很不错,据说原理来自 shiro_tool.jar ,详情可以参考这篇文章一种另类的 shiro 检测方式 ,我这里简单复述一下结论
使用 xray 扫到过 xss 的同学应该都有所体会,xray 扫到的 xss 漏洞不一定可以直接弹框,但相关参数一定存在可控的代码注入,经常会遇到网站存在 waf 但 xray 依然可以识别出 xss 的情况。纵观整个 Shiro 反序列化的流程,步步都是在针尖上跳舞,一步出错便前功尽弃。倘若目标站点部署了 RASP 等主机防护手段,很有可能导致反序列化中断而与 RCE 擦肩而过,有没有什么办法能够像 xss 一样大幅的提高其检测能力的下限呢?和 l1nk3r 师傅交流了一下,他提到一种检测 Shiro Key 的方法很不错,据说原理来自 shiro_tool.jar ,详情可以参考这篇文章一种另类的 shiro 检测方式 ,我这里简单复述一下结论