【问题标题】:shellcode is truncated by \x20shellcode 被 \x20 截断
【发布时间】:2011-01-28 20:38:22
【问题描述】:

为什么我的 shellcode 在\x20 操作码之后被截断,当它被字符串复制到堆栈到第二个易受攻击的程序上时?

--cmd.exe--
 字符外壳[]=

"\xc7\x44\x24\x0c\x65\x78\x65\x20" ← 只有这一行被放入堆栈,虽然 hv 有足够的空间
"\xc7\x44\x24\x08\x63\x6d\x64\x2e"
"\x31\xc0"
"\x89\x44\x24\x04"
"\x8d\x44\x24\x08"
"\x89\x04\x24"
"\x8d\x05\xad\x23\x86\x7c"
"\xff\xd0";
--end shell--

【问题讨论】:

  • 如果你不能回答这个问题,你真的不应该玩它。 :-)

标签: exploit shellcode winexe


【解决方案1】:

您是否将此 shellcode 作为命令行参数传递?在这种情况下,请查看 0x20 的 ASCII 码;)

【讨论】:

  • Tks Raja to Aswer:]) 所以,我通过 kernel32.dll 库调用 WinExec() 的函数 C 传递它并由 DEVC++ 编译 ..我正在尝试一个 Poc 到我的自己加深认识……有什么问题吗?
  • 是的,可以这样做;通常的解决方案是用引号将命令行参数括起来,但我不确定命令行解析器将如何处理这种情况——毕竟,你不应该像这样传递 shell 代码;)
【解决方案2】:

在整个命令周围加上双引号。 例如,运行:

"$shellcode" (gdb)r "$(python -c 'print "\x41" * 100 + "\x20\x83\x04\x08" + ....')"

【讨论】:

    【解决方案3】:

    我的理论是,引号、空格、null 等内容是由 Windows shell 解释的,而不是通过发送的。你可以以某种方式逃避它,但我认为只对 shellcode 进行编码更容易。因此,请尝试使用 metasploit 的 msfencode 实用程序来完全避免这些操作码。我知道 null (/x00)、空格 (/x20) 和引号 (/x22) 不能直接传递,但我想还有其他操作码也不能传递。

    这是我的解决方案,但有人知道其他更好的解决方案吗?

    【讨论】:

      【解决方案4】:

      \x20 类似于 ASCII 格式的<space>

      【讨论】:

        猜你喜欢
        • 2012-02-04
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2014-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多