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