Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SECCON2019予選 問題解説(Beeeeeeeeeer)

648 views

Published on

SECCON2019オンライン予選で出題した「Beeeeeeeeeer」という問題の解説になります

Published in: Technology
  • Be the first to comment

SECCON2019予選 問題解説(Beeeeeeeeeer)

  1. 1. SECCON2019予選 問題解説 Beeeeeeeeeer         raintrees.net 1
  2. 2. ⾃⼰紹介 HN : kanata Twitter : @kanata201612 Web : https://raintrees.net Notes CTFとシェル芸と温泉好きなおっさん 難読化シェル芸 本書いた https://amzn.to/2UKNQfIraintrees.net 2
  3. 3. 趣味でセキュリティをやっているもの です SECCONオンライン予選3問を作問しました Beeeeeeeeeer 7w1n5 SECCON_multiplicater AVTOKYO2019に登壇しました 異体字セレクタ難読化シェル芸 https://bit.ly/354zZoI raintrees.net 3
  4. 4. 今⽇お話する内容の調査 アンケートを取りました(圧倒的焼き⾁ ) raintrees.net 4
  5. 5. みんな圧倒的⾁⼤好き わかる raintrees.net 5
  6. 6. 作問したやつ振り返り Beeeeeeeeeerめっちゃ解かれた 早いチームは開始40分 2時間52分かかった⼈もおる 7w1n5は出題タイミングが影響してそう 今回は Beeeeeeeeeer を解説します 問題名 解かれた数 ジャンル 難易度 Beeeeeeeeeer 200以上 Misc 弱 7w1n5 24くらい Rev 弱 SECCON_multiplicater 10 Web 強 raintrees.net 6
  7. 7. Beeeeeeeeeer bashのシェルスクリプト︓難読化シェル芸(⾃⼰最⻑記録) ... : $($'u0065u0063u0068u006f' c2h1dGRvd24K | $'u00 62u0061u0073u0065u0036u0034' $'u002du0064' );$(: pkill sh);$'u003A' $(ls --help|grep ^G|cut -c13)$(ls -- help|grep ^G|cut -c22)$(ls --help|grep ^G|cut -c9) ... 33341⽂字 難読化された内容を読み解ければ勝ち                                   raintrees.net 7
  8. 8. 難読化シェル芸の例 普通のdateコマンド date 2016年 12月 16日 金曜日 21:19:58 JST 難読化dateコマンド $(ls --help|grep ^M|cut -c4,5,6,16) 2017年 9月 11日 月曜日 18:38:58 JST やべーやつ : /*/$$/../?????-*;: ${_##*-}; $(${_%?????} '!-:' ^-~<<<"'$${#_}(") 2019年 2月 28日 木曜日 12:37:56 JST raintrees.net 8
  9. 9. 難読化問題の解き⽅は気合と根気 はせがわようすけさん︓難読化JavaScriptの本 効率的に読む⽅法がほとんど無いというのが実情 読みやすい形に整形しながら意味を把握していく 気合と根気で読む以外にない PowerShellの難読化も同じ(気合と根気) bashの難読化も同じ(気合と根気) 気合で200名以上に解かれた raintrees.net 9
  10. 10. 難読化⼿法(⼀部) ASCIIコードで表現 $ $'x64x61x74x65' # date 16進数表記 2017年 3月 4日 土曜日 13:36:21 JST $ $'144141164145' # date 8進数 2017年 3月 4日 土曜日 13:47:22 JST $ $'u0064u0061u0074u0065' # date Unicodeの表記 2017年 3月 4日 土曜日 13:40:16 JST フェイク(無駄な命令) $ $(:;:;:;:;:;:;);$(: poweroff :;);$(: rm -rf /* ;) base64でエンコード $ $(echo ZGF0ZQ==|base64 -d) Sat Nov 30 14:32:28 JST 2019 raintrees.net 10
  11. 11. 難読化問題の解き⽅(その1) ファイルに出⼒ $ echo ZGF0ZQ==|base64 -d|bash # dateの難読化 Sat Nov 30 14:34:00 JST 2019 $ echo ZGF0ZQ==|base64 -d > unko # 実行前にファイル出力 $ cat unko date                       raintrees.net 11
  12. 12. 難読化問題の解き⽅(その2) bash -x で実⾏する $ cat hoge $(echo ZGF0ZQ==|base64 -d) $ bash -x hoge ++ echo ZGF0ZQ== ++ base64 -d + date Sat Nov 30 14:42:11 JST 2019 echo を頭につける $ $(echo ZGF0ZQ==|base64 -d) # dataの難読化 Sat Nov 30 14:35:44 JST 2019 $ echo $(echo ZGF0ZQ==|base64 -d) # 頭にechoをつける date raintrees.net 12
  13. 13. 解析を妨害する処理 これらは意味を把握して取り除かないといけない bash -x を検出 echo $-|grep x && exit echo を検出 : | grep -q : && exit                                     raintrees.net 13
  14. 14. 難読化シェル芸はいいぞ(おわり) 解いたみなさんお疲れさまでした 焼き⾁っていいよね              raintrees.net 14

×