LoginSignup
8
0

TsukuCTF23- Writeup

Last updated at Posted at 2023-12-10

Misc

build_error

以下のファイルが渡される。このファイルをうまいこと実行出来たらFlagゲットできるらしい。

  • main.o
  • one.o
  • Makefile

実行ファイル作るためにmakeした。
image.png
a, bないので無理いわれる。
Ghidraで見る。
main.o
スクリーンショット 2023-12-09 225709.png
one.o
スクリーンショット 2023-12-09 225720.png
image.png
Exportsできてませんね。

新たに定義して一緒にコンパイルする。

definitions.c
int a = 0xb;
int b = 0xc;

フラグ判定でabcの和を聞かれ正誤判定されるが、
別にaとbが合ってる必要ないので適当にやって動的解析する方向にします。
Makefileも適当に書き直します。

Makefile
CC=gcc  
OBJ=main.o one.o definitions.o  
TARGET=main

all:$(TARGET)

$(TARGET):$(OBJ)
	$(CC) -o $(TARGET) $(OBJ) -no-pie

definitions.o: definitions.c
	$(CC) -c definitions.c

後は出来たファイルを解析します。
flag判定のところにBreakPointつけて回します。

┌──(root㉿kali)-[/home/kali/Downloads]
└─# gdb main
Reading symbols from main...
(No debugging symbols found in main)
gdb-peda$ disass main
Dump of assembler code for function main:
   0x0000000000401136 <+0>:	push   rbp
   0x0000000000401137 <+1>:	mov    rbp,rsp
   0x000000000040113a <+4>:	sub    rsp,0x30
   0x000000000040113e <+8>:	mov    QWORD PTR [rbp-0x28],0xc
   0x0000000000401146 <+16>:	mov    QWORD PTR [rbp-0x20],0xb
   0x000000000040114e <+24>:	mov    QWORD PTR [rbp-0x18],0x4b
   0x0000000000401156 <+32>:	mov    QWORD PTR [rbp-0x10],0x0
   0x000000000040115e <+40>:	mov    QWORD PTR [rbp-0x8],0x0
   0x0000000000401166 <+48>:	call   0x40121a <one_init>
   0x000000000040116b <+53>:	mov    DWORD PTR [rbp-0x2c],0x0
   0x0000000000401172 <+60>:	jmp    0x40119d <main+103>
   0x0000000000401174 <+62>:	mov    eax,DWORD PTR [rbp-0x2c]
   0x0000000000401177 <+65>:	cdqe
   0x0000000000401179 <+67>:	cmp    QWORD PTR [rbp-0x28],rax
   0x000000000040117d <+71>:	jle    0x401184 <main+78>
   0x000000000040117f <+73>:	add    QWORD PTR [rbp-0x18],0x1
   0x0000000000401184 <+78>:	mov    eax,DWORD PTR [rbp-0x2c]
   0x0000000000401187 <+81>:	cdqe
   0x0000000000401189 <+83>:	cmp    QWORD PTR [rbp-0x18],rax
   0x000000000040118d <+87>:	jge    0x401194 <main+94>
   0x000000000040118f <+89>:	add    QWORD PTR [rbp-0x20],0x1
   0x0000000000401194 <+94>:	add    QWORD PTR [rbp-0x28],0x1
   0x0000000000401199 <+99>:	add    DWORD PTR [rbp-0x2c],0x1
   0x000000000040119d <+103>:	mov    eax,DWORD PTR [rbp-0x2c]
   0x00000000004011a0 <+106>:	cdqe
   0x00000000004011a2 <+108>:	cmp    QWORD PTR [rbp-0x20],rax
   0x00000000004011a6 <+112>:	jg     0x401174 <main+62>
   0x00000000004011a8 <+114>:	mov    rdx,QWORD PTR [rbp-0x28]
   0x00000000004011ac <+118>:	mov    rax,QWORD PTR [rbp-0x20]
   0x00000000004011b0 <+122>:	add    rdx,rax
   0x00000000004011b3 <+125>:	mov    rax,QWORD PTR [rbp-0x18]
   0x00000000004011b7 <+129>:	add    rax,rdx
   0x00000000004011ba <+132>:	mov    QWORD PTR [rbp-0x10],rax
   0x00000000004011be <+136>:	mov    rdx,QWORD PTR [rip+0x2e5b]        # 0x404020 <a>
   0x00000000004011c5 <+143>:	mov    rax,QWORD PTR [rip+0x2e58]        # 0x404024 <b>
   0x00000000004011cc <+150>:	add    rdx,rax
   0x00000000004011cf <+153>:	mov    rax,QWORD PTR [rip+0x2e5a]        # 0x404030 <c>
   0x00000000004011d6 <+160>:	add    rax,rdx
   0x00000000004011d9 <+163>:	mov    QWORD PTR [rbp-0x8],rax
   0x00000000004011dd <+167>:	mov    rax,QWORD PTR [rbp-0x8]
   0x00000000004011e1 <+171>:	cmp    QWORD PTR [rbp-0x10],rax
   0x00000000004011e5 <+175>:	jne    0x401204 <main+206>
   0x00000000004011e7 <+177>:	mov    rax,QWORD PTR [rbp-0x10]
   0x00000000004011eb <+181>:	mov    rsi,rax
   0x00000000004011ee <+184>:	lea    rax,[rip+0xe0f]        # 0x402004
   0x00000000004011f5 <+191>:	mov    rdi,rax
   0x00000000004011f8 <+194>:	mov    eax,0x0
   0x00000000004011fd <+199>:	call   0x401040 <printf@plt>
   0x0000000000401202 <+204>:	jmp    0x401213 <main+221>
   0x0000000000401204 <+206>:	lea    rax,[rip+0xe06]        # 0x402011
   0x000000000040120b <+213>:	mov    rdi,rax
   0x000000000040120e <+216>:	call   0x401030 <puts@plt>
   0x0000000000401213 <+221>:	mov    eax,0x0
   0x0000000000401218 <+226>:	leave
   0x0000000000401219 <+227>:	ret
End of assembler dump.
gdb-peda$ b *0x00000000004011e1
Breakpoint 1 at 0x4011e1
gdb-peda$ 

スクリーンショット 2023-12-09 225844.png
rbp-0x10のとこ0x7fffffffe180のアドレスに答えが入ってます。
120です。

TsukuCTF23{120}

content_sign

以下のファイルが渡されます。Autherと編集日時を答えるみたいデス。

  • signed_flag.png

とりあえずstrings見ます。
スクリーンショット 2023-12-10 203656.png
C2PAの文字があるので以下入れます。

回します。

┌──(root㉿kali)-[/home/kali/Downloads]
└─# c2patool signed_flag.png         
{
  "active_manifest": "urn:uuid:632a603d-06bf-4660-ac5a-e94f41f61040",
  "manifests": {
    "urn:uuid:d67f9244-8583-43d2-bdb6-12082bbb76e7": {
      "claim_generator": "CanUseeMe c2patool/0.7.0 c2pa-rs/0.28.3",
      "title": "Tsukuctf_20XX",
      "format": "image/png",
      "instance_id": "xmp:iid:e18e08ca-8259-4226-988e-7ed2f58e1010",
      "thumbnail": {
        "format": "image/png",
        "identifier": "self#jumbf=c2pa.assertions/c2pa.thumbnail.claim.png"
      },
      "ingredients": [],
      "assertions": [
        {
          "label": "stds.schema-org.CreativeWork",
          "data": {
            "@context": "https://schema.org",
            "@type": "CreativeWork",
            "author": [
              {
                "@type": "Person",
                "name": "TSUKU4_IS_H@CKER"
              }
            ]
          },
          "kind": "Json"

...省略

答えのフラグ形式を組み合わせるだけ。

TsukuCTF23{TSUKU4_IS_H@CKER&2023-12-08T13:00:26+00:00}

idiot

見つけたので残しておきます(ニッコリ
image.png

スクリーンショット 2023-12-10 182908.png

ここから解けなかったやつ

Rev - title_screen

NESのファミコンのアセンブリっぽい。初めて見た。
とりあえずエミュレートする。
スクリーンショット 2023-12-09 202216.png
chr作成。
nesファイル作る。

┌──(root㉿kali)-[/home/kali/Downloads/source_code]
└─# ca65 main.asm -o main.o

┌──(root㉿kali)-[/home/kali/Downloads/source_code]
└─# ld65 main.o -C main.cfg -o main.nes
ld65: Warning: main.cfg(5): Segment 'CHARS' overflows memory area 'ROMCHR' by 8192 bytes
ld65: Error: Cannot generate most of the files due to memory area overflow 

メモリ足りないって言われるのでcfgを編集する。

main.cfg
MEMORY {
    HEADER:       start = $0000, size = $0010, file = %O, fill = yes;
    ROMST:        start = $8000, size = $7ffa, type = ro, file = %O, fill = yes, define = yes;
    ROMINFO:      start = $fffa, size = $0006, type = ro, file = %O, fill = yes, define = yes;
    ROMCHR:       start = $0000, size = $4000, type = rw, define = yes; //ここ編集

}

SEGMENTS {
    HEADER:       load = HEADER,       type = ro;
    STARTUP:      load = ROMST,        type = ro,    define = yes;
    VECINFO:      load = ROMINFO,      type = ro,    define = yes;
    CHARS:        load = ROMCHR,       type = rw;
}

FEATURES {
    CONDES: segment = RODATA,
        type = constructor,
        label = __CONSTRUCTOR_TABLE__,
        count = __CONSTRUCTOR_COUNT__;
    CONDES: segment = RODATA,
        type = destructor,
        label = __DESTRUCTOR_TABLE__,
        count = __DESTRUCTOR_COUNT__;
}

これでnesファイルが出来るので回してみる。
エミュレータは以下を利用した。

スクリーンショット 2023-12-10 163146.png

はい????
ここからchrファイル作成地獄に突入する。
こんな感じで読めそうにないピクセルを削除していく。
スクリーンショット 2023-12-10 131511.png

以下は私が作成した芸術作品たちである。
是非ともここで供養させてほしい。

エントリーナンバー1 - いそいそ

スクリーンショット 2023-12-10 132924.png

エントリーナンバー2 - よしよさ

スクリーンショット 2023-12-10 135752.png

エントリーナンバー3 - 8888

スクリーンショット 2023-12-10 140302.png

エントリーナンバー4 - よしよ

スクリーンショット 2023-12-10 141048.png

エントリーナンバー5 - Lv1

スクリーンショット 2023-12-10 152924.png

エントリーナンバー6 - X

スクリーンショット 2023-12-10 162102.png

エントリーナンバー7 - ここここここここここここここここここここここここ

スクリーンショット 2023-12-10 163146.png

NES難しい。
なんもわからん。
正解はasmに書いてあるこのdataのマッピングとbmpを比べるだけらしい。
なんもわからん。
スクリーンショット 2023-12-10 195802.png
スクリーンショット 2023-12-10 195649.png
おそらく問題設定として「bmpからchr作る」のではなく、「昔作ったchrの名残で出てきたbmp」が問題のbmpファイルだからこの方法でのエミュレートではそもそも問題の趣旨と違うので間違った答えが出るのだと思う。
その発想はなかった。頭カチコチ。

まとめ

スクリーンショット 2023-12-10 205709.png

チームのPro OSINTerたちのお陰で初めて一桁台の順位にいきました!!!
とても楽しかった!!!
(次回からは自分も貢献できるように頑張ります。)

8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0