Assembly 程序集x86:execve具有多个参数
我想编写一个外壳代码来执行sys_execve/usr/bin/scp,usr/bin/scp,args,NULL 这是完整的命令: scp-i/tmp/file-p8989/path/fileuser@ip:/home/user 问题是我需要大量的寄存器,scp之后有6个令牌:Assembly 程序集x86:execve具有多个参数,assembly,x86,execve,Assembly,X86,Execve,我想编写一个外壳代码来执行sys_execve/usr/bin/scp,usr/bin/scp,args,NULL 这是完整的命令: scp-i/tmp/file-p8989/path/fileuser@ip:/home/user 问题是我需要大量的寄存器,scp之后有6个令牌: cdq push edx push user@ip:/home/user mov edi,esp push edx push /path/file mov esi,esp push edx push 8989 m
cdq
push edx
push user@ip:/home/user
mov edi,esp
push edx
push /path/file
mov esi,esp
push edx
push 8989
mov ecx,esp
push edx
push -P
mov eax,esp
push edx
push /tmp/file
???
push edx
push -i
???
push edx
push /usr/bin/scp
mov ebx,esp
我试着像这样推动寄存器:
cdq
push edx
push user@ip:/home/user
mov edi,esp
push edx
push /path/file
mov esi,esp
push edx
push 8989
mov ecx,esp
push edx
push -P
mov eax,esp
push edx
push edi
push esi
push ecx
push eax
mov ecx,esp
push edx
push /tmp/file
mov edi,esp
push edx
push -i
mov esi,esp
push edx
push /usr/bin/scp
mov ebx,esp
push edx
push ecx
push edi
push esi
push ebx
mov ecx,esp
int 0x80
但使用gdb和libemu,我看到它们只产生垃圾字节。
有没有关于如何解决这个问题的提示
推送/路径/文件
这个指令应该做什么
推送字符串的地址
将字符串本身写入堆栈
我试着像这样推动寄存器:
cdq
push edx
push user@ip:/home/user
mov edi,esp
push edx
push /path/file
mov esi,esp
push edx
push 8989
mov ecx,esp
push edx
push -P
mov eax,esp
push edx
push edi
push esi
push ecx
push eax
mov ecx,esp
push edx
push /tmp/file
mov edi,esp
push edx
push -i
mov esi,esp
push edx
push /usr/bin/scp
mov ebx,esp
push edx
push ecx
push edi
push esi
push ebx
mov ecx,esp
int 0x80
您需要做的是:
将值推送到32位
将指针32位推送到每个要使用的环境字符串
将ESP寄存器复制到EDX mov EDX,ESP
将值0和指针推送到每个命令行参数,包括可执行文件名argv[0];先推最后一个参数
将ESP复制到ECX
将指向可执行文件名的指针写入EBX
将0x0B写入EAX
执行int 0x80
假设您使用Linux
--编辑--
不要将所有内容都存储在寄存器中
我将在程序代码中存储固定字符串:
call xx
xx:
pop edx
lea ecx,[edx+p1-xx]
push ecx # ecx is now a pointer to "/some/file"
lea ecx,[edx+p2-xx]
push ecx # ecx is now a pointer to "/other/file"
...
int 0x80
p1:
db "/some/file",0
p2:
db "/other/file",0
可能重复的THX!但我的问题是我没有足够的注册表。我必须写6个令牌,每个令牌取一个寄存器。我有一个空间问题,我不知道如何解决它: