天天看點

小白Ctfer 日常做點題

01攻防世界ics-06

https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=4920&page=1

這題 表面特别吓人

實際上可以進入報表中心

小白Ctfer 日常做點題

進入報表中心後 仔細觀察url發現有個參數

思考了半天查了題解(丢人)

這題的做法是 直接爆破url(非常靈異 沒啥技術可言)

用python代碼弄出1-1w的數字

然後粘到爆破子產品裡開始爆破

小白Ctfer 日常做點題

排序一下長度發現有一個不是1866的 那個id就是有問題的

小白Ctfer 日常做點題

直接向url輸入對應的id值即可拿到flag

小白Ctfer 日常做點題

02 種族歧視

分值: 300

小明同學今天通路了一個網站,竟然不允許中國人通路!太坑了,于是小明同學決心一定要進去一探究竟!

http://lab1.xseclab.com/base1_0ef337f3afbe42d5619d7a36c19c20ab/index.php

小白Ctfer 日常做點題

抓個包改一下語言(我直接改成啞巴(神秘)) 被當成外國人 就能拿到flag了

(其實我發現瞎填假裝自己是外星人也可

小白Ctfer 日常做點題

03 key究竟在哪裡呢?

分值: 200

上一次小明同學輕松找到了key,感覺這麼簡單的題目多無聊,于是有了找key的加強版,那麼key這次會藏在哪裡呢?

抓包 然後重發 在響應裡發現了key

http://lab1.xseclab.com/base7_eb68bd2f0d762faf70c89799b3c1cc52/index.php

小白Ctfer 日常做點題

04 key又找不到了

分值: 350

小明這次可真找不到key去哪裡了,你能幫他找到key嗎?

http://lab1.xseclab.com/base8_0abd63aa54bef0464289d6a42465f354/index.php

點選超連結跳轉到沒有key的界面抓包

重發後得到提示 根據提示修改url拿到key

小白Ctfer 日常做點題

05 冒充登陸使用者

分值: 200

小明來到一個網站,還是想要key,但是卻怎麼逗登陸不了,你能幫他登陸嗎?

http://lab1.xseclab.com/base9_ab629d778e3a29540dfd60f2e548a5eb/index.php

這題抓包 把cookie的login改成1發送即可

小白Ctfer 日常做點題

06 Bugku 網站被黑

http://123.206.87.240:8002/webshell/

先用禦劍掃描背景 發現可以進shell.php

小白Ctfer 日常做點題

進入後發現需要輸入密碼

然後用burp用預設字典爆破密碼 成功黑入√

實戰中常用 但其實沒技術含量

07 Bugku flag在index裡

http://123.206.87.240:8005/post/

點進去超連結

注意到url位址 http://120.24.86.145:8005/post/index.php?file=show.php

這是一個典型的檔案包含漏洞 file關鍵字是提示

ip+/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

然後得到的字元base64解碼即可

下面解釋一下

php://是一種協定名稱

php://filter/是一種通路本地檔案的協定

/read=convert.base64-encode/表示讀取的方式是base64編碼

resource=index.php表示目标檔案為index.php

通過傳遞這個參數可以得到index.php的源碼

原理就是

源碼中有include函數

表示從外部引入php檔案并執行 如果執行不成功 就傳回檔案的源碼

而include的内容是由使用者控制的 是以通過我們傳遞的file參數 include()函數會引入了index.php的base64編碼格式

因為是base64編碼格式 函數看不懂base64亂七八糟的東西

是以執行不成功 傳回源碼

是以我們得到了源碼的base64格式 解碼即可

如果不進行base64編碼傳入 就會直接執行 得不到源碼

08 Bugku 頭等艙

http://123.206.87.240:9009/hd.php

乍一看确實啥也沒有

傳統藝能抓個包 重發 結果發現響應裡有flag(類似的題似乎做過)

水題

09 Bugku 管理者系統

http://123.206.31.85:1003/

這題 抓個包 發現本機ip不讓通路

輸入使用者名為admin

密碼輸入為源碼底部base64解碼的密碼

聯想到攻防世界說可以僞造XFF

我就直接僞造XFF為127.0.0.1 假裝是本地

發包拿到flag

010 Bugku WEB4

http://123.206.87.240:8002/web4/

先檢視源碼

<html>
<title>BKCTF-WEB4</title>
<body>
<div style="display:none;"></div>
<form action="index.php" method="post" >
看看源代碼?<br>
<br>
<script>
var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62';
var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b';
eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));
</script>

<input type="input" name="flag" id="flag" /> 
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
           

我發現 這些都可以hex解碼

仔細觀察後發現

eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));
           

這暗示字元串拼接 我可以用p1 中間那段 和p2拼接在一起

解碼得到

function checkSubmit()
{var a=document.getElementById("password");if("undefined"!=typeof a)
{if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
return!0;alert("Error");a.focus();return!1}}
document.getElementById("levelQuest").onsubmit=checkSubmit;
           

送出67d709b2b54aa2aa648cf6e87a7114f1拿到flag

011 [HCTF 2018]WarmUp

<?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }
 
            if (in_array($page, $whitelist)) {
                return true;
            }
 
            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
 
            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }
 
    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?>
           

代碼審計

發現可以康康hint.php

進去康康發現提示

小白Ctfer 日常做點題
if (! empty($_REQUEST['file'])  //$_REQUEST['file']值非空
        && is_string($_REQUEST['file'])  //$_REQUEST['file']值為字元串
        && emmm::checkFile($_REQUEST['file'])  //能夠通過checkFile函數校驗
    ) {
        include $_REQUEST['file'];  //包含$_REQUEST['file']檔案
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
        //列印滑稽表情
    } 
           

要滿足三個條件

1.值為非空
2.值為字元串
3.能夠通過checkFile()函數校驗
           

再來看checkfile函數

public static function checkFile(&$page)//将傳入的參數賦給$page
    {
        $whitelist = ["source"=>"source.php","hint"=>"hint.php"];//聲明$whitelist(白名單)數組
        if (! isset($page) || !is_string($page)) {//若$page變量不存在或非字元串
            echo "you can't see it";//列印"you can't see it"
            return false;//傳回false
        }
 
        if (in_array($page, $whitelist)) {//若$page變量存在于$whitelist數組中
            return true;//傳回true
        }
 
        $_page = mb_substr(//該代碼表示截取$page中'?'前部分,若無則截取整個$page
            $page,
            0,
            mb_strpos($page . '?', '?')
        );
        if (in_array($_page, $whitelist)) {
            return true;
        }
 
        $_page = urldecode($page);//url解碼$page
        $_page = mb_substr(
            $_page,
            0,
            mb_strpos($_page . '?', '?')
        );
        if (in_array($_page, $whitelist)) {
            return true;
        }
        echo "you can't see it";
        return false;
    }
           

第四個if語句中

先進行url解碼再截取

是以我們可以将?經過兩次url編碼

在伺服器端提取參數時解碼一次

checkFile函數中解碼一次

(’?‘兩次編碼值為’%253f’)構造url:

經過各種審計(其實我沒整明白 我隻知道?會被解碼兩次 是以需要編碼兩次 變成%253以繞過判斷 最後通過神奇目錄穿透拿到答案)

source.php?file=source.php%253f…/…/…/…/…/ffffllllaaaagggg

012 [極客大挑戰 2019]Havefun

小白Ctfer 日常做點題

我以為答案在注釋裡(想多了)

實際上 如果把dog傳值給cat送出上去

會出現另一個答案()

這題 沒啥說的

013 [極客大挑戰 2019]Secret File

小白Ctfer 日常做點題

開幕雷擊

小白Ctfer 日常做點題

檢視源碼發現提示 通路了一下那個archive的檔案

小白Ctfer 日常做點題

點一下

小白Ctfer 日常做點題

啥也沒有

小白Ctfer 日常做點題

點一下再抓包

小白Ctfer 日常做點題

發現了這個

小白Ctfer 日常做點題

直接通路不行

小白Ctfer 日常做點題

拿僞協定繞過 base64解碼後 得到flag 并發現他想要女友(啧)

小白Ctfer 日常做點題

014 [ACTF2020 新生賽]Include

小白Ctfer 日常做點題

我DNA直接起反應了

當場一套僞協定操作 base64編碼flag檔案丢過去base64解碼拿flag

015 [護網杯 2018]easy_tornado

這題我真的不會

查了也了解了半天

md5線上編碼各種翻車 最後隻好用py腳本跑了一遍

三個檔案分别點開

小白Ctfer 日常做點題

目的很清晰

我們需要知道cookie那個檔案還有filename 然後進行加密操作

現在filename已經知道了

cookie的話 就要搞模闆注入了

msg={{handler.settings}}
           

dalao直接這樣做了

這個叫ssti攻擊 老實說我完全不懂 反正可以靠這個辦法拿到cooke那個檔案

加密後

給filehash傳值 檔案名寫flllll那個名字

千萬千萬别在檔案名後加.txt

我就是這樣被卡到吐血

然後操作完就拿到flag了

繼續閱讀