shellcode

shellcode|概述

shellcode通常是软件漏洞利用过程中使用一小段机器代码

作用:

1、启动shellcode,进行交互

2、打开服务器端口等待连接

3、反向连接端口

4、。。。

shellcode编写

编写时面临的问题

下面是一个简短的shell程序:

#include"stdlib.h"

#include"unistd.h"

void main() {

system("/bin/sh");

exit(0);

}

问题:

1、shellcode允许输入普遍较短只有几十个字节

2、无法调用系统函数

软中断

解决方法:

  • 触发软中断(int 0x80或syscall),进行系统调用。

  • system("/bin/sh")底层是调用execve("/bin/sh",0,0)

32位shellcode编写

1.设置ebx指向/bin/sh

2.ecx=0,edx=0

3.eax=0xb

4.Int 0x80触发中断调用

64位shellcode编写

1.设置rdi指向/bin/sh

2.rsi=0,rdx=0

3.rax=0x3b

4.syscall 进行系统调用

64位系统调用和32位系统调用的区别:

1.传参寄存器不同

2.系统调用使用syscall

pwntools生成shellcode

1.设置目标架构

2.生成shellcode

总结

1、对于长度和字符没有限制的shellcode,可以使用pwntools来生成或者搜索现成的shellcode

2、长度有限制的shellcode,可以对照系统调用表手写shellcode

3、字符集有限制的shellcode,可以使用ALPHA3、mf等工具对shellcode进行编码。后者根据限制的字符生成可用的汇编指令再进行指令等价替换。

posted @ 2022-01-17 22:24  vi0let  阅读(189)  评论(0编辑  收藏  举报