1. 程式人生 > >實驗吧-ctf-misc

實驗吧-ctf-misc

1.歡迎來到地獄

用winhex對第一個jpg檔案補頭,獲取網址https://pan.baidu.com/s/1i49Jhlj,開啟得到音樂檔案,用Audacity開啟獲取摩斯電碼,破解,獲得密碼KEYLETUSGO,開啟word文件,檢視隱藏字元獲得image steganography提示,用網頁版image steganography解密文件中的哈士奇圖片,獲得key{you are in finally hell now},解密zip檔案,獲得txt與jpg檔案,開啟txt獲得二進位制數字,轉為字元是“弱口令”,用binwalk檢查jpg檔案發現zip部分,取出,根據弱口令爆破,得到txt,根據提示對“VTJGc2RHVmtYMTlwRG9yWjJoVFArNXcwelNBOWJYaFZlekp5MnVtRlRTcDZQZE42elBLQ01BPT0=“依次做base64,rabbit,凱撒解密獲得唯一一個正常的句子為flag

2.stegas 300

用Audacity開啟觀察波形發現是(在提示下)曼徹斯特編碼(由低到高為0)獲得二進位制,轉為字元是bakdor,然後將其md5加密後的結果輸入(題目略有問題)

3.Chromatophoria

根據圖片名稱使用stegsolve,使用Data Extract,同時選擇r,g,b的0獲得答案

4.Black Hole

下載獲得img,我的Ubuntu無法正常載入,實驗吧的writeup也無法使用,使用DiskGenius開啟映象,發現DiskGenius最新版可以找到png檔案,但需要專業版才能修復出來。於是就將整個映象檔案開啟後去除二進位制放入winhex開啟,對照DiskGenius將檔案取出(先按圖片儲存位置將圖片所在的二進位制拿出,在根據檔案資料所在簇檔案將其中的無用二進位制刪去,無用二進位制大部分是一些\x00組成的位元組塊),該方法比較麻煩,但最後獲得圖片可以看到key:

5.心中無碼:

使用stegsolve發現b0不太對(在提示下),根據題意去掉圖片上的碼(即黃色部分)

from PIL import Image
lena = Image.open('Lena.png')
pixsels = lena.load()
width=lena.size[0]
height=lena.size[1]
list1=[]
for x in range(0,width):
  for y in range(0,height):
    r,g,b=pixsels[x,y]
    if r==255 and g==255:
      pass
    else:
      if int(bin(b)[-1])==1:
        list1.append(0)
      else:
        list1.append(1)
print len(list1)
im=Image.new("1",(300,300))
i=0
while i<len(list1):
   im.putpixel((i%300,i/300),list1[i])
   i=i+1

im.save("2.png")

獲得二維碼,二維碼有些模糊掃描不太成功,對其腐蝕

from PIL import Image
lena = Image.open('2.png')
im=Image.new('1',(300,300))
pixsels = lena.load()

for x in range(0,lena.width):
    im.putpixel((x,0),255)
    im.putpixel((x,lena.height-1),255)
for x in range(0,lena.height):
    im.putpixel((lena.width-1,x),255)
    im.putpixel((0,x),255)
for x in range(1,lena.width-1):
  for y in range(1,lena.height-1):
    if (pixsels[x-1, y] == 255) or (pixsels[x, y-1] == 255) or (pixsels[x, y] == 255) or (pixsels[x+1, y] == 255) or (pixsels[x, y+1] == 255):
        im.putpixel((x,y),255)


im.save("2.bmp")

再次掃描獲得Brainfuck,線上解碼即可

6.黑與白

開啟圖片獲得二維碼,下方有一網址,開啟網址,沒資訊,但網址是用大小寫字母混合寫的,想到培根加密,獲得字元“TACP”

將圖片放入stegdetect中檢測,發現圖片可能由jphide加密,使用jphide解密,將剛剛得到的字串作為密碼放入,不行改為小寫放入,成功獲得結果

7.最低位的親吻

使用諸多影象無果,想到題目是最低位,從LSB中尋找答案,在看stegsolve中低位中有二維碼跡象,決定將影象低位提出組成圖片,獲得二維碼,掃描獲得結果(附python程式碼):

from PIL import Image
lena = Image.open('01.bmp')
im=Image.new('1',lena.size)
pixsels = lena.load()
width=lena.size[0]
height=lena.size[1]

for x in range(0,width):
  for y in range(0,height):
      g=pixsels[x,y]
      im.putpixel((x,y),int(bin(g)[-1]))


im.save("2.bmp")

 8.無處不在的廣告

將圖片放在stegsolve中,在通道red plane0中可獲得二維碼,反色掃描即可

9.想看正面?那就要看仔細了!

根據提示仔細看圖片資訊,在檔案詳細資訊備註中發現字串,填入不太對,發現字串長度為8,然後用base64解碼可得

10.打不開的檔案

檔案無法顯示,猜測缺少頭部,用winhex補入gif頭部“47494638“,發現動態圖,放入ps中逐幀檢視獲得key

11.py的交易

用ps開啟圖片會提示有adobe fireworks的資料,用adobe fireworks開啟圖片,發現還有一層是二維碼,取出掃描獲得16進位制字元,看數字頭“03f30d0a”可知是pyc檔案,進行反編譯(可以下工具,也可以線上找python反編譯https://tool.lu/pyc/)即可

12.IHDR

首先發現題目中的圖片無法開啟,但又好像能看到,而題目中IHDR是png頭部一個數據段,由width,height,Bit depth,ColorType,Compression method,Filter method,Interlace method構成(具體請百度),猜測IHDR有問題,用TweakPNG開啟提示crc錯誤,糾正後開啟圖片依舊看不到key,更改IHDR中其他資料,更改height發現可以看到key(可以用斌walk的結尾和winhex開啟檔案實際結尾差好多看出)

13.beygond

用binwalk發現這是一個zip檔案,改字尾解壓獲得wav檔案,用Adobe Audition CS6打開發現有一個通道頻率比較奇怪,點選檔案右鍵提取通道獲得該通道獲得取出後檢視頻率(可以改變下方有個有關頻率的地方能看的清楚一些),與DTMF編碼對照翻譯獲得“13300133000”即為flag

14.LSB

使用binwalk檢測圖片發現是bmp,改字尾,題目提示LSB,而查詢stegsolve data extract無果(此時直接使用wbStego執行即可得到答案),即可決定將圖片最後一位提取出來觀察,由於圖片是bmp型別,畫素在圖片中是倒敘儲存,即以b,g,r的方式儲存,而且當高度為正時圖片中最後一行畫素是儲存在第一行的位置(對於正常二位座標系,當以左下角為原點高度才會為正),用PIL的getdata讀出的畫素只是畫素點在圖片的相對位置,並非在文字檔案的相對位置(試一下就明白了),所以我們以文字檔案的方式讀取圖片

bmpfi=open("nvshen.bmp","rb")
bmpstr=bmpfi.read()
bmpfi.close()
bfOffBits=int(bmpstr[13:9:-1].encode("hex"),16)
str1=""
for j in xrange(bfOffBits,len(bmpstr)):
  str1+=bin(ord(bmpstr[j]))[-1]
i=0
lst=""
while i<len(str1):
  str2=str1[i:i+8]
  lst+=chr(int(str2,2))
  i=i+8

fi=open("1",'wb')
fi.write(lst)
fi.close()

將最後得到的檔案放入winhex也可得到結果

15.SB!SB!SB!

直接使用stegsolve,在Red plane 0可獲得二維碼,掃描即可

16.當眼花的時候,會顯示兩張圖

使用binwalk發現檔案是由兩張png組合而成的,分開,放在winhex中觀察發現兩個檔案中位元組數不同,分別是1d55db和1d5648於是將使用stegsolve對圖片做減法,發現得到的圖片最下角有一條紅色的線,猜想相對大一些的圖片可能是在結尾加入了密碼字元而導致兩個檔案位元組數不相同,將做完減法的圖片放入stegsolve觀察發現在Red plane 0處線短的很厲害,基本可以確定在影象結尾處添加了對r使用了低位加密的畫素點,將大一點(1d5648)的影象放入stegsolve,用stegsolve的data extract選擇red0得到結果觀察字串尾部,即可發現key

17.聽會歌吧

這個題和隱寫關係不大,開啟連線是一個網頁和兩首歌,對兩首歌進行檢查沒有發現問題,開啟網頁原始碼,發現兩首歌的連線url都是base64,解密後與檔名相同。同時在原始碼我們只發現了download.php,我們可以嘗試開啟該檔案,於是將url改為download.php的base64,即download.php?url=ZG93bmxvYWQucGhw,獲得程式碼

<?php
error_reporting(0);
include("hereiskey.php");
$url=base64_decode($_GET[url]);
if( $url=="hereiskey.php" || $url=="buxiangzhangda.mp3" || $url=="xingxingdiandeng.mp3" || $url=="download.php"){
	$file_size = filesize($url);
	header ( "Pragma: public" );
	header ( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
	header ( "Cache-Control: private", false );
	header ( "Content-Transfer-Encoding: binary" );
	header ( "Content-Type:audio/mpeg MP3");
	header ( "Content-Length: " . $file_size);
	header ( "Content-Disposition: attachment; filename=".$url);
	echo(file_get_contents($url));
	exit;
}
else {
	echo "Access Forbidden!";
}
?>

看到可以其中有hereiskey.php檔案,用相同方式對該檔案訪問,得到結果