700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > [代码审计]Textpattern4.8.4任意文件上传漏洞

[代码审计]Textpattern4.8.4任意文件上传漏洞

时间:2018-11-07 22:20:39

相关推荐

[代码审计]Textpattern4.8.4任意文件上传漏洞

在网上看到的公开不久,自己无聊随意进行分析一下啦

利用点在后台上传插件的地方

从这里跟踪发现其调用了plugin_upload函数

照顾小白加一点批注吧

function plugin_upload(){$plugin = array();if ($_FILES["theplugin"]["name"]) {//获取上传表单$filename = $_FILES["theplugin"]["name"];$source = $_FILES["theplugin"]["tmp_name"];//获取插件目录地址$target_path = rtrim(get_pref('tempdir', PLUGINPATH), DS).DS.$filename;//将文件上传至插件目录下if (move_uploaded_file($source, $target_path)) {extract(pathinfo($target_path));//下面是解压,不多说if (strtolower($extension) === 'php') {$write = true;$plugin = Txp::get('\Textpattern\Plugin\Plugin')->read(array($filename, $target_path));} elseif (class_exists('ZipArchive')) {$zip = new ZipArchive();$x = $zip->open($target_path);if ($x === true) {for ($i = 0; $i < $zip->numFiles; $i++) {if (strpos($zip->getNameIndex($i), $filename.'/') !== 0) {$makedir = true;break;}}$zip->extractTo(PLUGINPATH.(empty($makedir) ? '' : DS.$filename));$zip->close();$plugin = Txp::get('\Textpattern\Plugin\Plugin')->read($filename);}}//删除原文件unlink($target_path);}}$message = Txp::get('\Textpattern\Plugin\Plugin')->install($plugin, null, !empty($write));plugin_list($message);}

因此我们不难发现其对上传的文件解压后无过滤,因而能够根据目录路径找到上传地址,利用方法是先用个php文件当中放入webshell,之后压缩为zip文件后上传访问,比如我这个默认地址为http://url/textpattern/plugins/y4/index.php

给大家看下利用截图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。