网络靶场实战-网络对抗之反虚拟机技术

背景:

    恶意代码和游戏外挂的作者为了逃避技术人员对他们的程序进行分析,经常使用反虚拟机技术,这种技术可以检测自己是否运行在虚拟机中,如果发现自己在虚拟机中运行那么恶意程序就不会执行恶意代码,或者游戏外挂就会直接退出进程。甚至在HW行动中的入侵诱捕对抗中也会应用到,这篇文章可以让我们了解反虚拟机技术,知道他是怎样一个原理,就可以做出破防的方法。

VMware痕迹检测

根据进程信息

在任务管理器中的进程列表可以看到vmtoolsd、vmacthlp、VGAuthService与Vmware有关的程序正在运行

BOOL CheckVMWare() {     DWORD ret = 0;     PROCESSENTRY32 pe32;     pe32.dwSize =sizeof(pe32);      HANDLE hProcessSnap =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);      if(hProcessSnap ==INVALID_HANDLE_VALUE)      {          return FALSE;      }     BOOL bMore =Process32First(hProcessSnap, &pe32);      while(bMore)     {         if (strcmp(pe32.szExeFile,"vmware.exe")==0)         {             return TRUE;         }         bMore =Process32Next(hProcessSnap, &pe32);      }    CloseHandle(hProcessSnap);      return FALSE; }

还可以通过“net start|findstr VMware”命令来进行搜索与VMware的相关证据。

根据注册表信息

通过读取主机具有虚拟机特性的注册表来判断是否处于虚拟机环境中。

可以在“HKEY_CLASSES_ROOT\\Applications\\VMwareHostOpen.exe”进行查看。

BOOL CheckVMWare() {       HKEY hkey;       if (RegOpenKey(HKEY_CLASSES_ROOT,"\\Applications\\VMwareHostOpen.exe", &hkey) ==ERROR_SUCCESS)       {           return TRUE;       }       else       {           return FALSE;       } }

根据MAC信息

通常MAC地址的前三个字节标识一个提供商

00:05:69、00:0c:29和00:50:56开始的MAC地址与VMware相对应。

BOOL CheckVMWare() {     string mac;     get_mac(mac);     if(mac=="00-05-69" || mac=="00-0c-29" ||mac=="00-50-56")     {         return TRUE;     }     else     {         return FALSE;     } }

根据特定的文件夹

通过查找磁盘中是否存在特定的文件夹或者文件来判断当前是否在虚拟机环境中。

在”C:\Program Files\VMware\VMwareTools\”路径下通常会有下图的文件。

BOOL CheckVMware() {     if(PathIsDirectory("C:\\Program Files\\VMware\\VMware Tools\\") ==0)     {         return FALSE;     }     else     {         return TRUE;     } }

根据特定服务名

通过获取当前主机的服务信息来判断当前主机是否为虚拟机。

在VMware中通常会存在VMware物理磁盘助手服务和VMware Tools服务等。

通过获取当前主机的服务信息来判断当前主机是否为虚拟机。

在VMware中通常会存在VMware物理磁盘助手服务和VMware Tools服务等。

BOOL CheckVMWare() {     int menu = 0;       //打开系统服务控制器       SC_HANDLE SCMan =OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);      if(SCMan == NULL)       {         cout <<GetLastError() << endl;        printf("OpenSCManager Eorror/n");           return -1;       }       //保存系统服务的结构     LPENUM_SERVICE_STATUSAservice_status;        DWORD cbBytesNeeded =NULL;        DWORD ServicesReturned =NULL;       DWORD ResumeHandle =NULL;       service_status =(LPENUM_SERVICE_STATUSA)LocalAlloc(LPTR, 1024 * 64);       //获取系统服务的简单信息       bool ESS =EnumServicesStatusA(SCMan, //系统服务句柄           SERVICE_WIN32, //服务的类型          SERVICE_STATE_ALL,  //服务的状态          (LPENUM_SERVICE_STATUSA)service_status, //输出参数,系统服务的结构           1024 * 64,  //结构的大小           &cbBytesNeeded,//输出参数,接收返回所需的服务           &ServicesReturned,//输出参数,接收返回服务的数量           &ResumeHandle);//输入输出参数,第一次调用必须为0,返回为0代表成功       if(ESS == NULL)        {          printf("EnumServicesStatus Eorror/n");           return -1;       }       for(int i = 0; i < ServicesReturned;i++)       {           if(strstr(service_status[i].lpDisplayName, "VMware Tools")!=NULL ||strstr(service_status[i].lpDisplayName, "VMware 物理磁盘助手服务")!=NULL)         {             return TRUE;         }     }       //关闭服务管理器的句柄     CloseServiceHandle(SCMan);      return FALSE; }

查找漏洞指令

虚拟机监视器VMM(Virtual Machine Monitor)是一个运行在宿主机系统,用来监视虚拟机状态的监视器。VMM为客户及操作系统提供一个完整的虚拟平台。但是VMM也存在一些可以被恶意代码探测到虚拟化的安全缺陷。

NO Pill反虚拟机

使用sgdt和sldt指令探测VMware的技术通常被称为No Pill。

BOOL CheckVMWare() {     ULONG xdt = 0 ;     ULONG InVM = 0;     __asm     {         push edx         sidt [esp-2]         pop edx         nop         mov xdt , edx     }     if (xdt >0xd0000000)     {           InVM = 1;     }     else     {         InVM = 0;     }     __asm     {         push edx         sgdt [esp-2]         pop edx         nop         mov xdt , edx     }     if (xdt >0xd0000000)     {         InVM += 1;     }     if (InVM == 0)     {         return FALSE;     }     else     {         return TRUE;     } }

查询I/O端口

VMware使用虚拟化的I/O端口完成宿主系统与虚拟机之间的通信,以便支持诸如复制和粘贴功能。这个端口可以被查询,然后与一个神秘数比较,以确定VMware的使用

BOOL CheckVMWare() {     bool rc = true;     __try     {         __asm         {             push   edx             push   ecx             push   ebx               mov    eax, 'VMXh'             mov    ebx, 0               mov    ecx, 10              mov    edx, 'VX'             in     eax, dx              cmp    ebx, 'VMXh'              setz   [rc]              pop    ebx             pop    ecx             pop    edx         }     }    __except(EXCEPTION_EXECUTE_HANDLER)       {         rc = false;     }     return rc; }

使用STR指令

STR(Store task register)指令是用于将任务寄存器 (TR) 中的段选择器存储到目标操作数,目标操作数可以是通用寄存器或内存位置,使用此指令存储的段选择器指向当前正在运行的任务的任务状态段 (TSS)。在虚拟机和真实主机之中,通过STR读取的地址是不同的,当地址等于0x0040xxxx时,说明处于虚拟机中,否则为真实主机。

BOOL CheckVMWare() {     unsigned char mem[4] ={0};     __asm str mem;     if ((mem[0] == 0x00)&& (mem[1] == 0x40))     {         return TRUE;     }     else     {         return FALSE;     } }

总结:

    对抗反虚拟机技术也是多种多样比如修改Vmware的.vmx文件就可以减轻虚拟机被检测的可能;修改跳转指令等等。在文章的最后最后介绍一种对抗反虚拟机技术,方法很多,仅给各位提供一个参考。

在虚拟机文件中找到下图的文件,之后用记事本打开,输入以下代码即可缓解反虚拟机效果。

isolation.tools.getPtrLocation.disable = "TRUE" //禁止获取父进程isolation.tools.setPtrLocation.disable = "TRUE" //禁止获取虚拟机状态isolation.tools.setVersion.disable = "TRUE" isolation.tools.getVersion.disable = "TRUE" //前四条指令主要是使运行在Guest系统中的VMware Tools不能获取宿主系统的信息。monitor_control.disable_directexec = "TRUE" //开启3D加速monitor_control.disable_chksimd = "TRUE" //下面都是关于性能优化的设置monitor_control.disable_ntreloc = "TRUE" monitor_control.disable_selfmod = "TRUE" monitor_control.disable_reloc = "TRUE" monitor_control.disable_btinout = "TRUE" monitor_control.disable_btmemspace = "TRUE" monitor_control.disable_btpriv = "TRUE" monitor_control.disable_btseg = "TRUE" 

蛇矛实验室成立于2020年,团队核心成员均由从事安全行业10余年经验的安全专家组成,团队涉及红蓝对抗、渗透测试、逆向破解、病毒分析、工控安全以及免杀等相关领域方向。蛇矛实验室致力于安全研究、攻防解决方案以及靶场仿真复现等相关方向,曾多次参与国家级、省级护网行动,具备充足的一线应急响应、漏洞挖掘、渗透测试、安全加固、攻击追溯、漏洞复现、实网攻防、靶场场景复现等能力。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: SQLMap是一个开源的SQL注入自动化工具,可以帮助你通过SQLi-Labs靶场。使用SQLMap,你需要熟悉基本的命令行语法,并了解SQL注入的基本原理。为了使用SQLMap通过SQLi-Labs靶场,你可以尝试使用以下命令: ``` sqlmap -u <target URL> --dbs ``` 这将列出数据库列表。接下来,你可以使用以下命令枚举数据表: ``` sqlmap -u <target URL> -D <database name> --tables ``` 最后,你可以使用以下命令读取数据表中的数据: ``` sqlmap -u <target URL> -D <database name> -T <table name> --dump ``` 请注意,在实际渗透测试中,使用SQLMap和其他工具需要遵循道德准则和法律规定。 ### 回答2: SQL注入是目前常见的一种攻击方式,它很容易对基于SQL的Database进行利用,最终获取Database中的敏感信息。为了更好地理解SQL注入攻击方式,学习和了解其渗透测试方式非常必要。而sqli-labs是一款SQL injection实验环境,旨在用来提高SQL技术的实际应用能力和渗透测试的技能。 在sqli-labs中,存在很多漏洞类型需要渗透测试,通过这些漏洞攻击我们可以得到不同的信息。要完成这些测试,我们需要一个工具来探测一个web应用程序中的SQL注入漏洞,这个工具就是SQLMAP。SQLMAP工具是一个开源工具,用Python语言编写,接受界面式和命令行调用方式,功能非常强大。 下面是sqlmap通关sqli-labs靶场的步骤: 1. 下载并安装SQLMAP SQLMAP安装包的下载可以到官方网站上下载,或者使用Git Clone命令克隆仓库。安装过程中,需要依赖Python环境,所以需要先安装Python环境。 2. 下载sqli-labs sqli-labs的下载可以从官方网站或者GitHub上下载,解压并配置好环境。 3. 识别目标网站 使用命令行工具,进入SQLMAP所在的目录,输入命令:`python sqlmap.py -u <target-url>`,其中,target-url指的是sqli-labs中的URL。 4. 扫描漏洞 使用命令来扫描不同的漏洞,比如:`python sqlmap.py -u <target-url> --dbs`,表示对目标URL进行数据库的探测。 5. 选择漏洞 通过返回的扫描结果,选择需要攻击的漏洞。 6. 进行攻击 对选择的漏洞进行攻击,使用命令:`python sqlmap.py –-tamper=space2mysql -u <target-url> -p <vuln-field> --dbs`,其中,tamper参数是选用的注入脚本,space2mysql就是其中一个比较好用的注入脚本之一,vuln-field指的是目标网站的漏洞点。 7. 数据库探测和获取数据 通过命令:`python sqlmap.py -u <target-url> --dbs`获取到可用的数据库,再使用命令:`python sqlmap.py -u <target-url> -D databaseName -T tableName --dump`来获取表中的数据。 通过上述步骤,sqlmap就可以在sqli-labs的攻击和测试中展示其强大的功能。需要注意的是,任何时候针对他人的web应用程序进行测试之前,务必获得允许进行渗透测试的正式授权。 ### 回答3: SQL注入是一种常见的安全漏洞,黑客可以利用它来攻击网站。为了更好地了解和防范这种攻击,我们可以通过搭建sqli-labs靶场来进行学习和实践,而SQLmap则是一款自动化SQL注入工具,可以大大提高注入的效率。现在,我将详细介绍如何通过SQLmap通关sqli-labs靶场。 第一步:下载sqli-labs和SQLmap 首先,我们需要先下载本地的sqli-labs靶场和SQLmap工具。sqli-labs靶场可以从GitHub上下载,而SQLmap工具则可以从官网或GitHub上下载。 第二步:启动sqli-labs 我们需要启动sqli-labs靶场,进入其对应的文件夹中,运行命令“sudo ./logstart.sh”即可启动。 第三步:寻找sqli-labs中的注入漏洞 接下来,我们需要寻找sqli-labs中的注入漏洞,这可以通过用浏览器访问sqli-labs的web应用程序来完成。我们可以利用输入一些特殊符号来调用SQL语句,并观察服务器的返回结果。如果返回结果与预期不符,则可能存在注入漏洞。 第四步:使用SQLmap进行注入攻击 现在,我们已经找到存在漏洞的地方了,接下来就是使用SQLmap进行注入攻击。在命令行中输入“python sqlmap.py -u [漏洞URL] --dbs”即可进行漏洞测试。如果存在注入漏洞,则SQLmap会在其中进行攻击并自动检测到被攻击的数据库。 第五步:进一步利用SQLmap 此时,我们已经成功地利用SQLmap进行了注入攻击,接下来可以进一步利用SQLmap进行数据抓取、渗透等操作。我们可以通过输入“python sqlmap.py -u [漏洞URL] -D [数据库名] -T [表名] --dump”来进行数据抓取操作,获取数据并进行进一步的分析。 总结: 通过以上步骤,我们可以利用SQLmap成功地通关sqli-labs靶场。值得注意的是,在进行学习和实践过程中,一定要注意合法性和安全性,避免非法入侵和攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蛇矛实验室

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值