要查找当前进程/可执行文件运行的路径,可以使用以下方法:
os.path.dirname(os.path.abspath(__file__))
pwd
cd
std::filesystem::current_path()
这些方法都可以获取到当前进程/可执行文件运行的路径。
为什么复制到这个 /usr/bin/ 里面,因为docker 文件夹下都是docker 的命令,也就是可执行文件,也就是我们操作docker 的指令。
DLL劫持是一种用于执行恶意有效负载的流行技术,这篇文章列出了将近300个可执行文件,它们容易受到Windows 10(1909)上相对路径DLL劫持的攻击,并展示了如何使用几行VBScript绕过UAC可以以提升的特权执行某些DLL劫持。
进程程序替换是指在运行过程中将一个进程的地址空间中的代码、数据和堆栈等内容完全替换为另一个程序的代码、数据和堆栈的过程。这个过程通常是由操作系统提供的 exec 系列函数来实现的:
被黑客入侵,还在苦苦一步步去找哪里被中了木马?看哪个恶意进程?哪个外联端口吗?
上次介绍了基础IO(二):Linux:基础IO(二.缓冲区、模拟一下缓冲区、详细讲解文件系统)
大家好,猫头虎博主带你深入探索Go的世界!今天的主题是关于最近Go安全更新所解决的关键问题:在不受信任的目录中进行PATH查找,这可能在执行go get命令时导致远程执行。这篇博客将详细介绍这个漏洞,Go团队是如何修复它的,以及你如何确定自己的程序是否也存在类似的安全隐患。
在这篇文章中,我们将通过分析一个使用 Go 语言编写的示例程序来探讨 Go 语言在进行系统调用和进程替换方面的应用。该示例程序使用了 os 和 os/exec 标准库,以及 syscall 包来实现在 Unix 系统上的进程替换功能。本文将逐步解析这段代码,以揭示其背后的关键概念和技术细节。
在了解了共享对象的绝对地址的引用问题后,我们基本上对动态链接的原理有了初步的了解,接下来的问题是整个动态链接具体的实现过程了。动态链接在不同的系统上有不同的实现方式。ELF的动态链接的实现方式会比PE的简单一点,在这里我们先介绍ELF的动态链接过程在LINUX下的实现,最后我们会专门的章节中介绍PE在Windows下的动态链接过程和它们的区别
然而你可能会发现npm全局安装后的命令可以直接使用,而yarn却不行,这是为什么呢?
上一篇我们分析了Hello World是如何编译的,即使一个非常简单的程序,也需要依赖C标准库和系统库,链接其实就是把其他第三方库和自己源代码生成的二进制目标文件融合在一起的过程。经过链接之后,那些第三方库中定义的函数就能被调用执行了。早期的一些操作系统一般使用静态链接的方式,现在基本上都在使用动态链接的方式。
选项和匹配模式是可选的。其中,选项用于控制查找行为,匹配模式用于匹配文件名。以下是常用选项:
sandfly-entropyscan是一款功能强大的熵扫描工具,该工具可以用于检测与恶意软件相关的打包文件或加密二进制文件。除此之外,该工具还支持查找恶意文件和Linux进程相关的安全信息,并提供带有加密哈希的输出结果。
链接:https://bbs.pediy.com/thread-266655.htm
功能:创建一个与原来进程几乎完全相同的进程,即两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork函数后,系统先给新的进程分配资源,例如,存储数据和代码的空间。然后把原来的进程所有值都复制到新的进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。
vma是指的不同段的地址入口,可以看到虽然段有很多,但是type类型大部分都一样,比如代码段类型分为了两个段描述更加细致;数据段更夸张用了五个段存储初始化了的变量
不久前,我正在工作中开发一项新服务,该服务由 Swift Package 组成,该 Package 公开了一个类似于Decodable协议,供我们应用程序的其余部分使用。事实上,该协议是从Decodable本身继承下来的,看起来像这样:
本文介绍了如何通过GCC和CMake在Linux系统上生成C语言静态库和动态库,并对生成的库进行链接,从而完成一个简单的C语言项目的编译和构建。
前几天,读者群里有小伙伴提问:从进程创建后,到底是怎么进入我写的main函数的?
在Linux环境中,进程的加载方式涉及到静态进程和动态进程两个概念。这两种方式都有各自的优势和劣势,而正确选择加载方式对于应用程序的性能和管理至关重要。本文将深入探讨静态进程和动态进程的特点、优劣势,并为你提供在不同场景下的选择建议。
看雪上这篇文章讲述了两种对so进行加固的方法:1. 分离section,对整个section进行加密。2.在.text section直接寻找目标函数并进行加密,两种方式的实践代码见文末。 这里讲一些我在学习过程中的一些额外发现,如有理解不对的地方,欢迎斧正。 一. 关于ELF的链接视图和装载视图(执行视图)。在所有介绍ELF文件格式的文档中,都会出现这样一张图:
先来看看程序编译和链接的过程: 编译过程又可以分成两个阶段:编译和汇编。 编译 编译是指编译器读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码。 源文件的编译过程包含两个主要阶段: 第一个阶段是预处理阶段,在正式的编译阶段之前进行。预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。 主要是以下几方面的处理: 宏定义指令,如 #define a b 对于这种伪指令,预编译所要做的是将程序中的所有a用b替换,但作为字符串常量的 a则不被替换。还有 #undef,
解释器文件是一种文本文件,它第一行的形式为:#! pathname [optional-argument]在!和 pathname 之间的空格不是必要的,可以根据需求选择有无。pathname 指的是绝对路径名,[optional-argument] 指的是可选参数。
DLLHSC全称为DLL Hijack SCanner,即DLL劫持扫描工具,DLLHSC可以生成线索并自动帮助广大研究人员发现合适的DLL劫持攻击目标,以方便实现DLL搜索顺序劫持。
当你勤勤恳恳完成需求后,要交付你的成果时,你突然发现了一个问题,如果直接把源代码给乙方,他就可以直接进入你的代码,然后狠狠的学习再“借鉴”,甚至修改,你的头发的产物就被别人盗取了。这该如何是好?
我们将其运行编译并生成为可执行文件 myproc ,当我们要运行它的时候,都得在这个可执行文件前面加一个 ./ 这是为什么?
在类 Unix 系统中,你可能知道一个命令或进程开始执行的时间,以及一个进程运行了多久。 但是,你怎么知道这个命令或进程何时结束或者它完成运行所花费的总时长呢? 在类 Unix 系统中,这是非常容易的! 有一个专门为此设计的程序名叫 GNU time。 使用 time 程序,我们可以轻松地测量 Linux 操作系统中命令或程序的总执行时间。 time 命令在大多数 Linux 发行版中都有预装,所以你不必去安装它。
在类 Unix 系统中,你可能知道一个命令或进程开始执行的时间,以及一个进程运行了多久。 但是,你如何知道这个命令或进程何时结束或者它完成运行所花费的总时长呢? 在类 Unix 系统中,这是非常容易的! 有一个专门为此设计的程序名叫 GNU time。 使用 time 程序,我们可以轻松地测量 Linux 操作系统中命令或程序的总执行时间。 time 命令在大多数 Linux 发行版中都有预装,所以你不必去安装它。
在渗透测试中,提升自己的权限是经常遇到的问题,往往在渗透中最容易获取的权限就是一个webshell,如果网站是架设在Windows系统上的,这时就可能遇到这样的问题,还有一种情况是在做横向渗透的时候,收集到一些可以远程连接桌面的帐号,这是也需要,在实际的渗透中有很多的地方会需要这个操作,这个系列就主要介绍各种提权的方式。
博主在因为获取知识的需求,开通腾讯云-轻量云服务器,在日常使用中没有什么问题,但是最近一直频繁收到邮件提醒,之前也没有想着去解决这个问题,今天又收到,就来解决了一下相关问题。
正文之前 说是处理,想必也没几个人喜欢自启动的软件,我是一个控制欲比较强的人,开机自启搜狗输入法这个我能接受,但是像印象笔记啊,向日葵圆孔Client客户端这些,我就真的是烦不胜烦了!所以,今天,还是
单凭这段文字,大家肯定还不能理解到底什么是环境变量,那下面我们通过几个问题来帮助大家理解
如上所述,安装 Cilium 时,会安装几个运行组件(有些是可选组件), 它们各是什么用途?
Linux 系统中用于查找文件的命令有 find ,locate,whereis, which,type
如果你 在 Ubuntu 上运行 Java 程序 ,使用 Eclipse、Maven 或 Netbeans 等等,你将需要将 JAVA_HOME 环境变量设置为正确的路径。否则,你的系统将会向你控诉 “java_home 环境变量没有设置”。
我们会看到经过pcntl_exec函数,test.php 里面的代码也执行,这其实就是pcntl_exec的作用,用来执行一个程序
之前,青藤云安全已经对ATT&CK进行了一系列的介绍,相信大家都已了解,Mitre ATT&CK通过详细分析公开可获得的威胁情报报告,形成了一个巨大的ATT&CK技术矩阵。诚然,这对于提高防御者的防御能力、增加攻击者的攻击成本都有巨大作用。但或许是出于猎奇心理,很多威胁情报报告更多地是在报道攻击者使用的比较新颖有趣的技术方法,而却忽视了攻击者反复使用的普通技术。这也是Mitre公司在2019年10月份的ATT&CKcon2.0大会上,推出了ATT&CK Sightings项目,以期借助社区力量收集更多直接观察数据的原因所在。
ELF文件装载链接过程及hook原理 ELF文件格式解析 可执行和可链接格式(Executable and Linkable Format,缩写为ELF),常被称为ELF格式,在计算机科学中,是一种用于执行档、目的档、共享库和核心转储的标准文件格式。 ELF文件主要有四种类型: 可重定位文件(Relocatable File) 包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。 可执行文件(Executable File) 包含适合于执行的一个程序,此文件规定了 exec() 如何创
制作 ar -cr libxxx.a xxx1.o xxx2.o xxx3.o ...
GDB全称是GNU symbolic debugger,是Linux平台下最常用的一款调试器。GDB主要用于C/C++开发场景,同时也支持Go、Ada等语言的调试。GDB主要以命令行的形式在shell终端使用,它的一部分底层逻辑借助于ptrace进行实现。GDB的功能很强大,开发者可以在执行时修改函数变量的值以及程序的执行顺序,还可以在程序执行期间查看函数的调用过程、堆栈数据等,也可以利用GDB对代码进行断点调试。
总结: -Xlinker -dead strip \ -Xlinker -all_load 同时写上去,
我们前面提到了, fork, vfork等复制出来的进程是父进程的一个副本, 那么如何我们想加载新的程序, 可以通过execve来加载和启动新的程序。
ShellExecute ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。
对于exec函数族来说,它的作用通俗来说就是使另一个可执行程序替换当前的进程,当我们在执行一个进程的过程中,通过exec函数使得另一个可执行程序A的数据段、代码段和堆栈段取代当前进程B的数据段、代码段和堆栈段,那么当前的进程就开始执行A中的内容,这一过程中不会创建新的进程,而且PID也没有改变。
aDLL是一款功能强大的代码分析工具,可以帮助广大研究人员以自动化的方式识别并发现DLL劫持漏洞。该工具可以分析加载至内存中的源码镜像,并在加载过程中搜索DLL,并且利用了微软Detours代码库来拦截针对LoadLibrary/LoadLibraryEx函数的调用,然后分析在代码运行时过程中加载的DLL文件。
可执行文件的装载 进程和装载的基本概念的介绍 程序(可执行文件)和进程的区别 程序是静态的概念,它就是躺在磁盘里的一个文件。 进程是动态的概念,是动态运行起来的程序。 现代操作系统如何装载可执行文件 给进程分配独立的虚拟地址空间 将可执行文件映射到进程的虚拟地址空间(mmap) 将CPU指令寄存器设置到程序的入口地址,开始执行 可执行文件在装载的过程中实际上如我们所说的那样是映射的虚拟地址空间,所以可执行文件通常被叫做映像文件(或者Image文件)。 可执行ELF文件的两种视角 可执行ELF格式具有不寻常的
我们在获得目标机一个普通的权限时,除了常规提权方法外,还可以通过查找目标主机错误的系统配置和漏洞来获取系统权限。本节所讲的“Trusted Service Paths(可信任服务路径)漏洞”和“系统服务的错误权限配置漏洞”绝对是你值得尝试的一个环节。
在C、C++中我们使用过标准库,比如在使用strerror、vector、string等时,都只是调用了这些函数接口,这些都是需要具体的实现。
”打补丁“的方法可以修复程序bug,给程序添加新功能,“打补丁”的对象可以是文件、内存、数据、代码......
Yum是Linux系统中用于管理软件包的工具,类似于手机上的应用商店。是基于 RPM(Red Hat Package Manager)的系统,用于管理 RPM 软件包 ,它提供了一种方便的方式来搜索、下载、安装和卸载软件包,使得软件的管理变得简单而高效。
领取专属 10元无门槛券
手把手带您无忧上云