shellcode相关内容
我想使用将流重定向到本地函数,然后使用外壳代码返回到原始函数。 我定义了两个简单的函数,并使用objump来获取它们的汇编代码: // unsigned char *g_code = "x55x48x89xe5xb8x2ax00x00x00x5dxc3"; int g() { return 42; } // unsigned char *f_code_original = "x5
..
https://www.exploit-db.com/exploits/46907 我的理解是,由于x64调用约定,execve的第三个参数envp应该存储在RDX中。但是这个外壳代码不会将该寄存器置零,它只会将RSI寄存器(存储ARV)置零。因此,如果RDX的当前值未指向有效位置,则会导致段错误,不是吗? 我是否遗漏了什么? 推荐答案 写rdx(带0):注意syscall
..
我正试图在我的64位Ubuntu上编写我的第一个“Hello world”外壳代码,但它不能工作。 我有文件hello.asm: ; 64-bit "Hello World!" in Linux NASM global _start ; global entry point export for ld section .text _start: ;
..
我想利用基于堆栈的缓冲区溢出来进行教育. 有一个典型的函数使用来自 main 的参数调用,该函数作为程序的输入提供给保存参数的本地缓冲区.给定一个 nops+shellcode+address_shellcode 的输入,我将利用它. 在使用 gdb 调试后,我找到了 shell 代码的地址,因为它将作为参数传递,并且在 strcpy 之后我检查了堆栈和 $ebp+8 已成功地被 sh
..
之前的 相关问题已回答.谢谢!然而,这给我带来了一个新问题.为什么 nasm 将数据字节放在两个不同的内存位置?我在下面包含程序信息和其他数据转储. ---------- 使用 nasm, ld 编译的代码片段 -----部分 .text...零:jmp 短二一:流行ebxxor eax, eaxmov [ebx+12], eaxmov [ebx+8], ebxmov [ebx+7], 人lea
..
我正在尝试运行这个 shellcode,但我不断收到分段错误 /* call_shellcode.c *//*一个创建包含启动shell代码的文件的程序*/#include #include #include 常量字符代码[] ="\x31\xc0"/* 第 1 行:xorl %eax,%eax */"\x50"/* 第 2 行: pus
..
在理解二进制文件(虚拟内存布局、执行等)的过程中,我编写了一个 C 代码,它声明了一个包含可执行代码字节的全局字符串,然后我通过在 main() 中声明一个指针 (PTR),使用一个简单的技巧将 main() 函数的返回地址覆盖到该可执行代码这是在堆栈上保留的本地内存区域 2 WORDS 远离 main() 的返回地址,所以我所做的就是将返回地址的地址分配给该指针 (PTR=(int*)&PTR+
..
我尝试通过 C 程序运行很多 shell 代码来测试它们.在这里 #include#includeunsigned char code[] = "shell here";主要的(){printf("Shellcode 长度: %d\n", strlen(code));int (*ret)() = (int(*)()) 代码;ret();} 这里是shell
..
我有以下有效的 NASM 代码: 全局 _start节.text_开始:移动 eax, 0x4移动 ebx, 0x1mov ecx, 消息移动 edx, 0xF整数 0x80移动 eax, 0x1移动 ebx, 0x0整数 0x80.data 节消息:db "Hello, World!", 0dh, 0ah 将“Hello, World!\n"打印到屏幕上.我还有以下 C 包装器,其中包含以前
..
我是 x86_64 汇编编程的新手.我正在用 x86_64 程序集编写简单的“Hello World"程序.下面是我的代码,它运行得很好. 全局 _start.data 节msg: db "你好,SLAE64 的世界", 0x0amlen equ $-msg节.text_开始:mov rax, 1mov rdi, 1mov rsi, 味精mov rdx, mlen系统调用mov rax, 60m
..
我正在研究execve shellcode, 操作系统:Linux bt 2.6.39.4 root@bt:~/exploit# cat gshell.s .globl _start_开始:没有jmp 我的字符串壳:popl %esixorl %eax,%eaxmovl %al,9(%esi)movl %esi,10(%esi)movl %eax,14(%esi)movb $11,%
..
我想要一个简单的 C 方法,能够在 Linux 64 位机器上运行十六进制字节码.这是我拥有的 C 程序: char code[] = "\x48\x31\xc0";#include int main(int argc, char **argv){int (*func) ();func = (int (*)()) 代码;(int)(*func)();printf("%s\n","完成");}
..
我想将 Intel x86 汇编代码转换为 ARM.我不知道如何使用堆栈. 我使用 int 0x80 系统调用为 32 位 x86 Linux 编写了一个对 execve 的调用. 但是,ARM 使用 svc 或 swi. 但我不知道如何使用这样的东西: push 0x0068732f 和 push 0x6e69622f .globl main主要的:推送 0x0068732f推
..
我正在学习计算机安全的基础知识,并且正在尝试执行我编写的一些 shellcode.我按照这里给出的步骤 http://dl.packetstormsecurity.net/papers/shellcode/own-shellcode.pdf http://webcache.googleusercontent.com/search?q=cache:O3uJcNhsksAJ:dl.pack
..
我想编写一个汇编程序,通过 EXECVE(系统调用 #0x3C)程序/bin/ls 和 -al 开关执行. 手册页 (man 2 execve) 指出调用需要三个值: int execve(const char *filename, char *const argv[], char *const envp[]); 我不太明白如何构建这三个参数.据我所知,第一个参数进入RDI,第二
..
在汇编语言中,有没有一种方法可以在不使用 call 后跟 pop 的情况下访问指令指针 (RIP) 中的值?或者是否有可以做到这一点的机器代码操作码? 我一直在谷歌搜索,没有明确的结果. 我的问题是机器代码中不能有任何零,否则我会收到 SIGSEGV 错误.这是由于服务器加载代码并从一串字节执行它的方式.近调用在到子例程的距离上为零,因此不能选择使用调用. 我使用的是 64 位
..
我正在处理类似 ctf 的挑战,它正在过滤我的 shellcode,以确保我没有 syscall、sysenter 和 int 指令的十六进制值编码,分别为 0x0f05 0x0f34 和 0x80cd.基本上我有一个可以打开文件的shellcode,但它包含系统调用指令.任何有助于理解如何操作它的帮助,因此我仍然可以进行系统调用,而无需将序列 0x0f05 显式放入我的 shellcode 中.
..
我的代码: .section .data名称:.string“/bin/sh";参数:.string "-c";.string “ls".section .text.globl _start_开始:推送 $0推送名称movq 59 美元,%raxmovq %rsp, %rdi推送 $0推送参数movq %rsp, %rsimovq $0, %rdx系统调用 我知道 execve 的第二个参数是
..
我刚刚开始研究缓冲区溢出攻击的工作原理,并尝试模拟对Windows 7 使用Visual C 2010.缓冲区溢出攻击非常做作,它只是将返回地址覆盖为“缓冲区"局部变量的地址.缓冲区保存着 shellcode 字符串. 无论我是否在 Visual Studio 2010 Debug 中运行程序,程序都会跳转到 shellcode 并几乎开始执行它,但我收到访问冲突错误,并且程序不会继续执行s
..
对于我尝试在 ubuntu 64 位版本下创建 NASM 示例并在组装并链接到 ELF 后执行它时的问题.当我执行 时,它返回如下错误消息 NASM -f elf64 -o firstasm.o firstasm.asmld -o firstasm firstasm.o第一节 分段错误(核心转储) 我的 NASM 代码将在我尝试执行简单的 write() 和 exit() 函数的下
..