【发布时间】:2019-09-06 12:22:14
【问题描述】:
我编写了一段 x64 linux 程序集。它所做的只是打印一行“Hello world”,仅此而已。但是我想做的是通过 objdump 从它的目标文件中复制字节,这样我就可以为我的缓冲区溢出攻击制作自己的 shellcode。
我面临的问题是 shellcode 包含大量空字节,这将终止我的 shellcode 的执行。
root@kali:~/C scripts/shellcode/Assembly Based Shellcode# cat print.asm
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, message
mov rdx, 12
syscall
mov rax, 60
xor rdi, rdi
syscall
message:
db "Hello world", 10
root@kali:~/C scripts/shellcode/Assembly Based Shellcode# nasm -f elf64 print.asm && ld print.o -o print && ./print
Hello world
root@kali:~/C scripts/shellcode/Assembly Based Shellcode# objdump -D print.o
print.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <_start>:
0: b8 01 00 00 00 mov $0x1,%eax
5: bf 01 00 00 00 mov $0x1,%edi
a: 48 be 00 00 00 00 00 movabs $0x0,%rsi
11: 00 00 00
14: ba 0c 00 00 00 mov $0xc,%edx
19: 0f 05 syscall
1b: b8 3c 00 00 00 mov $0x3c,%eax
20: 48 31 ff xor %rdi,%rdi
23: 0f 05 syscall
0000000000000025 <message>:
25: 48 rex.W
26: 65 6c gs insb (%dx),%es:(%rdi)
28: 6c insb (%dx),%es:(%rdi)
29: 6f outsl %ds:(%rsi),(%dx)
2a: 20 77 6f and %dh,0x6f(%rdi)
2d: 72 6c jb 9b <message+0x76>
2f: 64 fs
30: 0a .byte 0xa
root@kali:~/C scripts/shellcode/Assembly Based Shellcode#
我希望 shellcode 没有空字节。然而事实并非如此。 有人可以帮我改正我的代码吗?
【问题讨论】:
-
使用字节加载并寻找其他替代方法来避免零字节。请参阅指令集参考。例如。
mov rax, 1可以写成xor eax, eax; mov al, 1。 -
不幸的是,我找不到那个集合参考。如果你这样做,请也给我。即使这对我也有帮助,谢谢!
-
请注意,除了修复 NUL 字节之外,您还需要使您的代码位置独立。让我看看我能不能写一个合适的答案。
-
@fuz,是的,请!位置无关是什么意思。
标签: assembly x86-64 nasm shellcode