HDCTF-2nd覆盤
本文首發於“合天網安實驗室”作者: 淡灬看夏丶戀雨
海南大學校內賽。國慶打的,之前沒時間復現。校外人水了個紀念品。感謝Gamous不捨賜教。感動的哭了。比賽的覆盤。有些沒做出來的闊以看官方wp。題附及官方wp已打包:
藍奏:
https://wws.lanzous.com/i7HmLhmw18f
百度雲:連結:
https://pan.baidu.com/s/1mKWDG-bftD-kPAeZwEUvGw
提取碼:bcxv
1、WEB
signin:
開啟網頁,原始碼,base64解碼
babysql(ACTF題):
這題,一開始以為是純注入,一個一個試'load_file','information_schema'。還過濾了挺多東西的,後來就直接繞過注入,直接select即可。看提示(劃線劃掉的)也是
查完欄位是三個之後,直接查詢flag即可。
1' union select 1,2,flag from flag#
babyrce(ACTF題):
這題也沒啥限制,就是最簡單的rce,../ 就返回上級目錄,flag就是flag檔案。
easygit(ACTF題):
git洩露,github上找個工具,下了原始碼直接cat flag就好了
backup_file(ACTF題):
index.php.bak,備份檔案,根據原始碼繞過就好了,構造?key=123即可
考點應該是php弱型別
參考別人總結的:
https://www.cnblogs.com/Mrsm1th/p/6745532.html
intval函式直接將值轉換成數字,即數字跟字串比較。
傳key=123即可繞過限制。
easy_file_include(ACTF題):
偽協議直接包含
http://8.129.15.153:20005/?file=php://filter/read=convert.base64-encode/resource=flag.php
點選頁面的tips,檔案包含php偽協議直接嘗試即可
do_u_know_HTTP:
提交get引數Hainan_University,然後在post提交HnuSec即可。在根據最後一條,burpsuite抓包加上http頭,沒啥難的,就按要求提交各類引數就好了。就是post的時候我bp一直不行,用hackbar才可以
erciyuan
看原始碼,直接跟到最後。先第一步繞過正則即可,^符號取反。就把除了26個大小寫字母和數字的其他替換成空,第二個過濾則把HnuSec替換成!。觀察前面的hint我們要訪問到!HDCTF!.php檔案。就構造HnuSecHDCTFHnuSec.php的編碼即可繞過
hash_hmac:
觀察原始碼,直接繞過即可。post傳x[]=QNKCDZO&y[]=aabg7XSs。給了個 fllllllllllllag.php,訪問cat flag
md5弱型別,直接繞過吧
welcome:
猜測弱口令,admin/123456,密碼錯誤左上角彈出密碼。輸入 cat flag
calculator_v1
flask的一題,下載給的python檔案,沒做任何過濾。直接cat flag即可
ezflask
給了個參考連結,模板注入。還什麼都沒過濾。就直接套了wp裡的payload。
https://www.k0rz3n.com/2018/11/12/%E4%B8%80%E7%AF%87%E6%96%87%E7%AB%A0%E5%B8%A6%E4%BD%A0%E7%90%86%E8%A7%A3%E6%BC%8F%E6%B4%9E%E4%B9%8BSSTI%E6%BC%8F%E6%B4%9E/{{config.__class__.__init__.__globals__['os'].popen('cat ./flag').read()}}
warmup
getshell
getshell。看過濾。過濾逗號和等號,而後用.來連線前後。
直接把連線前面的閉合掉,在用//註釋符把後面註釋掉
直接閉合後面也是可以cat flag的,看原始碼就拿到flag了
dudaima
get給pass傳個值,然後反序列化他。就滿足if裡的條件即可
就可自己測試了。引用賦值和傳值賦值參考:
https://blog.csdn.net/m15712884682/article/details/77350027
剩下的web題就不咋會了。還有幾道flask和反序列化,可以看看官方wp
2MISC
簽到題:
直接輸flag,簽到即可。
一步之遙:
偽加密
改成00開啟
你知道lsb是什麼意思嗎
就lsb低位隱寫,存為7z即可
後來儲存下來,看到檔案較小,也猜到可能是crc32,找工具爆了確實也不是
在比賽中是沒想到可能會是純數字,後來就寫個純數字的爆破指令碼即可(指令碼來自官方wp)
girlfriend:
匯出HTTP物件,選最大的是圖片檔案。開啟看到flag
嚶語:
----- . ----. -... ..--- -... ...-- -.... . . ...-- ...-- -... .---- ...-- ..-. ..-. ----. .- --... ...-- -.. ..-. ....- ....- ----. -... --... --... . ..--- ..-.http://.com/zonghe/moersicodeconverter.aspx
奇怪的字元:
leet,l33t。黑客語言。wiki上找一下。有對照表,也有線上的網站
http://www.englishcn.com/tools/Leet.htmhttp://output.jsbin.com/IHoFuQE/1 https://www.dcode.fr/leet-speak-1337 http://www.toolsxx.com/code/1337.html https://1337.me/ https://www.gamehouse.com/blog/leet-speak-cheat-sheet/
無字天書:
開啟檔案,檔案只由空格,tab,換行組成。可能是white-space
找個線上的網站貼進去可以直接解,或者去gayhub上找個。
https://vii5ard.github.io/whitespace/
ook直接解密就可
https://www.splitbrain.org/services/ook
你真的瞭解dns嗎?
nslookup -type=txt hdctf.0x00.work,直接看到flag
dns的type表示dns的協議型別
nospace
零度字元隱寫
解出來的就是password,密碼admin:https://offdev.net/demos/zwsp-steg-js
雪花飄飄
零解一題,看了wp還沒給我整懂,問了一下出題人。diff原頁面和連結頁面。發現換行,考慮網頁隱寫。使用stegsnow。snow=雪
用線上工具diff即可。
海南上一次下雨時間。
然後就儲存題目連結的html檔案。
花朵解密
https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=huaduo
海底撈幀預告片
這題感覺不難,就是頭大,看了wp還能懂,找到了可以用FFmpeg刪除重複幀的命令,和wp一毛一樣,問了一下出題人,還給一個用指令碼的思路,Hash比較每一幀來篩選。寫不來,Ffmpeg天下第一。
刪除重複幀之後,提出圖片。
最後篩選到4張,但目前無ps就沒繼續做下去了,拼起來反色即可得到二維碼。
專業團隊:
分四階段,主要就是要降噪處理(不知道能不能把抬棺那段分離出來)。還有能聽出來DTMF編碼。morse降噪完直接看就好了。DTMF不能的話,就手解。降噪完也是能看的,一個是頻譜,然後第二個應該是morse,第三個是dtmf 第四個就是流派的flag。連起來就是最後的flag了。
調兩個頻段之後對著DTMF的表就可以看出來了。用工具解的話有幾位是亂了的
瓦斯礦工
很新奇的一道題,虛擬貨幣相關。
metamask使用可參考:
https://zhuanlan.zhihu.com/p/112285438?from_voters_page=true
直接foremost分離圖片即可得到一個壓縮包,拖進16進位制檔案裡也可以看到有12個50 4B 03 04的PK頭
觀察到大小較小,直接爆破crc即可,以太坊錢包通過助記詞登入。助記詞可通過數字查詢,這裡就只爆破數字。
直接破即可
https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt#L350
以太坊錢包通過BIP-39生成私鑰,數字查詢助記詞。
指令碼
import binascii import zipfile import time def crc32asii(v): return (binascii.crc32(bytes(str(v), encoding='ascii')) & 0xffffffff) for x in range(1, 10000): f = zipfile.ZipFile("00000001.zip", "r") for i in range(1, 13): GetCrc = f.getinfo(str(i)) crc = GetCrc.CRC a = ("0x%08x" % crc) j = crc32asii(x) if ("0x%08x" % j) == a: print(i, x) time.sleep(0.1)
使用助記詞登入之後,複製地址,去查詢最近的交易記錄
詳情裡得到的直接轉字串得到flag
到點了,上號
出題肯定有故事doge
考點是mp3保留字隱寫資料,wp裡給了wiki連結
https://en.wikipedia.org/wiki/MP3#File_structure
直接拿指令碼就出了,未學習原理。
https://github.com/impakho/de1ctf-mc_challs/blob/master/writeup/mc_easybgm/mp3.py
3.crypto
起源
應該是凱撒直接解
圍住世界:
這題疑惑了挺久的,以為是自己找的網站和軟體不對。反反覆覆裡裡外外。試了好幾個。後來翻看筆記的時候發現可能是w型柵欄密碼
http://www.atoolbox.net/Tool.php?Id=777.com
有趣起來了:
就倒序,ctf特訓營上有講的。quiqui也可以做的,前面改成hdctf就好了。順便把字母改一下即可。
官方wp上給的是用指令碼
神祕字元:
一看時候只注意到mc。以為是什麼mc的其他版本。就去瘋狂google也沒找到。後來就翻到mc的wiki。就mc附魔臺上的字元,玩過mc的應該都知道,mc wiki上找張對比圖,對比就好
https://minecraft-zh.gamepedia.com/Minecraft_Dungeons:%E7%AC%A6%E6%96%87
茫茫人海:
base64隱寫,跟[ACTF新生賽2020]base64隱寫挺像的。反正也是套指令碼就好了
奇怪的貝斯:
整不會了這題,抱歉。
具體思路應該就是構造一個碼錶。\x即是轉義字元,方便表示
babyrsa:
https://www.anquanke.com/post/id/87105
這題還好,純現代密碼菜雞,不過給了pqe。又給了個連結,先求尤拉,然後就n,d,m
#coding:utf-8 from binascii import a2b_hex, b2a_hex import gmpy2 #flag = "*****************************" p = 262248800182277040650192055439906580479 q = 262854994239322828547925595487519915551 e = 65533 n = p*q phi = (p-1)*(q-1) d = gmpy2.invert(e, phi) c = 68405618655091231850901459679785989915772760467494039910176075122809565696913 m = pow(c, d, n) print(m) #a=(int(str(m),16)) a=191853633260784640753082658319123392799532077630882079100618224148262386737246462849
https://tool.lu/hexconvert/https://www.bejson.com/convert/ox2str/
4.Re
sign_up
直接檢視字串就可看到flag
re1
這題比賽的時候看,以為是異或運算+base64換表然後解密,找了半天硬是沒找全64個字元。然後就不了了之。Re也不咋會。之後的題可以看官方wp。
5.Pwn
calculator
題目描述:
python2的input執行輸入導致rce
先用__import__('os').system('/bin/sh')。
直接rce
然後用python -c 'import pty;pty.spawn("/bin/bash");'。
獲得一個bash的shell
找到之後cat即可
自己寫了一個。。發現py直接input就可了
warmup
abs函式是取絕對值的意思。所以不可能小於0。考慮abs負數溢位。就是2的31次方。直接寫指令碼傳就可
backdoor
字串檢視到sh,跟入
繼續跟
bash後門
檢視buf到r的位置
編寫指令碼溢位即可
其他pwn題本菜不會,pwn題可以參考某大佬,應該是ak了pwn題的:
https://www.cnblogs.com/z2yh/p/13771942.html