远程注入小记

64位Shellcode方式注入DLL 挟持NTDLL的API进行的远程注入DLL,支持主动启动进程方式加载 阅读详情

原作者连接

提权方法
64位的一定要生成64的,网上说32和64内存隔开的。

//注入程序
#include "stdafx.h"
#include "Remote injection.h"
#include "tlhelp32.h"
using namespace std;
extern int ListProcess();
extern int EnableDebugPriv(const WCHAR *);

int _tmain(int argc, TCHAR *argv[], TCHAR *env[])
{
    //为了成功使用CreateRemoteThread()函数,必须:
    //1.利用OpenProcess()获得远程进程的句柄
    //2.利用VirtualAllocEx(),WriteProcessMemory()写入DLL路径字符串
    //3.获得远程进程中LoadLibrary()的确切地址

    //输入进程ID获得进程句柄
    char YesNo;
    printf("是否查看当前进程列表获得进程ID: Y or N?");
    scanf("%c", &YesNo);
    Sleep(250);
    if (YesNo == 'Y' || YesNo == 'y')
        ListProcess();
    printf("请输入要注入的进程ID【‘’表示自身进程】:\n");
    DWORD dwRemoteProcessId;
    scanf("%d", &dwRemoteProcessId);
    //如果输入“”表示向自身进程注入
    if (dwRemoteProcessId == 0)
        dwRemoteProcessId = GetCurrentProcessId();

    //获得调试权限
    if (EnableDebugPriv(SE_DEBUG_NAME))
    {
        printf("Add Privilege error\n");
        return -1;
    }
    //调用OpenProcess()获得句柄
    HANDLE hRemoteProcess;
    if ((hRemoteProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwRemoteProcessId)) == NULL)
    {
        printf("OpenProcess error\n");
        printf("Error Code:%d\n", GetLastError());
        system("pause");
        return -2;
    }

    //在远程进程中分配内存,准备拷入DLL路径字符串
    //取得当前DLL路径
    char DllPath[260]; //Windows路径最大为
    GetCurrentDirectoryA(260, DllPath);  //获取当前进程执行目录
    printf("Proces***e Directory is %s\n", DllPath);
    strcat(DllPath, "\\..\\Debug\\MyDLL.dll"); //链接到DLL路径
    LPVOID pRemoteDllPath = VirtualAllocEx(hRemoteProcess, NULL, strlen(DllPath) + 1, MEM_COMMIT, PAGE_READWRITE);
    if (pRemoteDllPath == NULL)
    {
        printf("VirtualAllocEx error\n");
        return -3;
    }

    //向远程进程空间中写入DLL路径字符串
    printf("DllPath is %s\n", DllPath);
    DWORD Size;
    if (WriteProcessMemory(hRemoteProcess, pRemoteDllPath, DllPath, strlen(DllPath) + 1, &Size) == NULL)
    {
        printf("WriteProcessMemory error\n");
        return -4;
    }
    printf("WriteRrmoyrProcess Size is %d\n\n", Size);

    //获得远程进程中LoadLibrary()的地址
    LPTHREAD_START_ROUTINE pLoadLibrary = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryA");
    if (pLoadLibrary == NULL)
    {
        printf("GetProcAddress error\n");
        return -5;
    }
    else
    {
        printf("LoadLibrary's Address is 0x%x\n\n", pLoadLibrary);
    }

    //启动远程线程
    DWORD dwThreadId;
    HANDLE hThread;
    hThread = CreateRemoteThread(hRemoteProcess, NULL, 0, pLoadLibrary, pRemoteDllPath, 0, &dwThreadId);
    if (hThread == NULL)
    {
        printf("CreateRemoteThread error\n");
        return -6;
    }
    else
    {
        WaitForSingleObject(hThread, INFINITE);
        printf("dwThreadId is %d\n\n", dwThreadId);
        printf("Inject is done\n");
    }

    //释放分配内存
    if (VirtualFreeEx(hRemoteProcess, pRemoteDllPath, 0, MEM_RELEASE) == 0)
    {
        printf("VitualFreeEx error\n");
        return -8;
    }

    //释放句柄
    if (hThread != NULL) CloseHandle(hThread);
    if (hRemoteProcess != NULL) CloseHandle(hRemoteProcess);

    system("pause");
    return 0;
}

int ListProcess()
{
    //获取系统快照
    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //不要写错CreateToolhelp32Snapshot()
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        printf("CreateToolHelp32Snapshot error!\n");
        return -1;
    }

    //创建单个进程快照结构体,初始化大小
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);  //务必提前初始化,否则默认的大小不一定满足要求

    //初始化缓冲区
    WCHAR buff[1024] = { 0 }; //PROCESSENTRY32中的szExeFile为WCHAR类型数组,此处应一致,使用Unicode码

    //枚举系统快照链表中的第一个进程项目
    BOOL bProcess = Process32First(hProcessSnap, &pe32);
    while (bProcess)
    {

        //格式化进程名和进程ID,这里要使用printf的宽字符版
        //格式字符串“”都需要用L转换为宽字符形式
        wsprintf(buff, L"FileName:%-30sID:%-6d\r\n", pe32.szExeFile, pe32.th32ProcessID);
        wprintf(L"%s\n", buff);
        //缓冲区复位
        memset(buff, 0, sizeof(buff));
        //继续枚举下一个进程
        bProcess = Process32Next(hProcessSnap, &pe32);
    }

    CloseHandle(hProcessSnap);
    return 0;
}

int EnableDebugPriv(const WCHAR *name)
{
    HANDLE hToken;   //进程令牌句柄
    TOKEN_PRIVILEGES tp;  //TOKEN_PRIVILEGES结构体,其中包含一个【类型+操作】的权限数组
    LUID luid;       //上述结构体中的类型值

    //打开进程令牌环
    //GetCurrentProcess()获取当前进程的伪句柄,只会指向当前进程或者线程句柄,随时变化
    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    {
        printf("OpenProcessToken error\n");
        return -8;
    }

    //获得本地进程name所代表的权限类型的局部唯一ID
    if (!LookupPrivilegeValue(NULL, name, &luid))
    {
        printf("LookupPrivilegeValue error\n");
    }

    tp.PrivilegeCount = 1;    //权限数组中只有一个“元素”
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  //权限操作
    tp.Privileges[0].Luid = luid;   //权限类型

    //调整进程权限
    if (!AdjustTokenPrivileges(hToken, 0, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
    {
        printf("AdjustTokenPrivileges error!\n");
        return -9;
    }

    return 0;
}
//Dll
// MyDll.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include "MyDll.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//
//TODO:  如果此 DLL 相对于 MFC DLL 是动态链接的,
//      则从此 DLL 导出的任何调入
//      MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
//      该函数的最前面。
//
//      例如: 
//
//      extern "C" BOOL PASCAL EXPORT ExportedFunction()
//      {
//          AFX_MANAGE_STATE(AfxGetStaticModuleState());
//          // 此处为普通函数体
//      }
//
//      此宏先于任何 MFC 调用
//      出现在每个函数中十分重要。  这意味着
//      它必须作为函数中的第一个语句
//      出现,甚至先于所有对象变量声明,
//      这是因为它们的构造函数可能生成 MFC
//      DLL 调用。
//
//      有关其他详细信息,
//      请参阅 MFC 技术说明 33 和 58。
//

// CMyDllApp

BEGIN_MESSAGE_MAP(CMyDllApp, CWinApp)
END_MESSAGE_MAP()

void test(CString text);
// CMyDllApp 构造

CMyDllApp::CMyDllApp()
{
    // TODO:  在此处添加构造代码,
    // 将所有重要的初始化放置在 InitInstance 中
    test(L"2");
}


// 唯一的一个 CMyDllApp 对象

CMyDllApp theApp;


// CMyDllApp 初始化

BOOL CMyDllApp::InitInstance()
{
    CWinApp::InitInstance();
    test(L"1");
    return TRUE;
}

void test(CString text){
    text += L"DLL has been mapped!";
    MessageBox(NULL, text, text, MB_OK);
    FILE *fp = fopen("C:\\test.txt", "w");
    fputs("一个DLL测试文本\n", fp);
    fclose(fp);
}
【安全漏洞】挖洞小记 前言:上个月月初开始,在那些项目结束之后进入了挖洞时期,每天的日常工作就是挖洞,除非有临时的项目才会停下,最近在整理报告,发现了这个站,还是挺有意思的。 信息收集 从fofa上找到了这个站点,叫做fastadmin,是基于Thinkphp5和bootstrap开发的后台框架,常规思路找一下后台,根据经验,没意外的话php的站点基本都是根路径后加个admin就可以找到了 getshell 常规手段弱口令先打一波,不行再试试SQL注入 弱口令admin/123456成功进入后台 因为结合了tp5框架,想到可. 阅读详情

相关推荐

ThinkCMF框架任意文件包含漏洞学习复现小记

前言 跟随大佬学习,了解学习了ThinkCMF任意文件包含漏洞,并进行了一次渗透,下面来写个学习笔记记录一下 影响版本 ThinkCMF X1.6.0 ThinkCMF X2.1.0 ThinkCMF X2.2.0 ThinkCMF X2.2.1 ThinkCMF X2.2.2 漏洞危害 任何人在无需任何权限情况下,通过构造特定的请求包即可在远程服务器上执行任意代码。 实战 因为是学习,所以直接fofa语法搜索‘app=“ThinkCMF”’,虽然搜索出来很多,但找到一个确实有漏洞的还要花很长时间, 下面

Junior_Q的博客 1568

win10 x64实现内存注入DLL

win10 x64内存注入DLL,可以躲避相关api检测模块

weixin_41725706的博客 3124

Web安全应急响应小记

1.前言 今年的某月某日,系统监测到客户的一企业官网www.******.com遭到了网页篡改,经过人工确认将浏览器的UA替换为百度UA后访问网站,此时网站链接自动跳转至赌博类违规网站,当日上午随即受到客户的召唤,立刻赶往客户单位进行初步检查,并将相关日志文件及样本拷回做进一步分析。 2021最新整理网络安全/渗透测试/安全学习/100份src技术文档(全套视频、CTF、大厂面经、精品手册、必备工具包、路线)一>获取<一 2. 事件分析 因去到现场时index.php文件已经被网站管

kali_Ma的博客 1496

【第38节】windows原理:DLL注入与Hook是什么

Hook 技术,中文叫钩子技术,本质上是在程序运行过程中,拦截特定事件或函数调用,改变其执行路径,插入自定义代码,来实现特定功能的一种编程技术。Hook在程序设计中是一种灵活多变的技术手段,它主要用于改变程序原有的执行流程,让程序执行开发者自己定义的代码。在Windows系统下,Hook有两种含义,一是系统提供的消息Hook机制,由一系列API提供服务,通过这些API可以对大多数应用程序的关键节点进行Hook操作,Windows会为每种Hook类型维护一个钩子链表;

攻城狮7号的博客 5202

VB6用OpenProcess注入exe或dll远程注入

VB6.0源码下载 用OpenProcess注入exe或dll远程注入 VB实例源码 学习用的。请不要拿这些技术去害人哦。

使用LdrLoadDll 注入DLL,支持注入64位dll

源码是c++代码翻译过来的, 所以, 那些指针读写的偏移我就不做过多的讲解.....那些偏移都是对应某个成员.... 众所周知, 易语言的数据类型是个坑, 所以, 申请一块空间当成一个结构使用了。愿意研究的话, 结构是这个。注入流程:。1. 创建远程线程。2. 注入一段代码到目标进程里执行。3. 这段代码调用 LdrLoadDll 加载dll。4. 调用 LdrGetProcedureAddress 获取函数地址, 然后调用, 返回。2021-12-17 更新。使用了eWOW64Ext http://www.sanye.cx/?id=12671。1. 注入32位进程只能使用32位的dll。2. 注入64位进程只能使用64位的dll。支持注入任务管理器。@福仔。

Wow64(32位进程)注入DLL到64位进程

http://blog.poxiao.me/p/wow64-process-inject-dll-into-x64-process/#Wow64环境下32位进程注入64位进程 DLL注入 向其他进程注入DLL通常的做法是通过调用CreateRemoteThread这个API在目标进程内创建一个远程线程,用这个线程来调用LoadLibraryA或LoadLibraryW(下文统称Load

jiangqin115的专栏 6374

Windows下TensorRT+YOLOv11部署避坑指南:从CUDA配置到模型加密全流程

本文详细解析了在Windows平台部署YOLOv11与TensorRT的全流程,重点涵盖从CUDA环境配置、工程编译适配到模型加密保护的实战指南。基于wang-xinyu的tensorrtx仓库,提供了详细的版本选择、编译问题修复方案,并深入探讨了如何对TensorRT引擎进行加密,以实现高效且安全的端到端部署。

vscode5coder的博客 450

小记班级对抗赛

xxe 出的有点小脑洞,指定了具体到xml位置,还指定了具体对显示位,这样的盲测就有点头大。=。= <?php require_once('header.php'); ?> <?php if(isset($_POST["submit"])) { $target_file = getcwd()."/upload/".md5($_FILES["file"]["tm...

dengzhasong7076的博客 176

Win10系统蓝屏错误BAD SYSTEM CONFIG INFO的解决方案

BAD SYSTEM CONFIG INFO错误是Win10系统中较为常见的一种蓝屏错误,通常与系统配置文件损坏或丢失有关。本文介绍了三种有效的解决方法:使用系统修复高级选项修复、通过PE修复文件和重装新系统。用户可以根据实际情况选择合适的方法进行操作。同时,建议用户定期备份系统重要文件和数据,以防止类似问题的发生。在遇到问题时,保持冷静并耐心操作,通常可以顺利解决问题。

mmoo_python的博客 7722

SolidWorks软件安装管理程序在创建该注册表项时遇到错误: UNKNOWN\Components的解决方案

SolidWorks软件安装管理程序在创建该注册表项时遇到错误: UNKNOWN\Components的解决方案

Q82556499的博客 4167

木马侵入技术小记

例1在我的程序运行期间如何禁止某个程序运行,不需要枚举窗口或者FindWindow的方案。 //VC-ConsoleWithApi #include void RaiseToDebugP()//提权函数 { HANDLE hToken; HANDLE hProcess = GetCurrentProcess();//获得当前进程号 if ( OpenPr...

dengweidan3299的博客 156

TC3XX - MCAL知识点(十一):WDG EB-tresos配置说明与代码浅析

在AUTOSAR中,看门狗栈实现了三种监控机制:实时监控:用于周期软件的定时监控期限监督:针对非周期软件逻辑监督:用于监督执行顺序的正确性看门狗(WDG)驱动实现AUTOSAR(4.2.2)中规定的看门狗SWS,提供初始化、改变操作模式和设置触发条件(超时)等服务,供看门狗硬件(WDT)用户使用。WDG驱动的用户包括:模式管理模块(用于初始化),WdgM通过Wdglf设置触发条件和驱动运行模式设置。WdgM实施上述监督机制。AUTOSAR扩展触发概念,以支持窗口看门狗模式。

梦想技术家 3601

CreateRemoteThread小记

利用全局钩子可以注入DLL到当前的所有进程,若要注入到特定的进程中可用CreateRemoteThread函数. #include<Tlhelp32.h>/**向指定进程注入DLL*dwProcessID:目标进程ID*lpszDll:待注入的DLL完全路径*返回注入成功与否*/inlineBOOLInjectDllIntoProcess(DWORD...

weixin_30654583的博客 154

Python与.NET革命性互操作:PythonNet实现零门槛双向调用——深度解析与实战案例

跨语言调用实战指南:Python与.NET深度集成 摘要:本文详解Python与.NET双向互调技术,通过PythonNet和Python.Runtime实现高效跨语言协作。核心优势包括:无缝集成Python机器学习模块(如PaddleOCR)与.NET UI框架,内存直传提升90%数据效率,减少80%重复代码。内容涵盖:1)Python调用.NET类库的完整流程;2)C#动态加载Python脚本及环境配置要点;3)反射机制实现私有方法调用与泛型处理;4)性能优化技巧(类型缓存、NumPy数组转换);5)异

墨夶的博客 611

OpenClaw 生成测试用例

OpenClaw 只是躯干,Skills 才是灵魂。很多同学觉得 OpenClaw 没用,就像是买了一台顶级电脑却没装操作系统。通过这四步走,不仅可以学会如何让 AI 干活,更重要的是,可以学会如何管理 AI 的能力。

十二测试录 737

开发Uranus小记

在win10 x64下尝试注入explorer.exe的时候不成功,失败在创建远程线程一步上,getlasserror()显示拒绝访问。 还以为是win10更新了什么权限机制,不允许注入系统自带的各种进程(explorer, notepad等)。 最后才知道原因在于我的代码是32位的,无法注入64位程序。将代码改为x64之后注入顺利完成,都不要右键-管理员权限运行。

u010664634的博客 362

LoRA 完整解析:从理论到实践

LoRA(低秩适应)是一种高效的大模型微调方法,通过添加少量可训练参数(低秩矩阵)来适配新任务,避免全参数微调的高成本。其核心是将权重更新ΔW分解为两个小矩阵B×A的乘积,大幅减少训练参数量(仅0.1-1%)。LoRA基于内在维度假设,通过低秩约束捕捉核心任务信息,兼具效率与效果。实际应用中,常用配置为秩r=16-32,目标模块选择注意力层的q_proj和v_proj,学习率比全参数微调大10倍(约1e-4)。优势包括参数高效(内存降低60-80%)、多任务适配灵活、保留预训练知识等,已成为大模型微调的主流

echo的博客 1410

YOLOv11改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题

本文记录的是改进YOLOv11的损失函数,将其替换成Slide Loss,并详细说明了优化原因,注意事项等。Slide Loss函数可以有效地解决样本不平衡问题,为困难样本赋予更高的权重,使模型在训练过程中更加关注困难样本。若是在自己的数据集中发现容易样本的数量非常大,而困难样本相对稀疏,可尝试使用Slide Loss来提高模型在处理复杂样本时的性能。

Limiiiing的博客 4567

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

2012年蓝盾杯信息安全竞赛小记

时间2012.12.02 9:00-14:00 1>必须用简要文字描述操作的过程,以及保存操作截图。 2>竞赛过程中参赛者不得通过任何途径连接互联网,违者取消比赛资格! 操作题包含了web安全、主机安全、恶意程序、数据库安全和安全加固等方面的攻防题目,总15道大题,共100分。 留此简单记录竞赛过程 题目简析: 1&2&3 网马解密 0×01 初级网马 var shellcode

tmdsb38的博客 2399

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring小记

关于Spring 1.Spring是一种轻量级(依赖小,需要就打入就行)开发框架,是很多模块的集合。分别核心容器,数据访问/集成,Web,AOP,工具,消息,和测试。 spring官网的6大特征:1.核心技术:依赖注入DI,AOP(面向切面编程)事件,资源,数据绑定等等。 2.测试:模拟对象,SpringMVC测试 3.数据访问:JDBC,DAO,ORM 4.web支持:SpringMVC,spring WebFlux Web框架 5.集成:远程处理,jms,电子邮件,调度,缓存等等 6.语言:Kotlin

m0_50823128的博客 147

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【个人小记】如何做好渗透测试?

在 《Web安全深度剖析》中,笔者发现了目前自身学习路线混乱的原因,红队跟传统的渗透测试,其实有很多东西是差不多的,大家都是采取攻击技术来发现安全问题的。渗透测试人员与攻击者的性质不一样,攻击者只需要找到程序的一个突破口,拿到权限即可,而渗透测试人员或“白帽子”则不一样,渗透测试人员必须要找到系统的所有漏洞,才能保证系统的安全。但一般企业渗透测试项目无需此操作。笔者认为,社工玩的好得懂人心,行为等,得了解一些灰暗面,所以社工往往具有比较坏的性质,而且一般渗透测试的项目用不着社工,故本篇文章不讨论社工玩法。

qq_21039641的博客 1448

【转载】安全知识小记

 Posted on 2017-08-29 |  In security |  1.关于PHP文件包含 如果php.ini的配置选项allow_url_fopen和allow_url_include为ON的话,则文件包含函数是可以加载远程文件的。 在Web服务器安全配置方面可以通过设定php.ini中open_basedir的值将允许包含的文件限定在某一特定目录内,这样可以有效避免利用文件包含漏...

专注企业信息安全-sec 510
上一篇: API Hook 自身 MessageBoxW
下一篇: DX后台截图
「已注销」
博客等级 码龄14年 71粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值