弱口令、子域名、md5、偽隨機數、目錄爆破與CTF實戰

星海河發表於2024-11-08

web 21——弱口令爆破&custom iterator

進去要求輸入賬號密碼,賬號輸入admin,一般來說管理員使用者名稱都會是這個,密碼隨便輸,然後burpsuite抓包
可以看到賬號密碼在Authorization傳輸,形式是賬號:密碼的base64加密,把他發到Intruder模組

模式選sniper,因為要對整個賬號密碼字元進行加密,不能分開爆破,選中要爆破的地方

選擇custom iterator模式,在位置1寫入admin,分隔符寫:

位置2匯入提供的字典

新增base64加密,取消選中Palyload Encoding編碼,因為在進行base64加密的時候在最後可能存在==這樣就會影響base64加密的結果

開始攻擊,點選狀態碼進行篩選,找到爆破出的密碼,將密碼解密後為shark63,輸入即可得到flag

web 22——子域名爆破&oneforall

OneForAll,是 shmilylty 在 Github 上開源的子域收集工具,可以實現對子域名的爆破

python oneforall.py --target ctf.show run

可以看到爆破出了很多結果,不過這題的域名失效了,不然應該會有一個flag.ctf.show

web 23——md5爆破&burp&python

看一下程式碼,透過get方式提交一個token引數,要求MD5 加密結果的第 2 位、第 15 位、第 18 位字元是否相等,且這三位字元的數字之和除以第 2 位字元的值是否等於第 32 位字元的數字值

方法1——burpsuite爆破

不管他到底什麼條件,直接burpsuite爆破數字0-500,發現422的時候返回長度不同,422就是滿足條件的

方法2——python指令碼爆破

透過遍歷二字元的字串,尋找符合條件的字串,得到兩個可用字串3jZE

import hashlib  
  
dic = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"  
for a in dic:  
    for b in dic:  
        t = str(a) + str(b)  
        md5 = hashlib.md5(t.encode('utf-8')).hexdigest()  
  
        if md5[1] == md5[14] == md5[17]:  # 確保這些位置的字元相同  
            # 確保這些字元是數字  
            if 48 <= ord(md5[1]) <= 57 and 48 <= ord(md5[14]) <= 57 and 48 <= ord(md5[17]) <= 57:  
                # 確保md5[31]也是數字,並符合數學關係  
                if 48 <= ord(md5[31]) <= 57:  
                    num1 = int(md5[1])  
                    num14 = int(md5[14])  
                    num17 = int(md5[17])  
                    num31 = int(md5[31])  
  
                    # 判斷除數是否為零  
                    if num1 == 0:  
                        continue  # 跳過當前迴圈  
  
                    if (num1 + num14 + num17) / num1 == num31:  
                        print(t)

web 24——初探偽隨機數

本題考察的是php偽隨機數,透過mt_srand(1);播種後,再透過同一隨機數演算法計算出來的隨機數值是固定的,因此只要看一下伺服器php版本,然後在本地起一下以下程式碼就可以得到隨機數了,各位師傅也可以嘗試重新整理,會發現每次給出來的值都是同一個。

<?php
mt_srand(372619038);
echo "隨機數:".mt_rand();
?>

web 25——偽隨機數&種子爆破

要獲得flag,必須輸入token為第二、三個隨機數的和,因此必須知道seed是什麼

傳入?r=0就可以獲得第一個隨機數的負值,為-449307572

接下來就要爆破seed,這裡我們使用php_mt_seed工具,下載與使用方法請自行百度。可以看到爆出來很多seed,由於php版本不同產生的隨機數會略有區別,因此需要選擇與伺服器php版本對應的seed

看一眼php版本,選擇1103714832,這裡可能得幾個都試試,博主試了後兩個都沒出來

寫個php指令碼輸出需要的隨機數

<?php
    mt_srand(1103714832);
    echo mt_rand()."\n";
    $result = mt_rand()+mt_rand();
    echo $result;
?>

提交rtoken,得到flag

web 26——資料庫密碼爆破

本題還是弱口令爆破,就是換到了系統安裝的場景,直接對密碼進行數字的爆破即可,答案是7758521,爆破的量還挺大的
另外這題的程式碼邏輯有點問題,什麼都不填點安裝然後抓包就會發現flag直接在返回包裡了,不過這樣就沒有爆破的味道了,還是建議按上面的方法爆一下

web 27——入口網站爆破

看到一個登陸介面,但是現在啥資訊都沒有,肯定不能直接爆破,看到下面有錄取名單和學籍資訊查詢系統

看到這裡,猜測是爆破身份證號(這裡是生日被隱藏了),然後透過錄取查詢獲得密碼

抓包,這題很奇怪,火狐好像很難抓到包,要麼用谷歌抓,或者用火狐一直點,總歸能抓到。給對生日進行爆破,payload型別選日期,選擇開始與結束的年月日,選擇日期格式,y代表年,M代表月,d代表日

找到長度不同的資料包

返回資訊需要Unicode解碼一下,結果給出學號和密碼,登陸得到flag

# 原始字串
encoded_str = r"\u606d\u559c\u60a8\uff0c\u60a8\u5df2\u88ab\u6211\u6821\u5f55\u53d6\uff0c\u4f60\u7684\u5b66\u53f7\u4e3a02015237 \u521d\u59cb\u5bc6\u7801\u4e3a\u8eab\u4efd\u8bc1\u53f7\u7801"
# 使用 unicode_escape 解碼
decoded_str = encoded_str.encode('utf-8').decode('unicode_escape')
print(decoded_str)

web 28——目錄爆破

看到url是/0/1/2.txt,猜測是對目錄中的數字進行爆破,刪掉2.txt,對01爆破,用cluster bomb模式

設定payload set 1和2都為數字0-99

爆破,找到能訪問的目錄,看一眼返回包就是flag

相關文章