CTF之MISC練習二


一、base16解密
題目名稱:base64÷4
題目附件
https://adworld.xctf.org.cn/media/task/attachments/c8cb2b557b57475d8ec1ed36e819ac4d.txt
題目writeup:
1.根據題目名稱,猜測是base16
2.通過在線base16解密可獲得:
https://www.qqxiuzi.cn/bianma/base.php?type=16
3.解密腳本:
import base64
s='666C61677B45333342374644384133423834314341393639394544444241323442363041417D'
flag=base64.b16decode(s)
print flag
4.最終獲得flag:
flag{E33B7FD8A3B841CA9699EDDBA24B60AA}
二、modbus工業協議流量包分析
題目名稱:神奇的Modbus
題目描述
尋找flag,提交格式為sctf{xxx}
附件內容
基礎知識
Modbus是一種串行通信協議,是Modicon公司(現在的施耐德電氣 Schneider Electric)於1979年為使用可編程邏輯控制器(PLC)通信而發表。Modbus已經成為工業領域通信協議的業界標准(De facto),並且現在是工業電子設備之間常用的連接方式
題目writeup:
1.通過搜索字符串flag關鍵字,但沒有相關搜索
2. 搜索sctf關鍵字,卻出現sctf格式
結果出來:sctf{Easy_Mdbus},提交有錯誤
根據題目名稱Modbus關鍵字,可能附件內容中流量包中缺少一個o
提交flag:
sctf{Easy_Modbus},則成功提交

三、流量包http協議分析
題目名稱:wireshark-1
題目描述
黑客通過wireshark抓到管理員登陸網站的一段流量包(管理員的密碼即是答案)。 flag提交形式為flag{XXXX}
附件內容
https://adworld.xctf.org.cn/media/task/attachments/ab8cfea44ced4dd8bd96c7f769ce1309.zip
題目writeup:
1.用wireshark打開流量包,通過搜索http關鍵協議,並查找post數據包
2.追蹤流--http流
3.可以看到post提交的數據password關鍵字后門的內容,也就是答案,答案就是flag
4.最終flag為:
flag{ffb7567a1d4f4abdffdb54e022f8facd}

四、圖片的影寫

題目名稱:pure_color
題目描述
格式為flag{xxxxxx}
題目附件
https://adworld.xctf.org.cn/media/task/attachments/1457ba9a15f944ae8520e024f72bf7a6.png
題目writeup:
1.通過notepad查看關鍵字flag並沒有任何內容
2.通過題目名稱color與顏色有關,關聯到有可能是圖片影寫,通過stegsolve查看圖片,按下面的“<”按鈕,就得到flag
最終flag:
flag{true_steganographers_doesnt_need_any_tools}

五、圖片隱寫之AES雙重解密

題目名稱:Aesop_secret
題目附件
https://adworld.xctf.org.cn/media/task/attachments/f732347c6bad47f1ac715cf67a3f4532.zip
題目writeup:
1.下載附件解壓得到一個動態圖片gif,然后通過圖片影寫工具 stegsolver查看並沒有任何東西
2.通過notepad查看,發現最后面有一串加密的字符串,題目名稱為aes,那么該字符串則是aes加密的字符串
3.通過在線aes解密,猜測密鑰可能為:2019_ISCC或者ISCC,通過測試發現密鑰為ISCC則可以解密,但是解密出來的還是AES加密字符串
在線aes解密網站
https://www.sojson.com/encrypt_aes.html
4.再次進行第二次解密,則可以獲得flag
5.最終flag
flag{DugUpADiamondADeepDarkMine}

六、圖片隱寫之LSB的字符反轉

題目名稱:倒立屋
題目描述
房屋為什么會倒立!是重力反轉了嗎?
題目附件
https://adworld.xctf.org.cn/media/task/attachments/0ffa808362f34bf8a2d5bf473c1d455a.zip
題目writeup:
1.下載附件,解壓文件,得到一張圖片文件,然后通過圖片隱寫工具 stegsolve的Analyse-Extract Preview查看圖片的LSB屬性。
2.發現有關FLAG的相關聯的關鍵字:IsCc_2019
3.直接提交flag{ IsCc_2019}是錯誤的,根據題目描述,反轉關鍵字,最終flag為:flag{9102_cCsI}

七、壞損圖片影寫
題目名稱
something_in_image
題目附件
https://adworld.xctf.org.cn/media/task/attachments/b2c46758ac3b41eaa457ff8e64d5d17c.zip
題目wirtup:
1.下載附件,通過記事本或者 010editor搜索關鍵字flag,即可發現flag
2.最終flag為:
Flag{yc4pl0fvjs2k1t7T}

八、圖片隱寫之翻轉

題目名稱:reverseMe
目附件
https://adworld.xctf.org.cn/media/task/attachments/021b62817d7f439aab5338ea63fe1b4b.jpg
題目writeup:
1.通過windows10自帶的圖片查看工具的翻轉功能即可查看flag
2.最終flag:
flag{4f7548f93c7bef1dc6a0542cf04e796e}

九、日歷影寫
題目名稱:2017_Dating_in_Singapor
題目描述
01081522291516170310172431-050607132027262728-0102030209162330-02091623020310090910172423-02010814222930-0605041118252627-0203040310172431-0102030108152229151617-04050604111825181920-0108152229303124171003-261912052028211407-04051213192625
題目附件
題目writup:
1.下載附件,發現打開一張日歷
2.根據描述,發現用分割符號"-"進行分割,有12段( 數字的特征,最小為01,最大為31,一共十二行,恰對應12個月,每個月最多31天。結合今年(2017)日歷),那么每段的數字和日歷月份有關聯,並且兩兩數字一組,最終簡化如下:
01081522291516170310172431-
050607132027262728-
0102030209162330-
02091623020310090910172423-
02010814222930-
0605041118252627-
0203040310172431-
0102030108152229151617-
04050604111825181920-
0108152229303124171003-
261912052028211407-
04051213192625
3.按每一行順序對應每一個月份的情況下,每一個數字對應日期,再按照順序在日歷上連接成線,就是flag了

4.最終flag:
HIT8{CTFFUN}


十、流量包隱藏文件之PDF
題目名稱:simple_transfer
題目描述
文件里有flag,找到它
題目writeup:
1.下載附件,用wireshark打開流量文件,搜索flag關鍵字,並沒有發現任何東西

2.將該流量文件上傳到kali系統中,用binwalk命令查看該文件包含哪些文件,發現有pdf文件包含其中
binwalk  f9809647382a42e5bfb64d7d447b4099_.pcap 
3.通過foremost命令分解其包含中的文件,分解出audit.txt和pdf文件夾,進入pdf文件夾中,發現包含了00000662.pdf文件
foremost  f9809647382a42e5bfb64d7d447b4099_.pcap 
4 打開pdf文件,里面什么都沒有,全黑色背景
5. 直接CTRL + A 全選,新建一個txt文件,然后CTRL + V 粘貼,最終 得到flag
HITB{b3d0e380e9c39352c667307d010775ca}

十一、最基礎的圖片影寫
題目名稱:Training-Stegano-1
題目描述
這是我能想到的最基礎的圖片隱寫術
題目附件
https://adworld.xctf.org.cn/media/task/attachments/2e5e19744c644912928eddc882f3b0b9.bmp
題目writeup:
1.下載附件圖片,通過記事本查看,有個一個密碼為:steganoI,猜測為flag
2.提交flag{ steganoI },但是不對,再次提交 steganoI ,發現正確,最終flag為:steganoI
十二、BrainFuck語言解密
題目名稱:can_has_stdio?
題目附件
基礎知識
BrainFuck語言是極簡的一種圖靈完備的語言,由Urban Müller在1993年創造,由八個指令組成(如下表)。工作機制與圖靈機非常相似,有一條足夠長的紙帶,初始時紙帶上的每一格都是0,有一個數據讀寫頭指向紙帶的初始位置,讀寫頭的行為由指令指示。
brainfuck有兩種類型:
1. < < + - > ,  [   ]
2.  0ok! 0ok. 0ok?
題目writeup:
1.下載附件,解壓壓縮文件,得到一個文件misc50,其中包含以下內容
2.看到內容,判斷是 brainfuck 代碼,,通過在線解密工具進行解密:

3.最終flag為:
flag{esolangs_for_fun_and_profit}

十三、壓縮包爆破
題目名稱:János-the-Ripper
題目附件
https://adworld.xctf.org.cn/media/task/attachments/310085c4315841b1b784b4803ff7e4c1.zip
題目wirteup
1.下載附近,解壓文件,得到misc100文件,並通過winhex查看,發現是50,4b,03開頭,說明是rar壓縮文件,其中還有flag.txt文件。
2.但是打開.rar文件,提示需要輸入密碼,且題目名稱為 János-the-Ripper,該名為著名的密碼爆破工具,需要我們對該.RAR文件進行爆破。
通過archpr爆破工具對壓縮包進行爆破

最終flag:
flag{ev3n::y0u::bru7us?!}

十四、影寫之十六進制轉換
題目名稱:Test-flag-please-ignore
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/2f572adcaa5447feb8cc8c50969cd57d.zip
題目writeup:
1.下載附件,解壓附件得到misc100,通過notepad查看文件內容
2.發現一串字符串:666c61677b68656c6c6f5f776f726c647d,嘗試md5 hash值解密發現無法解密,發現該字符串是0到9以及a到f組成,是十六進制形式
3.通過在線十六進制轉換成ascii字符
https://www.sojson.com/hexadecimal.html


4.最終得到flag為:
flag{hello_world}

十五、影寫之有規律的字符串
題目名稱:hit-the-core
題目描述
alexctf-2017
題目附件
https://adworld.xctf.org.cn/media/task/attachments/2f572adcaa5447feb8cc8c50969cd57d.zip
題目writeup:
1.下載附件,對其進行解壓,發現一個.core文件,該文件為liunx下的崩潰錯誤生成的文件。通過記事本查看其內容,發現有一些特殊的字符串
或者通過kail下的strings命令查看文件中的字符串
2.得到可疑的字符串:
cvq Aeqac Ltqaz Eigwi Xobxr Crtui Tzahf Freqc{bnjr Kwgk8 3kgd4 3j85e Pgb_e _rwqr 7fvbm Hjklo 3tews _hmko gooyf 0vbnk 0ii87 Drfgh _n ki wutfb 0ghk9 ro987 k5tfb _hjio uo087 ptfcv}
3.仔細觀察,發現前加粗的大寫字母連起來為:ALEXCTF,正好為flag提交的格式開頭,且每個字母之間有4個字符相隔,那么括號里面按照規律就可以組合連接起來。
4.最終得到flag :
ALEXCTF{K33P_7H3_g00D_w0rk_up}
附錄:
data = 'cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}'
flag = ''
for i in range(3, len(data), 5):
    flag += data[i]

print(flag)


十六、玩游戲獲取flag
題目名稱:快樂游戲
題目附件
https://adworld.xctf.org.cn/media/task/attachments/bce2610d3bfa4da8813732deaab7f87f.zip
題目writeup:
1.下載附件,對其解壓,打開.exe文件,游戲要求圍住貓即可獲取flag
2.最終得到flag:
UNCTF{c783910550de39816d1de0f103b0ae32}

十七、動態圖片分解合並
題目名稱:glance-50
題目附件
https://adworld.xctf.org.cn/media/task/attachments/9266eadf353d4ada94ededaeb96d0c50.gif
題目wirteup:
1.下載附件,得到一個很長的一條gif動態圖片,通過stegsolve和winhex等工具並沒有發現flag
2. 那么這個題大概率就是分離gif的每一幀然后拼接形成圖片得到flag
方法一
1.使用convert命令對動態圖片flag.gif進行分割
  convert flag.gif  flag.png
2.再使用montage命令對分割的圖片進行合並
montage flag*.png   -tile x1 -geometry +0+0   flag.png
選項:

-tile是拼接時每行和每列的圖片數,這里用x1,就是只一行

-geometry是首選每個圖和邊框尺寸,我們邊框為0,圖照原始尺寸即可

合成圖片為:
方法二
1.通過python腳本進行分割gif動態圖片
import os
from PIL import Image

def seoaration_gif(gif_file):
png_dir = gif_file[:-4] + '/'
os.mkdir(png_dir)
img = Image.open(gif_file)
try:
while True:
current = img.tell()
img.save(png_dir+str(current)+'.png')
img.seek(current+1)
except:
pass

if __name__=='__main__':
gif_file = 'flag.gif'
seoaration_gif(gif_file)

2.再次通過python腳本對分割后的png 靜態圖片進行合並
# coding=utf-8
# Data: 2021/7/7 16:13
# File : hebin.py
from PIL import Image

path = "C:\\Users\\backlion\\Desktop\\flag\\flag\\"
save_path = 'C:\\Users\\backlion\\Desktop\\flag\\'

im = Image.new('RGBA', (2 * 201, 600)) # 創建新照片

imagefile = [] # 存儲所有的圖像的名稱
width = 0
for i in range(0, 201):
imagefile.append(Image.open(path + str(i) + '.png')) # 遍歷,將圖像名稱存入imagfile

for image in imagefile:
im.paste(image, (width, 0, 2 + width, 600)) # 將圖片張貼到另一張圖片上
width = width + 2
im.save(save_path + 'result.png')
im.show()


方法三:
可直接通過在線動態圖片分解工具進行獲取
https://tu.sioe.cn/gj/fenjie/
最終flag:
TWCTF{Bliss by Charles  0'Rear}



十八、圖片影寫之像素取反比較
題目名稱:a_good_idea
題目附件
https://adworld.xctf.org.cn/media/task/attachments/96378111f32f49d09f691870f1268799.rar
題目witeup:
1.下載附件,對其進行解壓,發現一張a_very_good_idea.jpg圖片,首先對其進行圖片查看,是否含有隱藏文件

2.通過binwalk命令對圖片文件進行分析,發現包含有壓縮文件,且壓縮文件內含有2張圖片和一個txt文件
binwalk  a_very_good_idea.jpg 
3.通過foremost命令對 a_very_good_idea.jpg 圖片文件進行分解
foremost  a_very_good_idea.jpg 
4.打開其中的hint.txt文件,發現有一段字符串, try to find the secret of pixels,表示:試着找到像素的秘密



5.打開File—>Open—>圖片,這里先打開a_very_good_idea.jpg圖片
6.通過analyse-image combiner 打開圖片to.png

7.利用stegsolve將兩張圖片進行combine,得到像素相減的圖,按左右鍵轉換色道,會跳出二維碼
8.通過微信掃描二維,最終得到flag:
NCTF{m1sc_1s_very_funny!!!}


十九、
題目名稱:
題目附件:
題目writeup:
1.下載附件,解壓,發現一張斑馬條形碼的圖片文件,既然有條形碼,這里 利用條形碼在線閱讀得到其內容: https://online-barcode-reader.inliteresearch.com/
最終得到flag:
flag{TENSHINE}

題目名稱:easycap
題目描述:你能從截取的數據包中得到flag嗎?
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/d5ba8f87969145059170a222f01e7883.pcap
題目writeup:
下載附件,並解壓附件,用wireshark打開流量包文件,通過追蹤流-TCP流,可看到falg信息
這里注意提交flag形式,不是flag{}和FLAG{}
因此最終flag為:
FLAG:385b87afc8671dee07550290d16a8071

題目名稱:stage1
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/3600c13125fe4443aeef3c55b9c1357b.png
基礎知識:
常見的文件頭和文件尾:
JPEG (jpg),                          文件頭:FFD8FF                        文件尾:FF D9               
PNG (png),                          文件頭:89504E47                      文件尾:AE 42 60 82
GIF (gif),                             文件頭:47494638                      文件尾:00 3B                                                                 
ZIP Archive (zip),                     文件頭:504B0304                      文件尾:50 4B

TIFF (tif),                              文件頭:49492A00                      文件尾:
Windows Bitmap (bmp),         文件頭:424D                         文件尾:
CAD (dwg),                           文件頭:41433130                      文件尾:
Adobe Photoshop (psd),          文件頭:38425053                      文件尾:
Rich Text Format (rtf),             文件頭:7B5C727466                      文件尾:
XML (xml),                              文件頭:3C3F786D6C                     文件尾:
HTML (html),                           文件頭:68746D6C3E
Email [thorough only] (eml),     文件頭:44656C69766572792D646174653A
Outlook Express (dbx),            文件頭:CFAD12FEC5FD746F
Outlook (pst),                         文件頭:2142444E
MS Word/Excel (xls.or.doc),      文件頭:D0CF11E0
MS Access (mdb),                    文件頭:5374616E64617264204A
WordPerfect (wpd),                  文件頭:FF575043
Adobe Acrobat (pdf),               文件頭:255044462D312E
Quicken (qdf),                         文件頭:AC9EBD8F
Windows Password (pwl),         文件頭:E3828596

RAR Archive (rar),                    文件頭:52617221
Wave (wav),                            文件頭:57415645
AVI (avi),                                 文件頭:41564920
Real Audio (ram),                     文件頭:2E7261FD
Real Media (rm),                       文件頭:2E524D46
MPEG (mpg),                           文件頭:000001BA
MPEG (mpg),                           文件頭:000001B3
Quicktime (mov),                     文件頭:6D6F6F76
Windows Media (asf),               文件頭:3026B2758E66CF11
MIDI (mid),                              文件頭:4D546864
pyc                                          文件頭:03f30d0a

題目writeup:
下載附件,解壓得到一張圖片,通過圖片工具stegsolve打開圖片,查看圖片通道,可發現二維碼
通過二維碼掃描工具QR Research掃描二維碼,可獲得一串十六進制的字符
將其十六進制字符復制並保存為test1.文件
通過winhex工具打開test1.pyc文件,然后對文件進行字符轉換,轉換文件---十六進制ASCII轉換,並確定保存
並通過在線pyc反編譯對pyc文件進行反編譯為python文件
https://tool.lu/pyc/
通過美化python代碼,並稍微修改,得到獲得flag的python文件
#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
def flag():
str = [65, 108, 112, 104, 97, 76, 97, 98]
flag = ""
for i in str:
flag += chr(i)
print flag
flag()
最終獲得flag:
AlphaLab


題目名稱:Hear-with-your-Eyes
題目描述:
用眼睛聽這段音頻
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/bf87ed29ac5a46d0aa433880dac5e6d8.gz
題目writeup:
下載附件,通過linux命令tar對其附件.gz文件進行解壓,得到一個音頻文件soud.wav
tar  zxvf flag.gz
通過音頻分析工具audacity進行分析,然后選擇步頻譜圖,可得到falg
顯示為:
flag:e5353bb7b57578bd4da1c898a8e2d767
注意提交flag格式,試了幾次,最終flag為:
e5353bb7b57578bd4da1c898a8e2d767

題目名稱:What-is-this
題目描述:找到FLAG
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/e66ea8344f034964ba0b3cb9879996ff.gz
題目writeup:
方法一:
下載附件,並通過linux 命令對其附件.gz進行解壓,得到2張圖片
tar  zxvf  e66ea8344f034964ba0b3cb9879996ff.gz 
既然是2張圖片,於是猜測可能是2張圖片的合並或者比較。 通過隱寫圖片工具stegsolve工具打開pic1.jpg
然后選擇image  comibiner工具打開另一張圖片pic2.png
\
對2張圖片進行合並,合並后可獲得flag
方法二:
得到兩張相似的圖片, 第一反應是兩張圖片的合並,於是使用kali下的compare命令進行合並,然后得到FLAG
compare pic1.jpg pic2.jpg -compose src flag.jpg
最終得到flag:
AZADI  TOWER










題目名稱:red_green
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/2ec5da20345342909d2336aa7418afed.png
題目writeup:
方法一:
下載附件,並獲得一張圖片,該圖片由綠色和紅色構成。分別將紅色和綠色視為0和1.
下面通過stegsolve圖片影寫工具的data extract功能進行分析
勾選RED的0,然后保存flag.jpg
可以獲得flag信息:
方法二:
其中的紅色和綠色視為0 和 1,再將最后得到的 01序列 轉存為圖片,下面為python代碼:
# coding=utf8

from PIL import Image
import bitstring

im = Image.open('flag.png')
width = im.size[0]
height = im.size[1]
pim = im.load() # 讀取圖片的像素信息
bin_result = ''
for h in range(height):
for w in range(width):
if pim[w,h][0] == 255: # 判斷是否是紅色(R,G,B)[0]表示第一通道
bin_result += '1'
else:
bin_result += '0'

# print bitstring.BitArray(bin=bin_result).bytes.encode('hex')
with open('result.jpg','wb') as f:
f.write(bitstring.BitArray(bin=bin_result).bytes)
最終得到flag:
flag{134699ac9d6ac98b}

題目名稱:normal_png
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/7171426a9b4646aba1db92b1fbc083f5.png
題目writeup:
下載附件,得到一張png圖片,通過查看圖片隱寫,並沒有發現可利用的信息。聯想到可能圖片的高度變小,導致有一部分圖片顯示不完整。
那么這里我們調整圖片的高度,這里通過填充數據形式將03,6B,修改為04,6B,並保存圖片


最終flag為:
flag{B8B68DD7007B1E406F3DF624440D31E0}


題目名稱:就在其中
題目描述:
格式為flag{xxxx}
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/7cd17d910acf4ac8b563aa5caad18717.zip
題目writeup:
首先下載附件,解壓附件,得到一個 Misc-03.pcapng 流量文件。通過binwalk文件查看文件包含的文件,發現包含zip,pdf,jpg等文件,其中zip文件中含有key.txt文件
binwalk  Misc-03.pcapng 
通過foremost命令對其文件進行分離
發現分離出來的圖片文件沒有和flag有關聯
並且pdf也沒有和flag有關聯
解壓出00000047.zip文件,得到一個key.txt文件,並打開該文件,發現是亂碼,可能是被加密了。猜測是需要對其解密
通過wireshark對 Misc-03.pcapng 進行分析,搜索關鍵字:flag。並沒有發現和flag有關的信息

再次搜索關鍵字key,並發現數據包中含有"PRIVATE key"

通過追蹤TCP流,發現是ssh的私鑰rsa的key的內容
將其內容保存為rsa.key
通過openssl命令對其加密的密文key.txt進行加載私鑰進行破解,最終獲得明文
openssl rsautl -decrypt -in key.txt -inkey rsa.key -out flag.txt
查看flag.txt
cat  flag.txt
最終獲得flag為:
flag{haPPy_Use_0penSsI}



題目名稱:再見李華
題目描述:
假如你是李華(LiHua),收到喬幫主一封密信,沒有任何特殊字符,請輸入密碼,不少於1000個字。同學,記得署名哦
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/7ab3e456b35945a4afed08050cd8859e.zip
題目writeup:
下載附件,對附件進行解壓,發現一張圖片,圖片上顯示不完整的MD5值,並沒有可利用點
通過binwalk命令對其文件查看包含的內容,發現其中包含了jpeg和zip文件,且zip文件含有key.txt文件
使用foremost命令對mail2LiHua.jpg進行分離文件,發現00000037.zip文件可利用
對其 00000037.zip文件就解壓縮發現需要密碼。
根據題目描述:
假如你是李華(LiHua),收到喬幫主一封密信,沒有任何特殊字符,請輸入密碼, 不少於 1000 個字。同學,記得署名哦~
可以推測出:
不少於1000個字,暗含密碼為不少於二進制1000的密碼位數(轉換成十六進制就是至少需要8位以上的密碼數)
記得署名為 李華(LiHua), 意思是密碼中后面5位數是Lihua
使用Advanced ZIP Password Recovery_4.0進行破解。 密碼為15CCLiHua
以下使用archpr的掩碼攻擊類型進行破解
最終flag:
Stay hungry, Stay foolish.



題目名稱:embarrass
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/54dcee33c07745f39f43a094a1b61dcf.zip
題目writeup:
下載附件,解壓附件得到一個流量文件misc_02.pcapng文件
使用linux命令strings直接搜索關鍵字,可得到flag
strings misc_02.pcapng | grep flag
或者用wireshark軟件打開流量包,直接搜索關鍵字flag,也可以得到flag
最終得到flag:
flag{Good_b0y_W3ll_Done}


題目名稱:MISCall
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/d02f31b893164d56b7a8e5edb47d9be5
題目writeup:
下載附件,通過binwalk命令查看包含文件,可以看到文件的類型為bzip2
binwalk  flag
將flag附件文件重新命名flag.tar.bz2
mv  flag    flag.tar.bz2
對flag.tar.bz2進行解壓
tar -xjvf  flag.tar.bz2
查看解壓文件夾ctf的文件內容,其中包含了flag.txt,和.git文件內容
cd ctf
ls  -al
通過cat命令查看flag.txt,提交里面的內容,但是錯誤,並不是flag,那么.git文件有可能和flag有關
Nothing to see here, moving along...
通過git stash list 命令查看文件修改情況,發現flag.txt和s.py都有被修改過
git stash list
需要對.git文件進行還原,在還原前需要將已被修改過的flag.txt文件刪除,然后使用git stash apply命令進行還原,還原后生成了新的文件s.py和flag.txt
rm flag.txt 
git stash apply
再次通過cat命令查看flag.txt內容,發現內容很大一一串,並不是flag
cat flag.txt
並又通過cat命令查看s.py內容,發現是與flag有關且和flag.txt有關聯,可生成flag
cat s.py
運行s.py腳本,可獲得flag內容
python s.py
最終得到flag:
NCN4dd992213ae6b76f27d7340f0dde1222888df4d3


題目名稱:Get-the-key.txt
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/256cb07f5dbd493f81ad5b199f2b248a.zip
題目writeup:
下載附近,並對附件進行解壓,得到解壓后的文件forensic100,通過linux  file命令查看文件系統屬性,發現是一個linux 的ext2系統文件
file  forensic100
通過mount命令對linux系統文件forensic100進行掛載到/opt/flag目錄下
mkdir  /opt/flag
mount -o loop forensic100 /tmp/forensic100
根據題目名稱可知,我們要找key.txt文件,通過gresp  -r  “key.txt”命令對當前目錄下的所有文件進行關鍵字“key.txt"搜索包含存在的文件,這里可以看到是1文件存在包含flag.txt
cd  /opt/flag
grep  -r  'key.txt‘
再次通過file命令查看1的文件屬性,發現該文件是gzip文件
通過gunzip<1查看文件內容,可獲得flag
gunzip < 1
最終得到falg:
SECCON{@]NL7n+-s75FrET]vU=7Z}



題目名稱:Reverse-it
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/0da9641b7aad4efb8f7eb45f47eaebb2
題目writeup:
下載附件,解壓附件,得到一個flag文件,然后通過winhex查看flag文件,發現末尾是FF 8F FF,這個就是jpg文件格式的頭部,只不過是倒敘過來。根據題目名稱recerse-it,要還原文件,那就要將文件 的內容進行反向。
通過xxd對文件進行十六進制查看
xxd -p  flag
通過xxd命令先將二進制內容進行反向,並將反向后的字符以二進制的形式輸出,然后發現是一個JPEG圖片,此時flag是翻轉的。
xxd -p  flag | tr -d '\n' | rev | xxd -r -p > flags
files  flags
通過convert命令對圖片文件進行翻轉
mv  flags  flags.jpg
convert -flop flags.jpg   flag.jpg

最終得到flag:
SECCON{6in_tex7}



題目名稱:打野
題目描述:
菜你了解CTF圈的實時動態么?flag格式qwxf{}
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/82a98710753740d6b0de1ef17d21c8be.rar
基礎知識:
LSB(英文 least significant bit)即最低有效位。LSB加密是信息隱藏中最基本的方法。通常來說LSB加密用在無損壓縮的數據格式文件中,例如圖像中的bmp格式和音頻的wav格式。對於圖像文件LSB的特征很明顯,通常將信息隱藏在某一個顏色通道中。
題目writeup:
下載附件,對附件進行解壓得到一張flag.bmp的圖片,通過命令strings對qwxf關鍵字進行搜索,但是沒有任何信息,且通過stegsolve也沒有發現任何有flag相關的信息
通過zsteg對bmp或者png圖片進行隱寫查看,這里主要查看LSB隱寫的信息
最終發現flag為:
qwxf{you_say_chick_beautiful?}



題目名稱:我們的秘密是綠色的
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/bb9a4b47c82b4a659ce492cd903df03b.zip
題目writeup:
下載附件,解壓附件得到一張flag.jpg圖片,圖片中尤其比較明顯的區域為日歷的綠色字體(根據題目名稱我們的秘密是綠色,那么密碼和綠色字體有關,這是一個處猜想)
通過stegsolve查看圖片隱寫以及搜索關鍵字flag,並沒有發現任何有關的flag,
根據題目名稱我們的秘密是green,於是想到使用OurSecret這個工具,然后解密還缺一個密碼,正好就是上面綠色的部分數字組合,最終測試密碼為:0405111218192526可成功解壓出壓縮包
,這里我們將try.zip文件保存。
打開壓縮包try.zip提示需要輸入密碼,並查看try.zip的壓縮包信息,可以看到提示“你知道coffee的生日多少么”這條信息告訴我們,壓縮包密碼和生日號碼數字有關。
通過ziperello 對zip進行爆破,這里的爆破規則為純數字號碼,生日號碼密碼長度為1到8位。
得到密碼,解壓獲得兩個文件為flag.zip和readme.txt
這里可以看到flag.zip壓縮包中含有一個readme.txt以及同目錄下也有一個readme.txt,那么很有可能和壓縮包明文攻擊有關。同時可以看到readme.txt的CRC32校驗值為:
BA59D790
然后我們將通過winrar壓縮程序對readme.txt壓縮成readme.zip,並查看 readme.txt的CRC32校驗值也為 BA59D790

通過ARCHPR對flag.zip壓縮包進行明文攻擊,最終得到解壓密碼為 Y29mZmVl
通過輸入解壓密碼,得到2個文件分別為flag.zip以及reame.txt
打開flag.zip提示需要輸入密碼

並且,這次的flag.zip里面只有flag.txt
通過 通過ARCHPR對flag.zip壓縮包進行密碼爆破,發現爆破失敗。
通過winhex打開flag.zip壓縮包,發現下面有特殊的偽加密方式:
第一段50 4B 是壓縮源文件數據區的頭文件標記,它對應的紅色框柱的 00 08 並不影響加密屬性。
第二段50 4B 是壓縮源文件目錄區 ,它對應的 01 09 影響加密屬性,當數字為奇數是為加密,為偶數時不加密,因此這將01改為00(一般在第二段50 4B   ...14 00后面修改為00)
這里將01修改為00,保存即可解壓出flag.zip。


或者通過zipceno0p.jar對其進行偽加密恢復。
java  -jar  ZipCen0p.jar  r  flag.zip
解壓出flag.zip文件后,得到一個flag.txt文件,打開該文件,看到一串字符串:qddpqwnpcplen%prqwn_{_zz*d@gq}



這個很明顯了看起來像柵欄加密,下面是CTFcrack工具對其直接解密得到解密:qwlr{ddneq_@dpnwzgpc%nzqqpp_*}


但是並不是flag,看起來像凱撒加密,又再次通過 CTFcrack工具對其直接解密
最終得到flag:
flag{ssctf_@seclover%coffee_*}

題目名稱:Become_a_Rockstar
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/7a7a705cb5874292a47461c7ed0cc0c1.zip
題目writeup:
下載附件,打開是一段字符串,且看到題目名稱為“Rockstar”有可能和flag有關,於是搜索這個關鍵字,顯示是一門搖滾明星編程語言(Rockstar),這里通過下面腳本將其轉換成pytho語言
https://github.com/yyyyyyyan/rockstar-py
python3  rockstarpy   -i  Become_a_Rockstar.rock   -o  flag.py
通過執行轉換后的python,即可獲得flag
最終flag為:
NCTF{youarnicerockstar}



題目名稱:小小的PDF
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/a4f37ec070974eadab9b96abd5ddffed.pdf
題目writeup:
下載附件,解壓附件得到一張flag.pdf文件,然后通過binwalk對其進行文件包含分析,發現里面包含了一張PDF文件以及3張JPEG文件
通過foemost命令對flag.pdf進行分離,得到三張圖片和一張PDF文件
查看到00000160.jpg文件,發現是flag內容
最終flag為:
SYC{so_so_easy}



題目名稱:Cephalopod
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/434c8c0ba659476caa9635b97f95600c.pcap
題目writeup:
方法一:
首先下載附件,得到一個流量文件flag.pcap,並搜索關鍵字flag,可以看到流量文件中包含了一張圖片flag.png,可能這種圖片與flag有關
在kali下使用命令foremost提取不了圖片,這里可以使用tcpxtract進行分離流量包中的圖片
  apt-get install tcpxtract
使用tcpxtract  -f  進行分解流量包中的圖片,可以分解出2張圖片
tcpxtract  -f  flag.pcap 
查看2張圖片,可以看到在0000000.png圖片中包含flag


方法二:
通過wrireshark打開流量包flag.pcap,搜索關鍵字flag,可以看到包含了flag.png,這可能與flag有關
然后對其進行追蹤流--tcp流
再次搜索關鍵字flag,發現也有很多包含flag.png的圖片,這些都不是flag.png的真實數據
然后進行數據流2 跳轉,並查看,發現有包含png圖片的內容,且開頭為IHDR
這里將以原始數據,保存為flag.png
通過winhex打開flag.png,刪除89504E前的所有十六進制數據,然后保存圖片


查看保存后的圖片,發現內容包含了flag
最終flag為:
HITB{95700d8aefdc1648b90a92f3a8460a2c}

題目名稱:Erik-Baleog-and-Olaf
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/a020007e78914bb1a7a17cbf68e2c5d1.zip
題目writeup:
方法一:
使用binwalk命令查看文件包含的內容,其中可以看到包含了一張png圖片
binwalk stego100
並使用foremost命令分離文件
 foremost  stego100 
獲得了一張圖片000000000.png
通過stegsolve工具查看通道,其中圖片中包含殘缺的二維碼。
通過ps進行修復,獲得一張二維圖片
通過QR Research二維碼工具掃描,獲得flag

方法二:
通過strings 命令查看文件的屬性,其中屬性中包含了一個URL 圖片地址。
http://i.imgur.com/22kUrzm.png(https://github.com/jesstess/tinyctf/blob/master/erik/data/22kUrzm.png)
這種圖片和原始的文件,可能存在一定的關聯,這里聯想到需要進行2個文件的對比
使用compare命令進行2個文件對比,並輸出一張新的圖片文件
compare stego100 22kUrzm.png -compose src flag.png
通過QR reswarch二維碼掃描工具掃描出flag.png圖片,可獲得flag

最終flag為:
flag{#justdiffit}



題目名稱:labour
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/6bf99baed0d84d2c8c28b6b2f08c34a6
基礎知識:

1.GPX(GPS Exchange Format, GPS交換格式)是一個XML格式,為應用軟件設計的通用GPS數據格式。

2.它可以用來描述路點、軌跡、路程。這個格式是免費的,可以在不需要付任何許可費用的前提下使用。它的標簽保存位置,海拔和時間,可以用來在不同的GPS設備和軟件之間交換數據。如查看軌跡、在照片的exif數據中嵌入地理數據

題目writeup:
1.用記事本打開文件,發現該文件的格式為gpx,通過百度gpx文件格式。發現是一種gps交換數據的地圖格式文件

這里可以通過在線網址解析gpx格式文件出地圖。

放大發現每個點都有序號,一共17個點,然后每個點都對應一個國家的名稱,按照順序記錄下來

統計出每個坐標點對應的國家城市名稱。
WP01-A - Bangladesh
WP02-B - India
WP03-C - Turkmenistan
WP04-D - Sudan
WP05-E - Chad
WP06-F - Thailand
WP07-G - France
WP08-H - Malesia
WP09-I - Afganistan
WP10-J - Pakistan
WP11-K - Turkey
WP12-L - Hungary
WP13-M - Egypt
WP14-N - Haiti
WP15-O - Angola
WP16-P - China
WP17-Q - Kazaksztan

發現前面7國家城市的首字母組合BITSCTF就是flag提交的格式首字母。那么組合構成flag:BITSCTF{MAPTHEHACK},提交發現錯誤

再次查看文件中有一段注釋是:Use appropriate brackets and underscores to separate words if you succeed(如果成功,請使用適當的括號和下划線分隔字符)

那么重新用括號和下划線分割符號組合flag.

最終flag為:

BITSCTF{MAP_THE_HACK}



題目名稱:misc_pic_again
題目描述:
flag = `hctf{[a-zA-Z0-9~]*}`
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/719af25af2ca4707972c6ae57060238e.png
題目writeup:
方法一:
下載附件,獲得一張圖片,通過stegsolve圖片隱寫工具查看圖片,嘗試通道查看並有發現和flag有關的,再次 嘗試查看圖片LSB隱寫(analyse----DATA Extract)對RGB和LSB數據分析。
這里將紅藍綠設置為0,並進行提取查看,發現開頭為pk,這個是zip壓縮頭的格式。
將結果保存為flag.zip文件
對其flag.zip解壓縮,獲得一個1的文件

通過winhex或者記事本打開,根據題目描述,flag格式為hctf開頭,搜索關鍵字"hctf"可以看到文件中有包含flag


方法二:
通過zsteg圖片影寫工具對圖片進行分析,發現其中隱藏了一個zip文件
zsteg   flag.png

使用zsteg  -e   b1,rgb,lsb,xy 對flag.png LSB隱寫的壓縮文件進行提取,保存為flag.zip
zsteg -e b1,rgb,lsb,xy  flag.png > flag.zip
對保存后的flag.zip進行解壓縮,解壓縮后得到一個文件1,且通過strings命令對其搜索關鍵字hctf,可獲得flag
strings  1 |grep  hctf
最終得到flag:
hctf{scxdc3tok3yb0ard4g41n~~~}




題目名稱:low
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/15a04eedcabe43978bb692c21a0f1b52.rar
題目writeup:
下載附件,得到這一張low.bmp圖片,通過stegsolve打開,分析lsb隱寫,無果,發現通道有問題
這里直接通過腳本生成LSB隱寫顯示隱藏圖片:
import PIL.Image as Image
img = Image.open('low.bmp')
img_tmp = img.copy()
pix = img_tmp.load()
width,height = img_tmp.size
for w in range(width):
for h in range(height):
if pix[w,h]&1 == 0:
pix[w,h] = 0
else:
pix[w,h] = 255
img_tmp.show()
將顯示圖片保存為flag.jpg
通過QR Rearch二維碼掃描工具可獲得flag內容
最終得到flag:
flag{139711e8e9ed545e}

題目名稱:適合作為桌面
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/1573d940d9bb47a083da6db70ffbffe0.rar
題目writeup:
下載附件,並解壓附件,得到一張1.png圖片,通過stegsolve工具打開圖片,並查看通道,發現在red plane 1通道是顯示一張二維碼
將二維碼保存為flag.png圖片
通過二維碼工具QE Reswarch對flag.png進行掃描,獲得一串十六進制的字符串
03F30D0A79CB05586300000000000000000100000040000000730D0000006400008400005A000064010053280200000063000000000300000016000000430000007378000000640100640200640300640400640500640600640700640300640800640900640A00640600640B00640A00640700640800640C00640C00640D00640E00640900640F006716007D00006410007D0100781E007C0000445D16007D02007C01007400007C0200830100377D0100715500577C010047486400005328110000004E6966000000696C00000069610000006967000000697B000000693300000069380000006935000000693700000069300000006932000000693400000069310000006965000000697D000000740000000028010000007403000000636872280300000074030000007374727404000000666C6167740100000069280000000028000000007304000000312E7079520300000001000000730A0000000001480106010D0114014E280100000052030000002800000000280000000028000000007304000000312E707974080000003C6D6F64756C653E010000007300000000
將十六進制字符串保存到新建的flag文件中

通過winhex打開flag文件,然后轉換文件---十六進制ascii-->二進制
轉換成功后,發現文件中包含有1.py和1.pyt關鍵字,該文件為pyc格式的文件
因此將其保存為flag.pyc

這里通過在線工具將flag.pyc文件進行反編譯成py文件
或者通過uncompyle6將flag.pyc反編譯成py文件
uncompyle6  flag.pyc  >flag.py
運行反編譯后的python文件,可獲得flag(注意需要在末尾添加falg()以調用函數)
def flag():
str = [102,108,97,103,123,51,56,97,53,55,48,51,50,48,56,53,52,52,49,101,55,125]
flag = ''
for i in str:
flag += chr(i)
print flag
flag()
            
            
            
                    
最終flag為:
flag{38a57032085441e7}



題目名稱:心儀的公司
題目描述:
小黑在拿到webshell后,馬上就獲得了自己心儀公司的照片
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/31cc86285680418f8a1fb45951d25552.rar
題目writeup:
strings  webshell.pcapng  | grep  {
根據題目描述:小黑在拿到webshell后,馬上就獲得了自己心儀公司的照片。猜測是找http包,然后分析包含照片的信息。
用wireshark打開包,過濾出http協議的包,不一會就能找到圖片中的flag



題目名稱:misc1
題目描述:d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd
題目writeup:
根據題目描述,發現是一串十六進制字符,直接轉換成ascii發現不行。 而且字符剛好是134位。可以將其分為兩個一組
payload = "d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd"
s = ""
for i in range(0,len(payload),2):
s += "0x"
s += payload[i:i+2]
s += ","

print s
得到2個一組的十六進制:
0xd4,0xe8,0xe1,0xf4,0xa0,0xf7,0xe1,0xf3,0xa0,0xe6,0xe1,0xf3,0xf4,0xa1,0xa0,0xd4,0xe8,0xe5,0xa0,0xe6,0xec,0xe1,0xe7,0xa0,0xe9,0xf3,0xba,0xa0,0xc4,0xc4,0xc3,0xd4,0xc6,0xfb,0xb9,0xe1,0xe6,0xb3,0xe3,0xb9,0xe4,0xb3,0xb7,0xb7,0xe2,0xb6,0xb1,0xe4,0xb2,0xb6,0xb9,0xe2,0xb1,0xb1,0xb3,0xb3,0xb7,0xe6,0xb3,0xb3,0xb0,0xe3,0xb9,0xb3,0xb5,0xe6,0xfd,
0xd4此類的都是大於127的所以很可能是移位,而且要用減的,因為這里的數字都比127來的大。
# encoding:utf-8
s = [0xd4,0xe8,0xe1,0xf4,0xa0,0xf7,0xe1,0xf3,0xa0,0xe6,0xe1,0xf3,0xf4,0xa1,0xa0,0xd4,0xe8,0xe5,0xa0,0xe6,0xec,0xe1,0xe7,0xa0,0xe9,0xf3,0xba,0xa0,0xc4,0xc4,0xc3,0xd4,0xc6,0xfb,0xb9,0xe1,0xe6,0xb3,0xe3,0xb9,0xe4,0xb3,0xb7,0xb7,0xe2,0xb6,0xb1,0xe4,0xb2,0xb6,0xb9,0xe2,0xb1,0xb1,0xb3,0xb3,0xb7,0xe6,0xb3,0xb3,0xb0,0xe3,0xb9,0xb3,0xb5,0xe6,0xfd]
for i in range(135):
flag = ""
for j in range(len(s)):
flag += chr(s[j]-i)
print("第%s移位:%s")%(i,flag)
或者
使用下面腳本將其每兩個分組十六進制,轉成十進制后-128(偏移量為128),再轉成ascii碼得到flag
import re
s = 'd4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd'
num = re.findall('\w{2}' ,s)
flag = ''
for i in num:
ch = chr(int(i,16)-128)
flag += ch
print(flag)
        
        
        
                
最終得到flag:
DDCTF{9af3c9d377b61d269b11337f330c935f}

數字像素隱寫
題目名稱:Miscellaneous-200
題目描述:[Flag在這里!](flag.txt)
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/62f4ea780ecf4e6bbef5f40d674ec073.txt
題目writeup:
方法一:
下載附件得到一個flag.txt文件,里面有61366行,每行包含三個逗號分隔值的元組,大部分為  255,255,255  這看起來像具有給定 RGB 值的圖像。
於是可推斷以此txt文件可繪制一幅圖片
圖像的尺寸可能是:1、2、61、122、503、1006、30683、61366。最可能的圖像大小是 122×503px 或 503×112px。
那么圖像的寬度和高度為:
122*503或者503*122
通過python腳本將其文本(像素點)轉換成圖片:
# coding=utf8
from PIL import Image
x = 503
y = 122
img = Image.new('RGB',(503,122),"black")
f = open('flag.txt','r')
pix=[]
for i in range(61366):
a = f.readline()
a = a.replace('\n','')
pix.append(a)

#print pix
im = []
for i in range(len(pix)):
im.append(pix[i].split(','))

#print im
for i in range(x):#x = 503
for j in range(y):#y = 122
pix = (int(im[i*122+j][0]),int(im[i*122+j][1]),int(im[i*122+j][2]))
img.putpixel((i,j),pix)#寫某個像素位置的值

img.show()

方法二:
這里我們可以將文本內容轉換成ppm格式,PPM格式詳見下面鏈接:
轉換后的flag.ppm格式說明:
          
          
          
                  
第一行:p3表示文件格式類型為ascii
第二行:122  503  表示圖像的寬度和高度用ascii表示
第三行:最大像素值為255字節表示,范圍為0-255
第4行開始到6139行表示圖像數據:
按RGB的順序排列,RGB中間用空格隔開,圖片每一行用回車隔開。
https://github.com/g0tmk/write-ups/blob/master/defkthon-ctf/misc-200/flag.ppm

我們通過命令 convert 將falg.ppm轉換為 PNG,然后翻轉 + 旋轉》
convert -flip -rotate 90 flag.ppm flag.png
           
           
           
                   
可獲得圖片,圖片中含有flag內容
              
              
              
                      
最終得到flag:
flag{ youc@n'tseeme }


端口隱寫
題目名稱:Hidden-Message
題目描述:
藏的什么信息?
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/8868f595665740159650d6e654aadc93.pcap
題目writeup:
下載附件,得到一個流量數據包flag.pcap,此數據包用wireshark打開發現都是UDP協議,其中源端口末尾號一直變化(發現只有紅框位置0和1不斷變換 ),考慮到為二進制,結合kali的tshark(wireshark命令版)和perl語法,將二進制數據
轉化之后的到flag
tshark -r  flag.pcap -Tfields -e udp.srcport #打印數據包UDP協議源端口
tshark -r  flag.pcap -Tfields -e udp.srcport | while read port; do echo -n ${port: -1}; done | tr 01 10 | perl -lpe '$_=pack"B*",$_'

最終得到flag:
Heisenberg






題目名稱:Recover-Deleted-File
題目描述:
恢復磁盤並且找到FLAG.
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/c297795634cb4f6e8e1d88be044ec0c4.gz
題目writeup:
下載附件,並對附件解壓,獲得一個disk-image文件

通過binwalk命令查看文件包含的屬性,發現是一個linux磁盤文件
binwalk disk-image
通過fls列出linux磁盤文件有哪些文件和操作記錄,可以看到有一個目錄lost+found以及被刪除操作flag
fls disk-image
根據flag描述,需要磁盤數據還原,可通過 extundelete命令對其進行恢復,這里可以恢復出flag目錄
extundelete disk-image --restore-file /flag
或者
extundelete disk-image --restore-all
進入到恢復數據目錄,發現有一個flag文件, 修改flag執行程序,並執行flag,可獲得flag內容
cd RECOVERED_FILES/
chmod +x flag
./flag
最終獲得flag:
de6838252f95d3b9e803b28df33b4baa



下載附件,得到一個flag.mkv文件,打開聽到一段奇怪的聲音,可能有flag有關,需要將視頻中的音頻文件提取出來。

這里使用  MKVToolnixPortable對音頻進行提取,可以看到2個mp3音頻文件,先導出第二個音頻文件,並保存為flag.mp3(第一個mp3音頻文件,通過后面的音頻文件分析沒有包含flag內容)
通過音頻分析工具a udacity進行分析,查看頻譜圖,可以看到有包含falg的內容,並不是很清晰,需要視圖放大查看。

最終獲得flag為:
flag{fun_v1d30_mu51c}



題目名稱:很普通的數獨
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/dee83d60aeda4a8cae93c5aac8f8a2ff.zip
題目writeup:
下載附件,解壓附件得到25張圖片, 把25張重合到一起去,得到一個完整的數組,但是沒有什么用,想到25張數獨可以組成5x5,是不是一張二維碼呢?
仔細觀察,如果把有數字的方格塗黑,下面三張圖片就是二維碼的三個定位碼,再注意到圖片數量為25張,是5的平方,所以,這25張圖片組合起來就是一張二維碼
           
           
           
                   
觀察發現,1、5、21這三張圖片是定位塊,但是順序不對,將順序換為5、21、1
BugkuCTF-MISC-很普通的數獨5
於是把有數字的轉換成1,沒有數字的地方轉換成0,再按順序轉換成01,得到下述數據將其保存為f lag.txt:
111111101010101000101000001111110000101111111
100000101100111101010011101100011001001000001
101110101110011111010011111101000101001011101
101110101101100010001010000011110001101011101
101110100011100100001111101111111011101011101
100000101100100000011000100001110100001000001
111111101010101010101010101010101011101111111
000000000011001101001000110100110011100000000
110011100100100001111111100100101000000101111
101001001011111111101110101011110101101001100
100000111100100100000110001101001101010001010
001100010011010001010011000100000010110010000
010110101010001111110100011101001110101101111
100011000100011100111011101101100101101110001
001100110100000000010010000111100101101011010
101000001011010111110011011111101001110100011
110111110111011001101100010100001110000100000
110101000010101000011101101101110101101001100
010011111110001011111010001000011011101101100
011001011001010101100011110101001100001010010
010111111111101011111111101101101111111111100
011110001100000100001000101000100100100011110
111110101110011100111010110100110100101010010
110010001011101011101000111100000011100010000
101011111011100111101111111100001010111110010
110100011000111000100111101101111101000100010
111101111110001001000011010110001111110111110
011001010101000110010100010001000101101010001
011101110101101101100100001101101000111101001
110110001001101100010101101111110100101100110
000011100111000000000100001010101111100010010
111010010011110011101110010100001011111010010
101001100010111111110100000100001010101010100
000010011001001101110101001111100101111101101
000010111101110001101011000001000101110100110
011110011010100010100000011011000001110010000
100110100100001101111111101100101110111110011
000000001111110101101000101011100100100011010
111111100011111011011010101101110011101011110
100000101110101101101000111110010001100010001
101110101011100001111111101101001000111111011
101110100110111101101000001001101100011101101
101110100000011101100001101010110010010010001
100000101011001011111011001011000011010110000
111111101010101001111011110101101110000101101
使用python腳本轉換成圖片:
from PIL import Image
x = 45
y = 45
im = Image.new('RGB', (x, y))

with open('flag.txt') as f:
for i in range(x):
ff = f.readline()
for j in range(y):
if(ff[j] == '1'):
im.putpixel((i, j), (255,255,255))
else:
im.putpixel((i, j), (0,0,0))

im.save("flag.jpg")
          
          
          
                  
生成一張二維碼圖片
通過二維碼QR Research掃描圖片可獲得一串base64的字符串
Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOamJGWnlWMjFHVlUxV1ZqTldNakZIWVcxS1IxTnNhRmhoTVZweVdWUkdXbVZHWkhOWGJGcHBWa1paZWxaclpEUmhNVXBYVW14V2FHVnFRVGs9
7 次 base64 解碼得到
https://base64.us/
最終得到flag:
flag{y0ud1any1s1}


題目名稱:很普通的Disco
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/48dd5a182fcc477a9a83200d800e26db.zip
題目writeup:
下載附件,解壓附件得到一個Disco.wav音頻文件,於是聯想和音頻隱寫有關
先用audacity打開,發現開頭有雜音,放大查看開頭
仔細的查了查,剛好有105個峰值頻率高低起伏的點。峰值高的點為1,峰值低的點為0。輸出出來是105個二進制數,每7個數為一組,剛好15組,也就是15個字母。
輸出的二進制文件:
110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101

二進制位,8個二進制轉成一個字符。這里只有105個,前七位1100110,是f的二進制形式。所以需要取出湊夠8位,將步長設置成7,然后 + 0,再轉成字符串

使用以下python腳本進行轉換成ascii:

s = '110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101'
flag = ''
for i in range(0,len(s),7):
flag += chr(int('0'+s[i:i + 7],2))
print(flag)

最終flag:
flag{W0W*funny}

題目名稱:miscmisc
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/d037429cf055493b879ef09d9b59bd41.zip
題目writeup:
1.下載附件,對其進行解壓,得到一張bugoucuci.png圖片,並通過binwalk對圖片文件進行查看文件包含屬性,發現圖片文件隱藏了zip和PN兩種文件。
通過foremost命令對 bugoucuci.png圖片進行分離,得到2個壓縮文件和一個PNG圖片文件。其中2個壓縮文件的內容是一樣的,只需要分析其中一個壓縮文件就行了。
這里對其中的一個壓縮文件00000090進行解壓,得到一個chadiand.zip壓縮文件和一張chayidian.jpg圖片文件
直接解壓 chadiand.zip文件,提示需要輸入密碼。首先猜測可能是爆破,但是爆破了十多分鍾也沒出密碼。說明密碼和爆破無關。
接着分析 chayidian.jpg圖片文件,通過binwalk命令發現圖片文件包含了一個壓縮文件和1張PNG圖片
通過foremost對 chayidian.jpg圖片文件進行分離,得到一個00000318.zip壓縮文件。
00000318.zip壓縮文件進行解壓,得到一個flag.txt文件,查看文件內容並不是flag
根據解壓出來的flag.txt文件以及需要密碼解壓的chadiand.zip文件中也包含了一個flag.txt文件,猜測是需要用到明文攻擊才能解壓出 chadiand.zip文件
首先通過winrar壓縮軟件對flag.txt進行打包壓縮成flag.zip,然后對比其中CRC32的值,發現chadian.zip和flag.zip的 CRC32值是一樣的。那么就可以通過明文攻擊可以解壓出 chadian.zip
這里通過ARCHRP對 chadian.zip文件進行明文攻擊
等待十分鍾后,顯示加密密鑰已恢復成功
然后點確定然后保存chadiand_decrypted.zip
chadiand_decrypted.zip進行解壓,得到以下三個文件
解壓whoami.zip文件,提示需要輸入密碼,既然解壓得到三個文件,那么解壓的密碼一定和另外兩個文件有關。
打開world.png圖片文件,圖片內容中 發現有提示: pass in world. 此時想到密碼可能與此圖片還有world.doc文件有關,在kali下通過binwalk分析無果。
那么考慮可能是圖片的隱寫,於是打開stegsolve打開world.png文件,
然后試探各種通道,在LSB BGR條件下發現pass,所以這是LSB信息隱寫。得到pass:z^ea,去解壓文件 發現不行

打開world.doc文件,顯示是一段提示內容:除了這個就差一點點了,並 根據提示 pass in world 猜想 world.doc 文件 可能還會有隱藏文字
勾選word選項中的隱藏的文字,就會顯示出幾行像密碼的 隱藏字符
到目前為止,我們從world1.png中得到 pass:z^ea 在world.doc文件中得到幾行隱藏的字符串。測試了z^ea+world.do每行中隱藏的字符串都不能解壓壓縮文件。
出題人真的是腦洞大開,誰會想到最后的密碼是 pass內容+world里每行字符串的最后一個字符,
於是解壓密碼就是 :z^ea4zaa3azf8
通過該密碼解壓出whoami壓縮包,打卡壓縮包中的whoami.txt就得到了flag內容。
最終flag為:
flag{12sad7eaf46a84fe9q4fasf48e6q4f6as4f864q9e48f9q4fa6sf6f48}




題目名稱:flag_universe
題目描述:please find the flag in our universe!
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/d2ced53c4a2e476995845c72bc39939d.zip
題目wirteup:
打開流量包,使用篩選器篩出ftp數據流,可以看到通過ftp命令操作了universe.png和flag.txt以及new_universe.png圖片
其中對比較顯眼的 new_universe.png圖片進行TCP數據流追蹤

追蹤數據流在到TCP流為10時,出現了一段base64字符串

對base64解密后得到:flag{This is fake flag hahaha},提交顯示錯誤,該flag是假的flag



繼續追蹤TCP數據流,universe.png中也沒有flag,當追蹤到第14個TCP數據流時,有一個new_universe.png
通過原始數據格式保存為flag.png
可以看到成功導出了一張PNG圖片
通過stegsolve圖片隱寫工具進行查看,發現存在LSB隱寫,可獲得flag內容
最終flag為:
flag{Pla te_err_klaus_Mai l_Life}



題目名稱:奇怪的TTL字段
題目描述:我們截獲了一些IP數據報,發現報文頭中的TTL值特別可疑,懷疑是通信方嵌入了數據到TTL,我們將這些TTL值提取了出來,你能看出什么端倪嗎?
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/0bf565e00b864f4ba06efc858056c7e9.zip
題目writeup:
下載附件,對其解壓得到一個ttl.txt文件,其內容就是一組ttl的值

該文本文件中的TTL值只有4種值:63/255/127/191,並且根據題目的介紹我們知道數據隱藏在這些值里,那么就比較容易想到的是信息隱藏在二進制中。

將這四個數值都轉換成二進制得到 :1111111111111、1111111、10111111。 TTL 值為一個 8 位整數,不足 8 位的二進制數開頭補 0,變為 8 位。

即:0011111111111111、0111111、10111111

變的只有前面兩位,后面6位1不變,只有前面兩位藏了數據,也就是說一組TTL值可以隱藏一個字節,提取開頭兩位為:00110110,恰好為全排列,可以用於數據的存儲:

值(D) 二進制
63 00111111
255 11111111
127 01111111
191 10111111


TTL=127--》01

TTL=191--》10

TTL=127--》01

TTL=191--》10

得到一個字母對應的8位即:01100110,即字母為:f

如果傳輸4個就是一字節,取前面的2位組成8位,對照二進制字母表,可以發現前面是ffd8,jpg圖片標志

通過python腳本將ttl.txt提取轉換后的數據並保存為圖片,是因為二進制轉成ASCII時發現是 jpg 文件格式。

f = open('ttl.txt','r')
TTL = f.readlines()
p = []
for i in TTL:
p.append(int(i[4:]))
s = ''
for i in p:
if i == 63:
a = '00'
elif i == 127:
a = '01'
elif i == 191:
a = '10'
elif i == 255:
a = '11'
s += a
print(type(s))
print(s)
import binascii
flag = ''
for i in range(0,len(s),8):
flag += chr(int(s[i:i+8],2))
flag = binascii.unhexlify(flag)
wp = open('res1.jpg','wb')
wp.write(flag)
wp.close()

得到一張resq.jpg二維碼圖片:
通過binwalk命令查看二維碼圖片包含有6張圖片

並通過foremost分離出res1.jpg圖片
最終得到6張殘缺的圖片,可拼圖為一張二維碼圖片

用ps拼接成二維碼圖片

 

通過  QR resarch二維碼掃描工具讀取出內容出來:


其內容為:
key:AutomaticKey cipher:fftu{2028mb39927wn1f96o6e12z03j58002p}
根據key的信息,可以聯想到一種常用的加密,Automatic加密
通過在線 解密網站:
https://www.wishingstarmoye.com/ctf/autokey
最終flag為:
flag{2028ab39927df1d96e6a12b03e58002e}


題目名稱:2-1
題目附件:
          
          
          
                  
基礎知識:
           
           
           
                   
             
             
             
                     
          
          
          
                  
            
            
            
                    
89 50 4E 47 0D 0A 1A 0A 是PNG頭部署名域,表示這是一個PNG圖片
          
          
          
                  
            
            
            
                    
00 00 00 0D 描述IHDR頭部的大小
          
          
          
                  
            
            
            
                    
49 48 44 52 是Chunk Type Code, 這里Chunk Type Code=IHDR
          
          
          
                  
            
            
            
                    
00 00 00 CE 00 00 00 CE 08 02 00 00 00 描述了Chunk Data,它是可變長度數據, 前四個字節(前8位)是寬度,后四個字節(后8位)節是高度。
          
          
          
                  
            
            
            
                    
F9 7D AA 93 是IHDR的CRC校驗
       
       
       
               
題目writeup:
下載附件,對其進行解壓得到一張misc4.png圖片,但是無法打開文件
通過winhex打開misc4.png圖片,發現PNG圖片文件頭開頭的 前 4位(80 59) 不對。
PNG (png),文件頭:89504E47 文件尾:AE 42 60 82
將其修改為89 50 並保存為flag.png
依然打不開文件
通過tweakPNG工具查看png圖片 IHDR的CRC值,發現CRC值不對

把圖片文件IHDR 的crc校驗值 修改為  55 d5 f6 4f 后發現 還是打不開




發現圖片的寬度為0,需要 根據 crc校驗值 算出圖片的寬度(前8位為圖像寬度,后八位為圖像高度)

下面通過python 腳本算出圖片的寬度:
import os 
import binascii
import struct

misc = open("misc4.png","rb").read()

for i in range(1024):
data = misc[12:16] + struct.pack('>i',i)+ misc[20:29]
crc32 = binascii.crc32(data) & 0xffffffff
if crc32 == 0x932f8a6b:
print (i)
得到 709 ,十六進制轉換后得到, 0x2c5
接下來我們在winhex中將寬度字節改為 02 C5

保存為falg2.png,打開圖片發現包含flag內容:
最終flag為:
wdflag{Png_C2c_u_kn0W}



題目名稱:3-11
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/d0430db27b8c4d3694292d9ac5a55634.png
題目writeup:
用 Steg­solve 打開,發現是 LSB 隱寫,開頭 PK是 zip 的文件頭
將其另存為flag.zip,打開壓縮文件,發現文件已損壞
於是用winrar自帶的修復壓縮文件的功能進行修復壓縮文件

將修復好的文件保存為 rebuilt.flag.zip,對其進行解壓,得到一個flag.txt文件,文件內容為base64
將base64通過在線工具進行解密,發現是一張PNG圖片
將其保存為flag1.png圖片,發現無法打開該文件

如何變成圖片呢,嘗試直接改后綴名根本不行,這時候想到能不能base64轉圖片呢,百度一下找到了在線網站,直接轉換得到了答案

網站:https://tool.jisuapi.com/base642pic.html

最終flag:
FLAG{LSB_i5_SO_EASY}



題目名稱:互相傷害!!!
題目描述:flag 為flag{XXX}內的XXX內容
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/0fb3ac2f54b7497cb35e04265c478b76.zip
題目writeup:
下載附件,解壓附件得到一個文件flag
通過file命令查看flag文件屬性為pcapng流量包文件

將其后綴名改為.pcapng
用Wireshark打開流量包,過濾http協議,發現存在多個jpg文件請求
通過導出http對象,將jpg文件全部提取出來
提取出共21個jpg文件,可以看出全部為斗圖素材
首先分析圖15,發現其中包含了二維碼圖:
通過在線二維碼掃描(這里使用QR Rearch掃描不起)可獲得一串加密的字符串:
https://cli.im/deqr
U2FsdGVkX1+VpmdLwwhbyNU80MDlK+8t61sewce2qCVztitDMKpQ4fUl5nsAZOI7 bE9uL8lW/KLfbs33aC1XXw==
根據圖片文字提示“本發布會由AES獨家贊助”那么上面二維碼獲取的字符串為AES加密的字符串。其中圖片上的文字“CTF"可能和AES解密的密鑰有關。可將CTF試作為解密的密碼。
http://www.jsons.cn/aesencrypt/
得到解密后的字符串:668b13e0b0fc0944daf4c223b9831e49
668b13e0b0fc0944daf4c223b9831e49 提交flag,發現提交失敗,顯然不是flag.
繼續通過binwalk對其他文件進行依次分析,發現其他圖片文件都包含有zip文件。
對其中任意一個圖片文件10.jpg進行分離得到一個壓縮文件
解壓縮文件得到一張二維碼圖片,並通過QR Rearch二維碼掃描工具,發現掃描出來的內容幾乎都是“扔下內衣真有一線生機???交出內褲才有活路”
仔細觀察,圖5文字內容可以簡單理解為“扔下內衣,交出內褲”,觀察斗圖素材發現圖11符合上述描述“來呀,互相傷害”這張圖也與題目名稱“互相傷害”有相同有關聯。 那么就繼續對圖11重點分析
圖 5
圖11
通過foremost命令對其進行分離,得到一個壓縮文件
但是解壓縮提取出來的壓縮文件,提示需要密碼
輸入上面解出來的字符串,可正常解開壓縮文件
可獲得一張畫中畫的二維碼圖片

掃描圖二維碼得到字符串:“扔下內衣真有一線生機????交出內褲才有活路!!!!“。

發現二維碼中心還有一個二維碼,將小二維碼截取出來,掃碼得到flag內容:

得到flag:
flag{97d1-0867-2dc1-8926-144c-bc8a-4d4a-3758}
但是根據題目描述,flag 為flag{XXX}內的XXX內容
最終flag為:
97d1-0867-2dc1-8926-144c-bc8a-4d4a-3758

題目名稱:簽到題
題目描述:
SSCTF線上選舉美男大賽開始了,泰迪拿着他的密碼去解密了,提交花括號內內容(Z2dRQGdRMWZxaDBvaHRqcHRfc3d7Z2ZoZ3MjfQ==)
題目writeup:
根據描述,那么falg提交的格式為ssctf{}或者flag{}, 根據flag提交格式,因此最終的 字符串必然是被柵欄密碼加密過的
提交花括號內容: Z2dRQGdRMWZxaDBvaHRqcHRfc3d7Z2ZoZ3MjfQ==
通過ctfcarckt00ls對其進行base64解密:
得到base64解密字符串:
ggQ@gQ1fqh0ohtjpt_sw{gfhgs#}
上段密文的開頭是g所以必然還要經過以此凱撒密碼加密的
通過對其凱撒解密,移位14得到看起來像FLAG格式的開頭的SSC
得到 位移14的凱撒解密為:
ssC@sC1rct0atfvbf_ei{srtse#}
再柵欄密碼解密,每組字數8,第二欄就是ctf內容:
最終ctf結果為:
ssctf{ssCtf_seC10ver#@rabit}



題目名稱:隱藏的信息
題目描述:
這是一個被混淆的文件,但是我忘記了這個文件的密碼。你能夠幫助我還原明文嗎?
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/2eb44acfc89d4f0f9fa221d21ab96033.zip
wireup:
方法一:
1.下載附件,解壓附件得到一個message.txt文本文件,打開文件發現內容是一串八進制的數字,需要將其轉換成ascii

2.通過 python腳本將八進制數字轉換成ascii
import re
import sys
s='0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 0105 0132 0163 0131 0127 0143 066 0111 0105 0154 0124 0121 060 0116 067 0124 0152 0102 0146 0115 0107 065 0154 0130 062 0116 0150 0142 0154 071 0172 0144 0104 0102 0167 0130 063 0153 0167 0144 0130 060 0113 '
a=re.findall('\d{3,}',s)
for i in a:
sys.stdout.write(chr(int(i,8)))
得到ascii:V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K,該字符串看起來像base64加密
通過ctfcarckt00ls工具的base64解密功能對其解密,得到flag

方法二:
使用“八進制 十進制 ASCII相互轉換【支持多個字符串】”工具解—>輸入內容—>八進制轉換ASCII
得到asccii:
V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K
base64解密:
https://base64.us/

最終得到flag:
ISCC{N0_0ne_can_st0p_y0u}


題目名稱:saleae
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/5621c80acfbc445d9eb252b2660070b5.zip
題目writeup:
下載附件,對其進行解壓得到一個 saleae.logicdata 文件,該文件為邏輯分析儀數據文件。通過谷歌搜索是需要用Logic軟件打開,打開文件發現有4個channel,其中channel 0和channel 2有波形。
Logic 軟件下載地址:https://downloads.saleae.com/logic/1.2.18/Logic+1.2.18+Win+64+Standalone.zip
在analyzers新建一個SPI項目
參數設置如下,其中MOSI是主輸出從輸入,MISO是主輸入從輸出:

channel 0:規律性,等寬,是 CLK

channel 1:無波形,是主輸出端 MOSI

channel 2:波形寬度不一,攜帶數據,為主輸入端 MISO

channel 3:數據傳輸是低電平,為CS偏選端

直接豎着查看,可獲得flag
flag最終為:
flag{12071397-19d1-48e6-be8c-784b89a95e07}


題目名稱:intoU
題目描述:
I'm so into you I can barely breath.And all I wanna do is to fall in deep (IntoU歌曲歌詞)
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/d7351710703a49cda273d3284e7a3df1.zip
題目writeup:
下載附件,對其進行解壓得到一個音頻文件,通過Audacity打開音頻文件進行分析,首先選擇頻譜圖,看了大半天也沒發現有flag.
通過谷歌搜索,發現需要調整到較小的采樣率,才有可能顯示音頻隱寫,下面將其采樣率設置為8000 HZ
Ariana Grande---->頻譜圖—>采樣率—>8000 HZ
拖動滾動條到最右邊,並視圖--放大,可查看到flag內容
最終獲得flag:
RCTF{bmp_file_in_wav}



題目名稱:Excaliflag
題目描述:
只有一個真正的黑客可以從這個地方得到flag
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/f3f30930116f4b168e132db45907d0ee.png
題目wireup:
首先下載附件,解壓獲得一張圖片,通過stegsolve圖片隱寫工具打開,然后切換色塊,終獲得flag內容:
最終得到flag:
3DS{Gr4b_Only_th1s_B1ts}


題目名稱:Just-No-One
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/7932f0a447b74cfc8b6820aa706e9446.exe
題目writeup:
下載附件,獲得一個exe可執行程序,點擊安裝,進入下一步,需要輸入密碼,猜測可能需要逆向破解密碼

嘗試通過winhex和IDA分析無果


仔細觀察,在安裝軟件協議的條款里面發現了一些關於和flag有關的信息:YOU MAY SUBMIT THIS TO GET TEN POINTS(你可以提交這段字符串獲得標識)。

YOU MAY SUBMIT THIS TO GET TEN POINTS:  ILOVEREADINGEULAS
那么最終flag為:
ILOVEREADINGEULAS


題目名稱:信號不好先掛了
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/b90a71f6e04b427dba2f8d307de79145.zip
題目writeup:
下載附件,對其進行解壓,獲得一張apple.png圖片,通過stegsolev圖片隱寫工具的analyse---data extract功能對圖片的LSB進行查看分析
發現圖片的LSB隱寫中包含了PK,該PK為壓縮數據包頭。
將其保存為flag.zip
對flag.zip進行解壓,發現壓縮文件已損壞

通過winrar的修復壓縮文件功能對已損壞的flag.zip壓縮文件進行修復

保存為rebuilt.flag.zip,並對其進行解壓,獲得一張pen.png圖片
再次通過stegsolve對pen.png圖片進行通道查看,發現好幾個通道中都有一些條紋
然后兩張圖片長得一樣,所以很容易想到可能是藏有盲水印,於是用opencv處理盲水印得到flag。

合成盲水印圖,盲水印用到的py腳本可以在github上下載,https://github.com/chishaxie/BlindWaterMark,使用時需要安裝前置opencv-python庫

python  bwm.py  decode  pen.png  apple.png   flag.png

打開合成的盲水印圖片flag.png,可看到flag內容:
最終flag為:
unctf{9d0649505b702643}


題目名稱:黃金六年

題目附件:

https://adworld.xctf.org.cn/media/task/attachments/b6c6823cbfc246249941630e647bf7b6.zip

題目writeup:

下載附件,對其解壓得到一個mp4視頻文件,通過winhex打開,發現在末尾隱藏的base64加密字符串

也可以通過strings命令查看文件中包含的字符串
strings  hj6.mp4
得到base64加密字符串:
UmFyIRoHAQAzkrXlCgEFBgAFAQGAgADh7ek5VQIDPLAABKEAIEvsUpGAAwAIZmxhZy50eHQwAQAD
Dx43HyOdLMGWfCE9WEsBZprAJQoBSVlWkJNS9TP5du2kyJ275JzsNo29BnSZCgMC3h+UFV9p1QEf
JkBPPR6MrYwXmsMCMz67DN/k5u1NYw9ga53a83/B/t2G9FkG/IITuR+9gIvr/LEdd1ZRAwUEAA==
通過在線解密工具,解密獲得看起來像rar文件
https://base64.us
這里通過python腳本將base64轉換成rar壓縮包:
import base64
code = "UmFyIRoHAQAzkrXlCgEFBgAFAQGAgADh7ek5VQIDPLAABKEAIEvsUpGAAwAIZmxhZy50eHQwAQADDx43HyOdLMGWfCE9WEsBZprAJQoBSVlWkJNS9TP5du2kyJ275JzsNo29BnSZCgMC3h+UFV9p1QEfJkBPPR6MrYwXmsMCMz67DN/k5u1NYw9ga53a83/B/t2G9FkG/IITuR+9gIvr/LEdd1ZRAwUEAA=="
r = base64.b64decode(code)
file = open("flag.rar", "wb")
file.write(r)
file.close()
打開壓縮包,發現需要輸入密碼,通過爆破也沒解密出來,解密密碼可能和視頻中的圖片有關。
通過free video to jpg converter,將視頻中的圖片提取出來
下載地址:https://secure-sc-dvdvideosoft.netdna-ssl.com/FreeVideoToJPGConverter_5.0.101.201_o.exe

得到316張圖片,通過仔細查看,發現有4張圖片里面包含了二維碼
下面是提取出含有二維碼的4張圖片,並對4張圖片中的二維碼單獨截圖出來,通過QR Rearch進行掃描,並獲得4個KEY的密碼字符串。







做這種題目着實應該把屏幕調亮一點,最后一張二維碼找了好久死活找不到,調亮了屏幕之后就立馬找到了。

將二維碼掃描獲得的4個KEY的字符串按照屬性 拼接得到解壓密碼key:iwantplayctf
輸入iwantplayctf密碼對flag.zip進行解壓縮,獲得flag.txt
打開flag.txt獲得flag

最終flag為:
roarctf{CTF-from-RuMen-to-RuYuan}

題目名稱:打開電動車
題目描述:
截獲了一台電動車的鑰匙發射出的鎖車信號,3分鍾之內,我要獲得它地址位的全部信息。flag內容二進制表示即可
題目附件:
https://adworld.xctf.org.cn/media/uploads/task/3d93f0c47ad94e31882e0a670eb6f5cf.zip
題目writeup:
下載附件,對其解壓,得到一個音頻文件,通過Audacity打開音頻文件,然后通過視圖---放大查看波形圖。
可以看到短波和長波

短波為0,長波為1,轉換得到 01 字符串:
0    011101001010101001100010
根據題目信息說需要地址位的全部信息
查資料得到:信號是由同步引導碼,地址位和數據位構成
固定碼遙控信號的構成:

一個是PT226x的,前面4bit表示同步碼,中間的8bit表示地址碼,后面的4bit表示功能碼,后面最后一個是停止碼
一個是PT224x的,前面8bit表示同步碼,中間的20bit表示地址碼,后面的4bit表示功能碼,后面最后一個是停止碼
PT226X和PT224X不同之處,PT226X 中不可能出現10這種情況 ,這道題就是PT224X.
鑰匙信號(PT224X) = 同步引導碼(8bit) + 地址位(20bit) + 數據位(4bit) + 停止碼(1bit)
仔細查看波形圖得到如下:

所以去掉前面的同步碼0和后面的數據位0010得到全部20bit地址位如下:
 01110100101010100110
最終flag:
flag{ 01110100101010100110}

題目名稱:hong
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/3fce1ffa2af0438f82c38e321d3d3032.rar
題目writeup:
下載附件,對其解壓,得到一個hong.mp3的音頻文件,通過binwalk分析音頻文件包含的文件,可以看到包含有jpeg圖片文件
binwalk hong.mp3
通過foremost命令對hong.mp3文件進行分離,得到2個圖片文件
foremost hong.mp3
首先查看0000161.jpg文件,發現是一張二維碼圖片
通過QR Rearch二維碼識別工具對 0000161.jpg文件進行掃描識別,得到一串十六進制字符串
通過在線網站https://ab126.com,對十六進制字符串進行轉換為ascii,解密出來是亂碼,無用。
03f30d0ad41db4576300000000000000000100000040000000730d0000006400008400005a00006401005328020000006300000000030000000700000043000000734b0000006401006402006403006404006405006406006407006707007d00006408007d0100781e007c0000445d16007d02007c01007400007c0200830100377d0100712800577c010047486400005328090000004e694d0000006972000000692e0000006948000000696f000000696e0000006967000000740000000028010000007403000000636872280300000074030000007374727404000000666c6167740100000069280000000028000000007304000000612e7079520300000001000000730a00000000011b0106010d0114024e280100000052030000002800000000280000000028000000007304000000612e707974080000003c6d6f64756c653e010000007300000000
最后查看另一張00000269.jpg圖片,發現圖片中包含有flag內容
最終flag為:
BCTF{cute&fat_cats_does_not_like_drinking}



題目名稱:3-1

題目附件:

https://adworld.xctf.org.cn/media/task/attachments/e395d6e5b79b4cc49ee4e5c704f872ae

題目writeup:

下載附件,對其進行解壓,得到一個二進制文件flag,通過file命令查看二進制文件flag,發現文件格式為rar壓縮包

file flag

將其二進制文件flag 重命名為flag.rar,並對壓縮文件進行解壓,得到一個文件flag1
再次通過file命令查看falg1的文件格式為pcapng
file flag1
將flag1重命名為flag1.pcapng,並通過wireshark打開。搜索關鍵字falg,發現在http協議中有flag.zip和flag.txt進行get 請求。猜測flag和這2個文件有關。
通過wireshark的導出對象---http功能可導出http請求所有的文件內容。
這里導出http請求的所有對象保存到flag文件夾下

導出來2個文件分別為receiver和flag.zip,並對flag.zip進行解壓縮,發現需要密碼,解壓密碼需要在流量包中分析獲得。
接下繼續分析流量包,對flag.rar http get 請求處進行追蹤流--tcp流分析
追蹤 TCP 流 6 時,發現一些linux操作命令和一段 python 代碼。
Linux 系統賬戶為 root,密碼為 jfm,嘗試用 jfm 解壓失敗,接下來執行 ls,cd tf/ cd wireshark/,ls 命令。 執行 cat 1 時得到 rar 文件內容, 執行 cat 2,得到 base64 編碼,解碼發現亂碼,嘗試直接用於解壓,失敗 執行 cat 3,得到 一段 python 代碼,代碼中有 AES,猜測是需要解密 其中,那個base64應該就是密文base64加密之后的字符串。
該python是一個通過AES的CBC模式將字符串進行加密或解密的腳本,其中IV是密鑰也是偏移量
# coding:utf-8
from Crypto import Random
from Crypto.Cipher import AES
import sys
import base64

IV = 'QWERTYUIOPASDFGH'
def decrypt(encrypted):
aes = AES.new(IV, AES.MODE_CBC, IV)
return aes.decrypt(encrypted)
def encrypt(message):
length = 16
count = len(message)
padding = length - (count % length)
message = message + '\0' * padding
aes = AES.new(IV, AES.MODE_CBC, IV)
return aes.encrypt(message)
str = 'this is a test'
example = encrypt(str)
print(decrypt(example))
對上面python 代碼進行修改 ,並對其編 碼 用 base64 解 碼 后 解 密 ((注意要先用base64解碼才能進行AES-CBC解密):
# coding:utf-8
__author__ = 'YFP'
from Crypto import Random
from Crypto.Cipher import AES
import sys
import base64
IV = 'QWERTYUIOPASDFGH'
def decrypt(encrypted):
aes = AES.new(IV, AES.MODE_CBC, IV)
return aes.decrypt(encrypted)
def encrypt(message):
length = 16
count = len(message)
padding = length - (count % length)
message = message + '\0' * padding
aes = AES.new(IV, AES.MODE_CBC, IV)
return aes.encrypt(message)
str = 'this is a test'
example = encrypt(str)
print(decrypt(example))
#增加如下兩行
a='19aaFYsQQKr+hVX6hl2smAUQ5a767TsULEUebWSajEo='
print(decrypt(base64.b64decode(a)))
執行修改后的python 腳本,得到base64的AES解密字符串為: No_One_Can_Decrypt_Me,並將該字符串作為密碼對flag.zip進行解壓縮
成功解壓出flag.txt,打開flag.txt,獲得flag

最終flag為:
WDCTF{Seclab_CTF_2017}





wdflag{My_c4t_Ho}
題目名稱:4-2
題目描述:
格式為flag{xxxxxxxx}
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/1ddbc89c20c845928498c22cd3faf1c4.txt
題目writeup:
下載附件 ,得到一個.txt文件,打開文件發現下面幾個標紅的字母具有一定頻率數
通過詞頻分析得到flag,附在線分析網站:https://quipqiup.com
得到flag: classical-cipher_is_not_security_hs
根據題目描述,提交的flag格式,最終flag為:
flag{classical-cipher_is_not_security_hs}



題目名稱:5-1
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/badd3e0621ff43de8cf802545bbd3ed0
題目writeup:
下載附件,對其進行解壓,得到一個二進制文件flag,通過命令file查看文件類型,並沒有發現文件類型
file flag
通過winhex打開flag文件,發現字符是加了密,猜測可能xor加密
這里通過xortool( https://github.com/hellman/xortool)對flag文件進行分析.
xortool.py是基於python的腳本,用於完成一些xor分析,包括:1. 猜想key的長度;2. 猜想key的值;3. 解密一些經過xoe加密的文件.
下面查看flag的xor加密的密鑰長度,可以看到占比最大的百分百就是密鑰長度為13
xortool flag

xortool  flag  -l 13  -c  20
參數解釋:
其中-l就是指定密鑰長度,-c表示出現頻率最高的字符。字符出現的最高頻率一般為20
嘗試出了key:GoodLuckToYou(根據經驗將試出來的),通過以下python腳本對原文件進行異或解密:
import os

c = open("flag",'rb').read()
key = "GoodLuckToYou"
def xor(c,k):
keylen = len(k)
res = ""
for pos,c in enumerate(c):
res +=chr(ord(c) ^ ord(k[pos % keylen]))
return res
print xor(c,key)
運行python腳本得到一串字符串,其中字符串中就包含有flag內容
最終 flag為:
wdflag{You Are Very Smart}


連環套娃壓縮包破解之音頻隱寫
題目名稱:Miscellaneous-300
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/f932f55b83fa493ab024390071020088.zip
題目writeup:
下載附件對其解壓,得到一個壓縮文件flag.zip,對其進行解壓,提示需要輸入密碼,猜測需要對其壓縮包進行密碼爆破
通過ziperello對壓縮包進行爆破
發現爆破出來的密碼是46783,密碼正好是里面壓縮包名稱。

通過該密碼對壓縮包進行解壓,可成功解密
解壓完了,又出現了一個新的壓縮包,解壓壓縮包,又提示需要輸入密碼

接着,按照上面的爆破壓縮包密碼的方法進行爆破

結果發現密碼就是壓縮包內文件名。發現的規律是:解壓里面又是個壓縮包,解壓一波,發現又是一個壓縮包,后一個文件名的名字是前一個壓縮包的解壓密碼。

讓我們編寫一個sh 腳本,並調用fcrackzip命令遞歸地破解和提取zip文件:

crack_zip.sh:


#!/usr/bin/env bash

while [ -e *.zip ]; do

  files=*.zip;

  for file in $files; do

    echo -n "Cracking ${file}… ";

    output="$(fcrackzip -u -l 1-6 -c '1' *.zip | tr -d '\n')";

    password="${output/PASSWORD FOUND\!\!\!\!: pw == /}";

    if [ -z "${password}" ]; then

      echo "Failed to find password";

      break 2;

    fi;

    echo "Found password: \`${password}\`";

    unzip -q -P "${password}" "$file";

    rm "${file}";

  done;

done;


執行sh腳本:

bash crack_zip.sh

讓它執行一段時間后,最后會得到一個12475.zip,發現純數字密碼爆破失敗,這個一個復雜的密碼加密的壓縮包

通過fackzip的復雜密碼對其進行爆破,發現爆破出來的密碼為:boyzz

./fcrackzip -u -c a1 -l 1-6 12475.zip

通過unzip對12475.zip進行解壓,得到一個音頻文件mess.wav

unzip -q -P b0yzz 12475.zip

通過音頻隱寫工具Audacity打開音頻文件mess.wav,並選擇頻譜圖,就可以查看到flag的內容。



最終 falg為:

BallsRealBolls


題目名稱:雙色塊

題目附件:

https://adworld.xctf.org.cn/media/task/attachments/45663022307c456897d30639f56da759.zip

題目writeup:

方法一:

下載附件,對其解壓,得到一個out.gif的動態圖片,且只存在綠色和紫色兩個顏色,分布不均勻

通過binwalk命令查看圖片隱藏的文件,可以看到隱藏了png圖片
binwalk out.gif
通過foremost命令對out.gif進行分離,可到一個00001436.png圖片
foremost out.gif
查看分離的圖片,發現圖片的內容為key:ctfer2333,猜測和flag有關,且 分析這張圖片無異常。
通過GifSplitter將out.gif文件進行分幀處理
得到576張圖片,所有圖片中只有紫色和綠色兩種顏色,應該對應的是1和0或者0和1,可轉換成01二進制數據

按照紫色1,綠色0的規則按照先后順序排列出了以下數據:

011011110011100001000100011011000111100001001011001010110100100000111000011101110111001101101001010110000110010100101111010001010101001001000110011100000100000101001101011000010100001001010000011010010100100101100011011010100011000101110011010010000111100101000111010011110100110101101101010100010100010001101011010010110010101101110101010110000111001101010110010110100110011101110010011001010011010101000100010100110101100001110111001111010011110101101000011010000110100001101000011010000110100001101000011010000110100001101000011010000110100001101000011010000110100001101000

每八個一組轉換成ascii字符。那么通過在線工具二進制轉asciii, http://www.txttool.com/wenben_binarystr.asp,可得到ascii為:o8DlxK+H8wsiXe/ERFpAMaBPiIcj1sHyGOMmQDkK+uXsVZgre5DSXw==hhhhhhhhhhhhhhhh

按照紫色0,綠色1的規則排列出以下數據:

100100001100011110111011100100111000011110110100110101001011011111000111100010001000110010010110101001111001101011010000101110101010110110111001100011111011111010110010100111101011110110101111100101101011011010011100100101011100111010001100101101111000011010111000101100001011001010010010101011101011101110010100101101001101010010001010101001111000110010101001101001011001100010001101100110101100101010111011101011001010011110001000110000101100001010010111100101111001011110010111100101111001011110010111100101111001011110010111100101111001011110010111100101111001011110010111

同理,按照上面方面,得到一些亂碼字符,顯然不是我們想要的加密字符串。

得到的加密字符串:

o8DlxK+H8wsiXe/ERFpAMaBPiIcj1sHyGOMmQDkK+uXsVZgre5DSXw==hhhhhhhhhhhhhhhh

這應該是des加密或者base64,但是有提示key,所以應該是des加密,key是上面的圖片內容ctfer2333,正常來說des結尾是=,最后一串h去掉就好了。

然后到http://tool.chacuo.net/cryptdes解密




方法二:
gif輪播之后發現是⼀個24* 24的像素點,每個像素為10 10,每個點顏⾊為00ff00或是ff00ff 先把gif分離成單幀,那么可以通過 python腳本對其進行分割成不同的單幀圖像。
# ! /usr/bin/env python2
# -*- coding: utf-8 -*-

import os
from PIL import Image


def main(gif_file):
png_dir = 'C:\\Users\\backlion\\Desktop\\flag\\'
img = Image.open(gif_file)
while True:
current = img.tell()
img.save(png_dir + str(current + 1) + '.png')
img.seek(current + 1)

if __name__ == '__main__':
gif_file = 'out.gif'
main(gif_file)
然后讀取每個png中的對應點的信息,並按照8bit轉換為ascii
#! /usr/bin/env python2
# -*- coding: utf-8 -*-

import os
from PIL import Image


def main():
png_dir = 'C:\\Users\\backlion\\Desktop\\flag\\'
ret = ""
for i in range(0, 24):
line = ""
for j in range(0, 24):
file_name = "C:\\Users\\backlion\\Desktop\\flag\\" + str(i * 24 + j + 1) + ".png"
x = j * 10 + 5
y = i * 10 + 5
img = Image.open(file_name)
img = img.convert("RGB")
img_array = img.load()
r, g, b = p = img_array[x, y]
if g == 255:
line += "0"
if r == 255 and b == 255:
line += "1"
if len(line) == 8:
ret += chr(int(line, 2))
line = ""
print ret


if __name__ == '__main__':
main()



最終flag為:
flag{2ce3b416457d4380dc9a6149858f71db}


題目名稱:Py-Py-Py
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/58cadd8d8269455ebc94690fd777c34a.pyc
題目writeup:
下載附件,得到一個pyc文件,通過uncompyle6命令將其反編譯成python腳本
uncompyle6 flag.pyc>flag.py
其中flag.py是一個rc4的加密解密python腳本:
# uncompyle6 version 3.7.4
# Python bytecode 3.6 (3379)
# Decompiled from: Python 2.7.18 (default, Feb 27 2021, 08:40:44)
# [GCC 10.2.1 20210110]
# Warning: this version of Python has problems handling the Python 3 "byte" type in constants properly.

# Embedded file name: pystego.py
# Compiled at: 2017-08-01 00:44:47
# Size of source mod 2**32: 1961 bytes
import sys, os, hashlib, time, base64
fllag = '9474yeUMWODKruX7OFzD9oekO28+EqYCZHrUjWNm92NSU+eYXOPsRPEFrNMs7J+4qautoqOrvq28pLU='

def crypto(string, op='encode', public_key='ddd', expirytime=0):
ckey_lenth = 4
public_key = public_key and public_key or ''
key = hashlib.md5(public_key).hexdigest() ##將public_key以MD5方式加密,再轉化成十六進制
keya = hashlib.md5(key[0:16]).hexdigest()
keyb = hashlib.md5(key[16:32]).hexdigest()
keyc = ckey_lenth and (op == 'decode' and string[0:ckey_lenth] or hashlib.md5(str(time.time())).hexdigest()[32 - ckey_lenth:32]) or ''
cryptkey = keya + hashlib.md5(keya + keyc).hexdigest()
key_lenth = len(cryptkey)
string = op == 'decode' and base64.b64decode(string[4:]) or '0000000000' + hashlib.md5(string + keyb).hexdigest()[0:16] + string
string_lenth = len(string)
result = ''
box = list(range(256))
randkey = []
for i in xrange(255):
randkey.append(ord(cryptkey[(i % key_lenth)]))

for i in xrange(255):
j = 0
j = (j + box[i] + randkey[i]) % 256
tmp = box[i]
box[i] = box[j]
box[j] = tmp

for i in xrange(string_lenth):
a = j = 0
a = (a + 1) % 256
j = (j + box[a]) % 256
tmp = box[a]
box[a] = box[j]
box[j] = tmp
result += chr(ord(string[i]) ^ box[((box[a] + box[j]) % 256)])

if op == 'decode':
if result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0:
if result[10:26] == hashlib.md5(result[26:] + keyb).hexdigest()[0:16]:
return result[26:]
return
else:
return keyc + base64.b64encode(result)


if __name__ == '__main__':
while True:
flag = raw_input('Please input your flag:')
if fllag == crypto(fllag, 'decode'):
print('Success')
print crypto(fllag, 'decode')
break
else:
continue
# okay decompiling flag.pyc

根據腳本分析,在原flag.py腳本基礎上,直接把下面這段代碼刪除了,再添加一句 print crypto(fllag,'decode')就可以修改成解密腳本。
if __name__ == '__main__':
    while True:
        flag = raw_input('Please input your flag:')
        if flag == crypto(fllag, 'decode'):
            print('Success')
            break
        else:
            continue
最終修改后的解密腳本為:
# uncompyle6 version 3.7.4
# Python bytecode 3.6 (3379)
# Decompiled from: Python 2.7.18 (default, Feb 27 2021, 08:40:44)
# [GCC 10.2.1 20210110]
# Warning: this version of Python has problems handling the Python 3 "byte" type in constants properly.

# Embedded file name: pystego.py
# Compiled at: 2017-08-01 00:44:47
# Size of source mod 2**32: 1961 bytes
import sys, os, hashlib, time, base64
fllag = '9474yeUMWODKruX7OFzD9oekO28+EqYCZHrUjWNm92NSU+eYXOPsRPEFrNMs7J+4qautoqOrvq28pLU='

def crypto(string, op='encode', public_key='ddd', expirytime=0):
ckey_lenth = 4
public_key = public_key and public_key or ''
key = hashlib.md5(public_key).hexdigest()
keya = hashlib.md5(key[0:16]).hexdigest()
keyb = hashlib.md5(key[16:32]).hexdigest()
keyc = ckey_lenth and (op == 'decode' and string[0:ckey_lenth] or hashlib.md5(str(time.time())).hexdigest()[32 - ckey_lenth:32]) or ''
cryptkey = keya + hashlib.md5(keya + keyc).hexdigest()
key_lenth = len(cryptkey)
string = op == 'decode' and base64.b64decode(string[4:]) or '0000000000' + hashlib.md5(string + keyb).hexdigest()[0:16] + string
string_lenth = len(string)
result = ''
box = list(range(256))
randkey = []
for i in xrange(255):
randkey.append(ord(cryptkey[(i % key_lenth)]))

for i in xrange(255):
j = 0
j = (j + box[i] + randkey[i]) % 256
tmp = box[i]
box[i] = box[j]
box[j] = tmp

for i in xrange(string_lenth):
a = j = 0
a = (a + 1) % 256
j = (j + box[a]) % 256
tmp = box[a]
box[a] = box[j]
box[j] = tmp
result += chr(ord(string[i]) ^ box[((box[a] + box[j]) % 256)])

if op == 'decode':
if result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0:
if result[10:26] == hashlib.md5(result[26:] + keyb).hexdigest()[0:16]:
return result[26:]
return
else:
return keyc + base64.b64encode(result)

print crypto(fllag,'decode')

執行腳本,得到 flag 的值:The challenge is Steganography, 直接提交不對,加flag{}提交仍然也不對。
根據腳本解密得到The challenge is Steganography,是pyc的隱寫,百度到在pyc中隱藏payload的工具為stegosaurus。
通過 stegosaurus腳本查看隱藏在flag.pyc中的字符串
./stegosaurus   -x flag.pyc
最終 flag:
Flag{HiD3_Pal0ad_1n_Python}


題目名稱:warmup
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/b7b7e994d7fb4316b03f446295cfd03b.zip
題目writeup:
下載附件,對其進行解壓,得到一個png圖片以及一個壓縮包文件
對壓縮包進行解壓提示需要輸入密碼,這里猜測可能需要爆破壓縮包密碼或者明文攻擊、
打開壓縮包預覽,發現其中包含的圖片文件和附件解壓得到的圖片文件名稱是一致的。猜測需要用到明文攻擊。
這里首先對open_forum.png圖片通過winrar對其壓縮成文件open_forum.zip
同時查看到 open_forum.zip文件的CRC232值和需要密碼解密的壓縮包文件warmup.zip的CRC232的值一樣。那么warmup.zip壓縮包解壓存在明文攻擊。
通過ARCHRP攻擊對 warmup.zip進行明文攻擊

這里可能完全解密成功需要一晚上,實際需要不了那么多少,在10分鍾左右就可以終止。
終止壓縮包爆破后,可確定直接保存為warmup_decrypted.zip文件。
warmup_decrypted.zip文件進行解壓縮,成功解壓出三張圖片,其中fuli.png和fuli2.png圖片顯示是一樣的。
通過stegsolve對其fuli.png圖片進行通道查看,並沒有發現啥。
再次通過 stegsolve對其fuli2.png進行通道查看,發現出現一些
根據以上判斷,2張圖片存在盲水印。

合成盲水印圖,盲水印用到的py腳本可以在github上下載,https://github.com/chishaxie/BlindWaterMark,使用時需要安裝前置opencv-python庫

通過bwm.py腳本可以將2張圖片合成一張圖片flag.png

python  bwm.py  decode  pen.png  apple.png   flag.png

打卡flag.png圖片,可以看到flag內容
最終flag為:
flag{bWm_Are_W0nderfu1}

題目名稱:傳感器1
題目描述:
已知ID為0x8893CA58的溫度傳感器的未解碼報文為:3EAAAAA56A69AA55A95995A569AA95565556 此時有另一個相同型號的傳感器,其未解碼報文為:3EAAAAA56A69AA556A965A5999596AA95656 請解出其ID,提交格式為flag{xxx}
題目writeup:
基礎知識:
曼徹斯特編碼(Manchester Encoding),也叫做相位編碼( Phase Encode,簡寫PE),是一個同步時鍾編碼技術,被物理層使用來編碼一個同步位流的時鍾和數據。
它在以太網媒介系統中的應用屬於數據通信中的兩種 位同步方法里的自同步法(另一種是外同步法),即接收方利用包含有同步信號的特殊編碼從信號自身提取同步
信號來鎖定自己的時鍾脈沖頻率,達到同步目的。
IEEE 802.4(令牌總線)和低速版的IEEE 802.3(以太網)中規定, 按照這樣的說法, 01電平跳變表示1, 10的電平跳變表示0。
方法一:

先把16進制3EAAAAA56A69AA55A95995A569AA95565556都轉成2進制,得到:
1111101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110

又得知曼切斯特是從低到高跳變表示“1”,從高到低跳變表示“0”,即01->1,10->0。可以看到二進制除了前4位,后面都是10,01,差分曼切斯特有跳變為"0",無跳變為"1

那么實際上轉換成的二進制為(去掉前面最前面1111):
101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110

因此將編碼進行曼切斯特解碼:

00000000001001001101100010001001001111001010010110000100000110000001

轉成16進制得到:
24d8893ca584181

又得知第一個ID為0x8893CA58的溫度傳感器就在第一個曼切斯特解碼24d8893ca584181中,是第4位到11位為:8893ca58,轉換成大寫為8893CA58

根據上面原理,可將3EAAAAA56A69AA556A965A5999596AA95656,轉換成曼切斯特解碼為24d8845abf34119,取第4位到11位,最終為:8845ABF3

那么flag為:

flag{8845ABF3}

方法二:

python腳本(這里需要將3E前綴去掉,因為轉換成二進制為1111,不存在曼切斯特解碼特性)

char = "AAAAA56A69AA556A965A5999596AA95656"
result = char.replace("5","0101").replace("6","0110").replace("9","1001").replace("A","1010")
num = len(result)
flag = ""
flag_final = ""
result = "0"+result
for i in range(1,num,2):
if result[i:i+2][0] !=result[i-1]:
flag += "0"
if result[i:i+2][0] ==result[i-1]:
flag += "1"
print hex(int(flag,2)).upper()[2:]

或者:
id1 = 0x8893CA58
msg1 = 0x3EAAAAA56A69AA55A95995A569AA95565556
msg2 = 0x3EAAAAA56A69AA556A965A5999596AA95656

def calc(msg):
id=''
s = bin(msg)[6:]
for i in range(2, len(s), 2):
if s[i-2:i] == s[i:i+2]:
id += '0'
else:
id += '1'
return hex(int(id, 2)).upper()

print(calc(msg1))
print(calc(msg2))

可以看到id是取結果的4到11位,ID為: 8845ABF3
最終flag為:
flag{8845ABF3}

題目名稱:halo
題目描述:
答案的格式為flag{XXXX}
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/56afc3a6c8d04cde8b1354b77fe91731.zip
題目writeup:
下載附件,對其進行解壓得到一個txt文件,文件內容看來像base64加密
通過在線base64解密網站對其進行base64解密,得到特殊的字符串:igq4;441R;1ikR51ibOOp,提交flag顯示不對

嘗試多種后情況后,該加密字符串為base64和異或的加密,通過以下腳本對其進行解密:
import string
from base64 import *


b=b64decode("aWdxNDs1NDFSOzFpa1I1MWliT08w")
data=list(b)
for k in range(0,200):
key=""
for i in range(len(data)):
key+=chr(ord(data[i])^k)
print (key)
得到的結果,發現唯一一個沒有特殊字符為:jdr78672Q82jhQ62jaLL3
最終flag為:
flag{jdr78672Q82jhQ62jaLL3}

題目名稱:picture3
       
       
       
               
題目描述:
flag提交形式為flag{XXXX}
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/7128eb78f49242d39b71e0496c3b52ab.jpg
題目writeup:
下載附件,得到一張圖片,通過binwalk對其進行解壓。得到149EC.zip  和stego.txt文件
binwalk -e  flag.jpg
查看壓縮包149EC. zip文件里面包含一個stego.txt文件且CRC32值為0CF2D018,同時對其解壓,提示需要輸入密碼,該文件名和圖片解壓出來的stego.txt是相同的。需要解壓該壓縮包文件,猜測是需要用到明文攻擊
、、
通過winrar對 stego.txt文件進行壓縮成stego.txt,查看CRC32值和149EC. zip壓縮包中值相同
這里通過ARCHPR對壓縮包 149EC. zip進行明文攻擊,但是明文攻擊並不能恢復

通過winrar的自帶修復功能對 149EC. zip進行修復
修復后的文件保存為rebuilt.149EC.zip,對其進行解壓,發現不需要輸入密碼,直接解壓得到一個stego.txt文件
打開文件發現是很多行base64加密字符串
b2Q5dU==
aDk5Ni==
ZG8wOW==
ZzYxYh==
ZjU4NT==
aXBjNF==
Q3dTM2==
d1Y5c1==
dFA3WV==
ZDNQUP==
ejhBMT==
dUowaW==
OVQ2ZD==
aUM5ZU==
NnFFek==
ZGc0T/==
NGpWNE==
NVZpUW==
ejZDTm==
a1VEN5==
azNMUX==
TXlhNW==
bjZwWm==
Q2Q0b1==
猜測可能是base64隱寫:
依次讀取每行,從中提取出隱寫位。
如果最后沒有‘=’,說明沒有隱寫位,跳過。
如果最后是一個‘=’,說明有兩位隱寫位,將倒數第二個字符轉化為對應的二進制索引,然后取后兩位。
如果最后是兩個‘=’,說明有四位隱寫位,將倒數第三個字符轉化為對應的二進制索引,然后取后四位。
將每行提取出的隱寫位依次連接起來,每8位為一組轉換為ASCII字符,最后不足8位的丟棄。
通過腳本跑出隱寫,獲得flag:
def get_base64_diff_value(s1, s2):
base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
res = 0
for i in xrange(len(s1)):
if s1[i] != s2[i]:
return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
return res


def solve_stego():
with open('stego.txt', 'rb') as f:
file_lines = f.readlines()

bin_str = ''
for line in file_lines:
steg_line = line.replace('\n', '')
norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
diff = get_base64_diff_value(steg_line, norm_line)

pads_num = steg_line.count('=')
if diff:
bin_str += bin(diff)[2:].zfill(pads_num * 2)

else:
bin_str += '0' * pads_num * 2

res_str = ''

for i in xrange(0, len(bin_str), 8):
res_str += chr(int(bin_str[i:i + 8], 2))
print res_str

solve_stego()
              
              
              
                      
根據falg提交格式,最終flag為:
flag{Ba5e_64OFive}

題目名稱:7-2
題目描述:
提交格式為wdflag{......}
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/118956c97c7c4a3e9b1508c1f5ea44be.zip
題目writeup:
下載附件,對其進行解壓,得到很多文件,文件的名稱都是base64加密字符串
同時,打開其中任意文件,發現都是一串十進制加密字符串
通過腳本對解壓的所有文件夾的文件名進行將base64解密
# coding=utf-8
import os
import base64

for name in os.listdir("C:\\Users\\backlion\\Desktop\\flag\\problem\\"):
print name
# 由於文件名不是4的倍數,需要在后面補‘=’
missing_padding = 4 - len(name) % 4
if missing_padding:
name += '=' * missing_padding
print str(base64.b64decode(name.encode()))
執行腳本得到只有文件名YWluaWRleGluZ3podWFuZw base64解密出來的字符串ainidexingzhuang是正常顯示無亂碼。

打開 YWluaWRleGluZ3podWFuZw文件,發現一串數字,其中包括了{和}中的數字。那么很有可能這些數字解碼后就是flag
得到{和}中的數字為:82 42 82 52 63 21 42 22 73 21
該數字使用的是手機9鍵加密,第一個數字代表9鍵鍵盤下的數字,第二個數字代表該數字下的第幾個字母。
得到9鍵盤加密的字符為: uhukoahbra
通過凱撒解密得到一個有意義的字符ylyoselfve就是ctf的內容。
根據flag提交格式,最終flag為:
wdflag{ylyoselfve}

題目名稱:4433
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/3f8b0f935fa74f3c9cea382bf3687569.rar
題目writeup:
下載附件,對其解壓得到一張圖片,通過stegsolve圖片隱寫工具打開,查看通道,在橙色通道中出現了一張二維碼圖片。
通過QR Reach二維碼圖片掃描工具識別出內容是一串摩爾斯字符。
得到內容:
...--.----...--..
想要解碼但是不知道怎么分割,於是想到題目名稱 4433,表示 4 個 4 個 3 個 3 個分隔開。
那么摩爾斯密碼加密密文為:
...-/-.--/--./..-/-..
通過在線工具工具對其解密得到:VYGUD
https://www.bejson.com/enc/morse/
將VYGUD進行flag提交,發現不對
由搜索引擎搜索摩斯密碼可知摩斯密碼常用的縮寫中:VY代表VERY,GUD代表GOOD,那么flag為內容為:VERYGOOD
可參考:https://zh.wikipedia.org/wiki/%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81#%E5%B8%B8%E7%94%A8%E7%BC%A9%E5%86%99
最終flag為:
flag{ VERYGOOD}

題目名稱:Run
題目描述:
Run away! nc **.**.**.** XXXX
題目場景:
111.200.241.244:64579
題目writeup:
nc連上發現是一個python沙盒逃逸,一些能引發命令執行的python庫全部被禁用了。
最后在網上發現這么一個文章  https://blog.csdn.net/qq_35078631/article/details/78504415

通過().class.bases[0].subclasses()獲取當前加載的類

發現func_globals被過濾了,我們使用__getattribute__繞過

最終payload:

w = ().__class__.__bases__[ 0].__subclasses__() o = w[ 59].__enter__.__func__.__getattribute__( '__global' + 's__')[ 's'+ 'ys'].modules[ 'o'+ 's'] s = o.__getattribute__( 'sy' + 'stem') s( '/bin/sh')
執行payload得到當前sh腳本運行權限
通過cat命令查看文件5c72a1d444cf3121a5d25f2db4147ebb,得到falg
最終flag:
flag{eee93c33d97aa55f785a7d10ba4ae3ce}

題目名稱:流量分析
題目描述:sql注入
題目附件:
https://adworld.xctf.org.cn/media/task/attachments/4d7c14206a5c4b74a0af595992bbf439.pcapng
題目writeup:
下載附件,得到一個 pcapng流量包文件,通過wrireshark打開該文件,根據題目描述SQL注入,那么過濾HTTP協議,對其進行分析

看到很多注入語句,sql注入語句都是字符32開始的,第一波語句結束字符是102,恰好對應的ascii為f

第二波語句結束字符是108,對應的ascii為l


第三波語句結束字符是97,對應的ascii為a

第四波語句結束字符是103,對應的ascii為g

第六波語句結束字符是123,對應的ascii為{

以此類推得到flag: flag{c2bbf9cecdaf656cf524d014c5bf046c}

也可以通過python腳本獲取

import re
import os

def getflag(contents):
req_reg = re.compile(r'0,1\),(\d+),1\)\)=(\d+)%23')
results = req_reg.findall(contents)
flag_map = {}
for result in results:
if result[0] in flag_map:
if int(result[1]) > flag_map[result[0]]:
flag_map[result[0]] = int(result[1])
else:
flag_map[result[0]] = int(result[1])
flag = ""
for i in range(1,39):
flag += chr(flag_map[str(i)])
print(flag)

if __name__ == "__main__":
basedir = os.path.dirname(__file__)
filename = "misc.pcapng"
file_path = os.path.join(basedir, filename)
print(filename)
with open(file_path, 'rb') as f:
getflag(f.read())

最終得到falg:
flag{c2bbf9cecdaf656cf524d014c5bf046c}



題目名稱:傳感器2
題目描述:
已知ID為0x8893CA58的溫度傳感器未解碼報文為:3EAAAAA56A69AA55A95995A569AA95565556 為偽造該類型傳感器的報文ID(其他報文內容不變),
請給出ID為0xDEADBEEF的傳感器1的報文校驗位(解碼后hex),以及ID為0xBAADA555的傳感器2的報文校驗位(解碼后hex),並組合作為flag提交。
例如,若傳感器1的校驗位為0x123456,傳感器2的校驗位為0xABCDEF,則flag為flag{123456ABCDEF}。
題目writeup:
方法一:

先把16進制3EAAAAA56A69AA55A95995A569AA95565556都轉成2進制,得到:
1111101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110

又得知曼切斯特是從低到高跳變表示“1”,從高到低跳變表示“0”,即01->1,10->0。可以看到二進制除了前4位,后面都是10,01,差分曼切斯特有跳變為"0",無跳變為"1

那么實際上轉換成的二進制為(去掉前面最前面1111):
101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110

因此將編碼進行曼切斯特解碼:

00000000001001001101100010001001001111001010010110000100000110000001

轉成16進制得到:
24d8893ca584181

又得知第一個ID為0x8893CA58的溫度傳感器就在第一個曼切斯特解碼24d8893ca584181中,是第4位到11位為:8893ca58,ID轉換成大寫為:8893CA58

根據上面原理,可將3EAAAAA56A69AA556A965A5999596AA95656,轉換成曼切斯特解碼為24d8845abf34119,取第4位到11位,ID轉換成大寫為:8845ABF3

或者

id1 = 0x8893CA58
msg1 = 0x3EAAAAA56A69AA55A95995A569AA95565556
msg2 = 0x3EAAAAA56A69AA556A965A5999596AA95656

def calc(msg):
id=''
s = bin(msg)[6:]
for i in range(2, len(s), 2):
if s[i-2:i] == s[i:i+2]:
id += '0'
else:
id += '1'
return hex(int(id, 2)).upper()

print(calc(msg1))
print(calc(msg2))

根據計算機網絡報文首部的一些學習,這里我進行了類比,可能校驗位應該是最后幾位,依次嘗試過都無果,但想到,除了最后2位不同,中間ID不同,其他均相同,可見校驗位就是最后2位,那么校驗位的計算應該是用CRC進行計算,而前面的位數是7位,嘗試計算,但是得出的值並不是預計的。
后來想到可能缺位了,故又往前算了一位:
得到:024D 8893CA58 41 81024D 8845ABF3 41 19
024D 8893CA58 41024D 8845ABF3 41進行CRC8運算


可以得到81和19,與猜想一致

下面就可以用這個方法解出flag
帶入ID:DEADBEEFBAADA555
得到:024D DEADBEEF 41

https://www.23bei.com/tool-233.html


024D BAADA555 41





計算CRC8,分別得到:B5和15

方法二:

也可以通過腳本獲取:

#!/usr/bin/python

def crc(x,y):
while(x>y):
l = len(bin(x)) - len(bin(y))
t = int(bin(y)[2:]+'0'*l,2)
x ^= t
return x
m = 0
for i in range(0x200):
if i < 100:
continue
if crc(0x24d8893ca584100,i) == 0x81 and crc(0x24d8845abf34100,i) == 0x19:
m = i
print i
break
print hex(crc(0x00024ddeadbeef4100,m))
print hex(crc(0x00024dbaada5554100,m))


最終得到flag:

flag{B515}





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM