SlideShare a Scribd company logo
1 of 28
第7回 定例会
CTF Write up⼤会
CpawCTF Level 2 Q13,Q20,Q21
[Sep. 12, 2020]
福田 政広 情報処理安全確保⽀援⼠(第005565号)
目次
1.自己紹介
2.Why? CTF
Write up担当項目
Q13 隠されたフラグ
Q20 Block Cipher
Q21 reversing easy!
1.自己紹介
・勤務 公務員
・略歴:半導体メーカのソフトウェア部門で開発
ツール系(アセンブラ、コンパイラ、RTOS、
デバッガ、In-Circuit Emulator、Instruction Set
Simulator、Hardware Software Co-Simulator等)
の仕事
現在:情報システム系PMO
・
2.Why?CTF
・出会い
・2020年梅雨RISSのもくもく会で
・対応方針
(1) なるべく専用ツールをつかわずにWindows標準ツールのみで
(2) しかし、それでも
・Linux環境(Redhat系、Debian系問わず)
・Wireshark
は手元に必要
(3) その他
インターネット検索、インターネット上の便利サイト(Cyberchef等)を
徹底活用
Capture The Flag
Write up
CpawCTF Level 2 Q13隠されたフラグ
以下の画像には、実はフラグが隠されています。
目を凝らして画像を見てみると、すみっこに何かが…!!!!
フラグの形式はcpaw{***}です。フラグは小文字にしてください。
[Sep.12, 2020]
目次
1.観察(MS Paint)
2.解法
3.結果
4.参考文献
1.観察(その1)
Windows10環境下での観察です。
Windows10標準のWindows Defender でスキャン後、Windows10標準のペイント
で開くと、左上と右下に点や横棒が見えます。
左上
右下
1.観察(その2)
モールス信号と仮定して、復号サイトにて入力してみます。
左上
https://morsecode.world/international/translator.htm このサイトでは”..--.-”が復号エラーとなりました。
1.観察(その3)
モールス信号と仮定して、復号サイトにて入力してみます。
左上
https://morse.ariafloat.com/en/ このサイトでは復号エラーとなりません。
1.観察(その4)
モールス信号と仮定して、復号サイトにて入力してみます。
右下
https://morse.ariafloat.com/en/ このサイトでは復号エラーとなりません。
2.解法
手順としては、復号エラーの出ないサイトを探して復号
または、対応表を検索し、地道に手動変換。
アンダースコア(_)"•• ― ― • ―” はサイトによって復号エラーになります。これは、
正式な規約には存在しないコードのようです。
また、以下も正式な規約には存在しないようです。
; ― • ― • ― •
! ― • ― • ― ―
$ ••• ― •• ―
3.結果
cpaw{hidden_message:)}
4.参考文献
(i) モールス符号(Wikipedia)
https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%BC%E3%83%AB%E3%82%
B9%E7%AC%A6%E5%8F%B7
※アンダースコアに対する符合が掲載されていなかったので、追加しました。
(ii) モールス符号(wdic)
https://www.wdic.org/w/WDIC/%E3%83%A2%E3%83%BC%E3%83%AB%E3%82
%B9%E7%AC%A6%E5%8F%B7
Capture The Flag
Write up
CpawCTF Level 2 Q20Block Cipher
与えられたC言語のソースコードを読み解いて復号してフラグを手にれましょう。
暗号文:cpaw{ruoYced_ehpigniriks_i_llrg_stae}
[Sep. 12, 2020]
目次
1.観察(cat,vi)
2.試行(cc,bash)
3.結果
1.観察(cat,vi)
Linux環境下での観察です。
$ cat crypt100.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]){
int i;
int j;
int key = atoi(argv[2]);
const char* flag = argv[1];
printf("cpaw{");
for(i = key - 1; i <= strlen(flag);i+=key) for(j = i; j>= i - key + 1; j--) printf("%c", flag[j]);
printf("}");
return 0;
}
第1引数で与えられた文字列に対して、
第2引数で与えらえた大きさのブロック毎に
逆順にしているようです。
2.試行(cc,bash)
Linux(fedora)環境下での試行です。
$ cc -o Q20 crypt100.c
$ for i in 1 2 3 4 5 6 7
> do
> echo -n $i” “
> ./Q20 ruoYced_ehpigniriks_i_llrg_stae $i
> echo
> done
1 cpaw{ruoYced_ehpigniriks_i_llrg_stae}
2 cpaw{urYoec_dheipngriki_s_illgrs_ate}
3 cpaw{ourecYe_diphingkiri_sll__grats}
4 cpaw{Your_deciphering_skill_is_great}
5 cpaw{cYourhe_deingip_skirrll_iats_g}
6 cpaw{ecYouriphe_dkiringll_i_sats_gr}
7 cpaw{decYourngiphe_i_skiris_grll_}
$
3.結果
cpaw{Your_deciphering_skill_is_great}
Capture The Flag
Write up
CpawCTF Level 2 Q21eversing easy!
フラグを出す実行ファイルがあるのだが、プログラム(elfファイル)作成者が出力
する関数を書き忘れてしまったらしい…
[Sep.12, 2020]
目次
1.観察(strings, gdb, cyberchef)
2.解法(gdb)
3.実行結果(gdb)
4.参考文献
1.観察(その1)
Linux環境下での観察です。
$ file rev100
rev100: ELF 32-bit LSB executable, Intel
80386, version 1 (SYSV), dynamically linked
(uses shared libs), for GNU/Linux 2.6.24,
not stripped
→ 実行できそうなので
$ rev100
cpaw{}
→肝心の文字がない。そこで
$ strings rev100
D$Fcpawf
D$J{
D$ y
D$$a
D$(k
D$,i
D$0n
D$4i
D$8k
D$<u
D$@!
→ 答えは cpaw{yakiniku!} っぽい
→念のため逆アセンブル...
1.観察(その2)
strings結果
D$Fcpawf
D$J{
D$ y
D$$a
D$(k
D$,i
D$0n
D$4i
D$8k
D$<u
D$@!
T$Le3
gdbでの逆アセンブル結果
0x80484b2 <main+21>: movl $0x77617063,0x46(%esp) # cpaw のはず
0x80484ba <main+29>: movw $0x7b,0x4a(%esp) # {
0x80484c1 <main+36>: movl $0x79,0x20(%esp) # y
0x80484c9 <main+44>: movl $0x61,0x24(%esp) # a
0x80484d1 <main+52>: movl $0x6b,0x28(%esp) # k
0x80484d9 <main+60>: movl $0x69,0x2c(%esp) # i
0x80484e1 <main+68>: movl $0x6e,0x30(%esp) # n
0x80484e9 <main+76>: movl $0x69,0x34(%esp) # i
0x80484f1 <main+84>: movl $0x6b,0x38(%esp) # k
0x80484f9 <main+92>: movl $0x75,0x3c(%esp) # u
0x8048501 <main+100>: movl $0x21,0x40(%esp) # !
0x8048509 <main+108>: movw $0xa7d,0x15(%esp) # }+LF
0x8048510 <main+115>: movb $0x0,0x17(%esp) # NULL terminate
→ 0x77617063 を Cyberchef にて変換
1.観察(その3)
1.観察(その4)
0x8048515 <main+120>: movl $0x5,0x1c(%esp) ********
0x804851d <main+128>: lea 0x46(%esp),%eax # print "cpaw{"
0x8048521 <main+132>: mov %eax,0x4(%esp) #
0x8048525 <main+136>: movl $0x8048620,(%esp) #
0x804852c <main+143>: call 0x8048350 <printf@plt> #
0x8048531 <main+148>: cmpl $0x5,0x1c(%esp)
0x8048536 <main+153>: je 0x804855e <main+193>
0x8048538 <main+155>: movl $0x0,0x18(%esp)
0x8048540 <main+163>: jmp 0x8048557 <main+186>
0x8048542 <main+165>: mov 0x18(%esp),%eax
0x8048546 <main+169>: mov 0x20(%esp,%eax,4),%eax
0x804854a <main+173>: mov %eax,(%esp)
0x804854d <main+176>: call 0x8048390 <putchar@plt>
0x8048552 <main+181>: addl $0x1,0x18(%esp)
0x8048557 <main+186>: cmpl $0x8,0x18(%esp)
0x804855c <main+191>: jle 0x8048542 <main+165>
0x804855e <main+193>: lea 0x15(%esp),%eax # print "}"
0x8048562 <main+197>: mov %eax,0x4(%esp) #
0x8048566 <main+201>: movl $0x8048620,(%esp) #
0x804856d <main+208>: call 0x8048350 <printf@plt> #
肝心の文字が print されずに抜かされ
ているのは、
0x8048515 <main+120>: movl $0x5,0x1c(%esp)
で0x1c(%esp)に設定された数5が
0x8048531 <main+148>: cmpl $0x5,0x1c(%esp)
にて5と比較され等しいからなので、
それを5以外の数にすれば良い。
2.解法
手順としては、gdb で rev100 の該当箇所にパッチを当てて実行。
$ gdb rev100(gdb で rev100 をロード)
…(初期メッセージ略)...
(gdb) b main (main にブレークポイント設定)
(gdb) run (実行開始)
main の先頭でブレークするので、
2.解法(続き)
0x8048515 <main+120>: movl $0x5,0x1c(%esp)
(gdb) x/8bx 0x8048515
0x8048515 <main+120>: 0xc7 0x44 0x24 0x1c 0x05 0x00 0x00 0x00
(gdb) set *(unsigned char*)0x8048519=0x0e
(gdb) x/8bx 0x8048515
0x8048515 <main+120>: 0xc7 0x44 0x24 0x1c 0x0e 0x00 0x00 0x00
0x8048515 <main+120>: movl $0xe,0x1c(%esp)
(gdb) c
3.実行結果
cpaw{yakiniku!}
4.参考文献
(i) Cyberchef
https://gchq.github.io/CyberChef/
(ii) gdb(もっと良いリンクを探しています)
https://sourceware.org/gdb/current/onlinedocs/gdb/

More Related Content

Similar to Capture the flag write up q13,q20,q21 for ss

自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみた自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみたJunichi Akita
 
サーバ異常検知入門
サーバ異常検知入門サーバ異常検知入門
サーバ異常検知入門mangantempy
 
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table についてHaruka Ozaki
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519Yasuhiro Ishii
 
[CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang
[CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang[CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang
[CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack TangCODE BLUE
 
Python Data-Visualization Package Status
Python Data-Visualization Package StatusPython Data-Visualization Package Status
Python Data-Visualization Package StatusYukio Okuda
 
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)ryos36
 
Hadoopカンファレンス20140707
Hadoopカンファレンス20140707Hadoopカンファレンス20140707
Hadoopカンファレンス20140707Recruit Technologies
 
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...Toru Tamaki
 
PBL1-v1-008j.pptx
PBL1-v1-008j.pptxPBL1-v1-008j.pptx
PBL1-v1-008j.pptxNAIST
 
Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能Ryosuke Okuta
 
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化についてマルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化についてFixstars Corporation
 
プロファイラGuiを用いたコード分析 20160610
プロファイラGuiを用いたコード分析 20160610プロファイラGuiを用いたコード分析 20160610
プロファイラGuiを用いたコード分析 20160610HIDEOMI SUZUKI
 
"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン
"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン
"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファンCODE BLUE
 
M5Stack互換機を作った話
M5Stack互換機を作った話M5Stack互換機を作った話
M5Stack互換機を作った話Masawo Yamazaki
 
LoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオンLoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオンTomokazu Kizawa
 
LoRaWAN 距離検出センサ LDDS75 日本語マニュアル
LoRaWAN 距離検出センサ LDDS75 日本語マニュアルLoRaWAN 距離検出センサ LDDS75 日本語マニュアル
LoRaWAN 距離検出センサ LDDS75 日本語マニュアルCRI Japan, Inc.
 

Similar to Capture the flag write up q13,q20,q21 for ss (20)

自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみた自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみた
 
サーバ異常検知入門
サーバ異常検知入門サーバ異常検知入門
サーバ異常検知入門
 
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
 
[CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang
[CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang[CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang
[CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
Python Data-Visualization Package Status
Python Data-Visualization Package StatusPython Data-Visualization Package Status
Python Data-Visualization Package Status
 
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
 
Hadoopカンファレンス20140707
Hadoopカンファレンス20140707Hadoopカンファレンス20140707
Hadoopカンファレンス20140707
 
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
 
PBL1-v1-008j.pptx
PBL1-v1-008j.pptxPBL1-v1-008j.pptx
PBL1-v1-008j.pptx
 
Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能
 
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化についてマルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
 
プロファイラGuiを用いたコード分析 20160610
プロファイラGuiを用いたコード分析 20160610プロファイラGuiを用いたコード分析 20160610
プロファイラGuiを用いたコード分析 20160610
 
Slide
SlideSlide
Slide
 
"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン
"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン
"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン
 
M5Stack互換機を作った話
M5Stack互換機を作った話M5Stack互換機を作った話
M5Stack互換機を作った話
 
LoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオンLoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオン
 
LoRaWAN 距離検出センサ LDDS75 日本語マニュアル
LoRaWAN 距離検出センサ LDDS75 日本語マニュアルLoRaWAN 距離検出センサ LDDS75 日本語マニュアル
LoRaWAN 距離検出センサ LDDS75 日本語マニュアル
 

Capture the flag write up q13,q20,q21 for ss