2019-03-16 第一次SKCTF小組組內(nèi)練習(xí)賽Writeup

第一次打比較正式的比賽,也看到了自己有多么菜。

Web

easy_parse

考察prase_str()變量覆蓋漏洞

打開鏈接只看到“an easy web”,可以在網(wǎng)頁(yè)源代碼的注釋部分找到一部分源碼:

parse_str函數(shù)的作用就是解析字符串并注冊(cè)成變量。使用這個(gè)函數(shù)在注冊(cè)變量之前不會(huì)驗(yàn)證當(dāng)前變量是否存在,所以會(huì)直接覆蓋掉已有變量,造成變量覆蓋漏洞。

構(gòu)造payload: ?a=boom=givemeflag,拿到flag。

web_1

考察PHP類型轉(zhuǎn)換將超過(guò)精度的浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)

打開之后可以看到一些源碼。

補(bǔ)充:
對(duì)于“==”的類型轉(zhuǎn)換,PHP首先讀取這個(gè)浮點(diǎn)數(shù),然后進(jìn)行類型轉(zhuǎn)換。
當(dāng)給定的數(shù)的精度超過(guò)了double類型的精度(小數(shù)點(diǎn)后15)位時(shí),就會(huì)四舍五入取整。
這不是PHP的問(wèn)題,是double所存儲(chǔ)的精度的問(wèn)題。

這時(shí)候只要讓id等于0.999999999999999999……就可以成功繞過(guò)。

payload: ?id=0.999999999999999999999999999999

成功得到flag。

爆破

考察使用Burp Suite暴力破解

題目名稱提示了“爆破”,那肯定是要暴力破解了。

打開之后發(fā)現(xiàn)一段正則表達(dá)式:

所以可以推測(cè)出pass的值應(yīng)該為skctf?????,問(wèn)號(hào)部分為從00000到99999的五位整數(shù)。

同時(shí)在網(wǎng)頁(yè)源代碼里發(fā)現(xiàn)如下提示:

訪問(wèn)一下那個(gè)頁(yè)面,隨便寫個(gè)數(shù)字上去,抓包,Ctrl+I,爆破位置設(shè)置在五位數(shù)字上:

Payload設(shè)置如下:

開始爆破,發(fā)現(xiàn)在payload為77777時(shí)回顯有變化,所以知道正確的值應(yīng)該是77777,將這個(gè)數(shù)字替換掉之前隨便寫的數(shù)字,得到flag。

這道題跟Bugku的“輸入密碼查看flag”的做法幾乎一模一樣,只是需要自己判斷格式和在網(wǎng)頁(yè)源代碼中尋找需要爆破的頁(yè)面??梢詤⒖家幌拢?a href="http://www.itdecent.cn/p/51a2b325b5ea" target="_blank">http://www.itdecent.cn/p/51a2b325b5ea

login

一道比較特殊的SQL注入題

打開之后就一個(gè)登錄頁(yè)面,但是在響應(yīng)頭里發(fā)現(xiàn)了一些Base64加密的字符串:

將它們解碼可以得到一段源碼:

$sql="SELECT username,password FROM admin WHERE username='".$username."'";
if (!empty($row) && $row['password']===md5($password)){
}

很顯然是SQL注入題。大概意思就是可以通過(guò)構(gòu)造一個(gè)不存在的用戶名來(lái)登錄,但是需要有這個(gè)用戶名對(duì)應(yīng)的密碼的MD5值,可以用union select來(lái)實(shí)現(xiàn)。

隨便構(gòu)造一個(gè)不存在的用戶和不存在的密碼,POST方式提交即可。

payload:username=admin123' union select 1,'25d55ad283aa400af464c76d713c07ad'%23&password=12345678

顯示"login success!"之后就能看到flag了。

blog

考察用腳本爆破MD5截?cái)囹?yàn)證、vim異常退出產(chǎn)生.swp文件泄露、extract變量覆蓋

打開之后是一個(gè)很普通的博客頁(yè)面,進(jìn)入LINK下的“勿進(jìn)”頁(yè)面:

可以看到一段源碼,是熟悉的MD5截?cái)囹?yàn)證:

而且刷新之后MD5的值不會(huì)發(fā)生變化。

直接使用腳本爆破,爆破使用的腳本如下:

import hashlib
for i in range (1000000):
    a=str(i)
    md5=hashlib.md5(a.encode('utf-8')).hexdigest()
    if md5[0:5]=='6a35b':
        break
print (a)

運(yùn)行一下得到value的值為487697,構(gòu)造payload: ?value=487697

進(jìn)入下一個(gè)頁(yè)面:

很明顯是vim異常退出的知識(shí)點(diǎn)。

既然是登錄頁(yè)面,那么應(yīng)該是login.php,.swp的文件名應(yīng)該是.login.php.swp,果然有這個(gè)文件:

下載之后訪問(wèn),可以看到一部分源碼:

  }else{        
ob_end_flush();         
header('Location: ./admin.php');        
 $_SESSION['isadmin'] = 1;    
 if($username === 'admin' && md5($password) === $md5)
{     
extract($_POST); 
if(isset($_POST['username'])&&isset($_POST['password']))
{ 
$md5 = 'fac6d830e795e0ccbd36da173ddc3ac0'; 

試著去破解了一下這串MD5,沒得到結(jié)果,看來(lái)不是爆破MD5。

注意到“extract($_POST)”,說(shuō)明這里應(yīng)該有變量覆蓋漏洞。

extract() 該函數(shù)使用數(shù)組鍵名作為變量名,使用數(shù)組鍵值作為變量值。針對(duì)數(shù)組中的每個(gè)元素,將在當(dāng)前符號(hào)表中創(chuàng)建對(duì)應(yīng)的一個(gè)變量。

所以可以直接構(gòu)造一個(gè)任意的密碼,并傳入一個(gè)md5參數(shù),用這個(gè)密碼的MD5值覆蓋掉之前的MD5。

payload: username=admin&password=123456&md5=e10adc3949ba59abbe56e057f20f883e

成功登錄:

flag在This is admin page這篇文章里:

RE

真正的簽到題!

用IDA打開就能看到flag

(悄悄吐槽一句那個(gè)“假的簽到題”對(duì)我等逆向小白真的是十分不友好……)

Crypto

簽到題

考察十六進(jìn)制轉(zhuǎn)文本

開頭有0x,推測(cè)這是十六進(jìn)制的字符串。去掉開頭的0x,將其余部分轉(zhuǎn)換為字符串即可。

緊急報(bào)文

考察ADFGX密碼的解密

在實(shí)驗(yàn)吧做過(guò)一道相同加密方式的題目,所以很容易知道這是ADFGX密碼,對(duì)照著密文表一個(gè)個(gè)解出來(lái)就行。

附網(wǎng)上搬來(lái)的密文表:

閱讀順序是先豎后橫

對(duì)照之后就可以解出flag:buedoctf

rsa

很基礎(chǔ)的RSA題目,用CTF-RSA-tool解密

將密文存為一個(gè)文本文檔,用CTF-RSA-tool解密就可以得到flag。

(比賽過(guò)程中我的CTF-RSA-tool居然崩了,好在最后關(guān)頭被我救回來(lái)了,否則這么多分就沒了啊orz)

misc

Excel

Excel解密題,其實(shí)用WinHex就能找到flag

這道題我其實(shí)糾結(jié)了很久,又是寫腳本又是暴力破解,都沒成功,最后機(jī)緣巧合之下發(fā)現(xiàn)居然在WinHex里直接搜索flag就能找到flag。

這道題成功地讓我感到自己的智商受到了侮辱……

morse

最基本的音頻隱寫題,考察摩斯密碼的解密

題目名稱提示了“Morse”,文件又是音頻,那肯定是音頻中藏有摩斯密碼。

用Audition打開可以很容易地發(fā)現(xiàn)一個(gè)聲道里有摩斯密碼:

解密這些摩斯密碼就能得到flag。

easy_stego

最基本的圖片隱寫,考察查看圖片詳細(xì)信息

把圖片下載下來(lái),在圖片詳細(xì)信息中的標(biāo)記里就能找到flag。

unzip

大概是考察UNIX時(shí)間戳和一小部分暴力破解吧

這道題沒放hint之前一直不知道該怎么做,后來(lái)放了一個(gè)hint:"時(shí)間戳",于是百度了一下:

時(shí)間戳(timestamp),一個(gè)能表示一份數(shù)據(jù)在某個(gè)特定時(shí)間之前已經(jīng)存在的、 完整的、 可驗(yàn)證的數(shù)據(jù),通常是一個(gè)字符序列,唯一地標(biāo)識(shí)某一刻的時(shí)間。

可以看到.zip文件的創(chuàng)建時(shí)間,但是不知道秒數(shù),這時(shí)候可以先生成一個(gè)時(shí)間戳,再使用工具爆破秒數(shù)。

先利用創(chuàng)建時(shí)間生成一個(gè)秒數(shù)為0的時(shí)間戳,再使用ziprello爆破:

因?yàn)橹挥?0個(gè)可能的密碼,所以秒破:

用這個(gè)密碼解壓壓縮包,在壓縮包內(nèi)的flag.txt文件里可以找到flag。

bwm

考察圖片隱寫中的盲水印

有兩張圖片,這種情況下要么是將兩張圖片進(jìn)行異或運(yùn)算,然后在異或得到的圖片里找flag,要么是盲水印,而這道題是盲水印。

用BlindWaterMark工具可以獲得盲水印的圖片:

flag就在圖上。

下面是有思路但是沒做出來(lái)的

Web

Simple_JWT

考察JWT的偽造

一個(gè)JWT實(shí)際上就是一個(gè)字符串,它由三部分組成:頭部、載荷與簽名。JWT中常用的簽名算法是 HS256。簽名是用前兩部分通過(guò)HS256加密算法得出來(lái)的。

其實(shí)這道題就是偽造JWT來(lái)繞過(guò),但是我下到的兩個(gè)破解JWT加密的工具全都不能用,就沒做出來(lái)。問(wèn)了問(wèn)其他大佬也是這樣,以后慢慢搞吧。

其實(shí)正確的解法應(yīng)該是:先抓包找到JWT,然后使用這個(gè)網(wǎng)站:https://jwt.io/來(lái)在線調(diào)試JWT,用解密工具解出加密第三段的秘鑰,最后偽造成admin登錄。

報(bào)菜名

這道題的原意應(yīng)該是寫Python爬蟲來(lái)爬取頁(yè)面上的數(shù)字信息,然后自動(dòng)計(jì)算、自動(dòng)提交

因?yàn)轫?yè)面含有中文,會(huì)報(bào)編碼錯(cuò)誤,一直沒找到好的解決方法,就沒解出來(lái)。

賽后問(wèn)了做出這道題的那個(gè)大佬才知道其實(shí)這道題有BUG,頁(yè)面不會(huì)自動(dòng)刷新,只有手動(dòng)刷新才會(huì)更改頁(yè)面上的數(shù)據(jù),所以直接計(jì)算就可以。

先把網(wǎng)頁(yè)上的數(shù)據(jù)保存到Word文檔中,再去掉漢字和:,最后放到EXCEL里用sum函數(shù)計(jì)算總和,將計(jì)算的結(jié)果填入頁(yè)面上的輸入框,點(diǎn)擊“提交”,就能得到flag。

blind_sqli

考察基于布爾的時(shí)間盲注

雖然看了hint知道是基于布爾的時(shí)間盲注,但因?yàn)镾QL注入這里目前我只會(huì)用sqlmap,所以就沒做出來(lái)。

后來(lái)看官方wp說(shuō)可以用sqlmap做,但我用sqlmap卻找不到注入點(diǎn),求大佬指教。

misc

涼宮春日的消失

考察LSB隱寫之查看圖片低位數(shù)據(jù)

以前也做過(guò)這一類的圖片隱寫,但這次可能是因?yàn)閺纳衔缇劈c(diǎn)跟大佬們一起沒吃午飯沒睡午覺打到下午,腦子徹底糊了,就沒做出來(lái)。

用stegsolve的Data Extract功能,分別查看R、B、G三個(gè)通道的最低位,可以發(fā)現(xiàn)flag的三個(gè)部分,拼起來(lái)就得到flag。

Crypto

^

似乎是考察異或運(yùn)算的知識(shí)?

看到這個(gè)符號(hào)我就大概猜出來(lái)是異或了,但是我本來(lái)以為是以中間的異或運(yùn)算符為界,兩邊互相異或,放出hint“異或一個(gè)字符”之后也不明白,最后看了官方wp發(fā)現(xiàn)是與0x7異或,這是為什么???求大佬解答。

其他的題目(其實(shí)就是web2和phar這兩道題,一個(gè)是用var_dump()在本地查看變量值,這個(gè)知識(shí)點(diǎn)明白但是不知道怎么運(yùn)用進(jìn)去的;一個(gè)是phar反序列化,這個(gè)以前根本就沒見過(guò)……)看了官方wp也沒搞得很明白,以后慢慢學(xué)吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容