router_vuln_shellcode
基于MIPS的Shellcode开发
MIPS Linux系统调用
Mips中采用了syscall指令进行系统调用。
调用方法
在进行syscall调用前:
- 需要使用
$v0
来保存需要执行的系统调用号; - 按照调用规则构造系统调用参数,伪代码为
syscall($v0, $a0, $a1, $a2)
;
例如,如下代码调用了exit系统调用:
li $a0, 0 |
一般而言,在mips的/include/asm/unistd.h中,可以找到对应的系统调用号,例如如上所示的4001号调用exit,就可以在其中找到。
例子
write
可以看到进行write系统调用需要三个参数,$a0
指定了文件描述符,$a1
指定了输出缓冲区的地址,也可以理解为指向要输出的信息的地址指针,$a2
指定了输出的字符数量;
在C语言中,可以这样调用write进行输出;
int main(){ |
生成汇编文件
$ /home/klose/mips/cross-compiler-mips/bin/mips-gcc write.c -S -o write.s |
查看write.s的内容:
.file 1 "write.c" |
生成可执行文件;
$ /home/klose/mips/cross-compiler-mips/bin/mips-gcc --static write.c -o write |
使用readelf查看程序入口地址;
readelf -S write |
得到结果;
[ 2] .init PROGBITS 004000cc 0000cc 00008c 00 AX 0 0 4 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 K1ose's Space!