sedのデリミタは/でなくてもよかった
あるシェルスクリプト hage.sh
に含まれるテンプレート文字列 {#TEMPLATE#}
を、環境変数で注入するファイルパスに置換したい事例があって、sedで置換しようとしたけどうまくいかなかった。パスの /
とsedのデリミタの /
が競合してしまってたのが原因。
env PATH_FOO=/foo/bar/baz cat hage.sh | sed -e s/{#TEMPLATE#}/${PATH_FOO}/g
リファレンス読んだらデリミタは /
でなくともよかった。(リファレンスはちゃんと読もうな!!!)
This also matches the regular expression regexp, but allows one to use a different delimiter than /. This is particularly useful if the regexp itself contains a lot of slashes, since it avoids the tedious escaping of every /. If regexp itself includes any delimiter characters, each must be escaped by a backslash (\).
シェルりょく が 1 あがった!
Golang で S3 からダウンロードしたファイルをオンメモリで扱う
S3 からダウンロードしたものをファイルに保存する記事はよく見かけるけど、オンメモリで扱う方法はあまり見かけなかったので備忘録代わりに書き残しておく。
var file *os.File
でファイルのポインタを宣言しても上手くいかなかったので、 aws.WriteAtBuffer{}
を使って解決したという話。
// s3managerを作る sess := session.Must(session.NewSession()) downloader := s3manager.NewDownloader(sess) file := &aws.WriteAtBuffer{} // ここでダウンロードが実行される n, err := downloader.Download(file, &s3.GetObjectInput{ Bucket: aws.String(myBucket), Key: aws.String(filename), }) if err != nil { return fmt.Errorf("failed to download file, %v", err) } fmt.Printf("file downloaded, %d bytes\n", n) // 任意の処理 // ここではbase64エンコーディングしてみる base64Data := base64.StdEncoding.EncodeToString(file.Bytes())
バイト列は、 file.Bytes()
で取り出せる。
参考
s3 - Amazon Web Services - Go SDK
go - golang s3 download to buffer using s3manager.downloader - Stack Overflow
SECCON 2017 Writeup
SECCON2017の予選、RiST(@realRiST)というチームで参加しました。 結果は1200点で177位でした。チームを結成して初めて出場したSECCON2016では200点だったので、成長率は500%です。 圧倒的成長卍
チームで解いた問題は
- Vigenere3d
- Run me!
- putchar music
- Qubic Rube
- SHA-1 is dead
- Powerful Shell
- Log search
- Thank you for playing!(解いたと言ってもいいのだろうか)
です。自分はPowerful Shellを解きました。ではWriteup書きます。
Powerful_Shell
ファイルの中身を見ると、
$ECCON=""; $ECCON+=[char](3783/291); $ECCON+=[char](6690/669); $ECCON+=[char](776-740); $ECCON+=[char](381-312); $ECCON+=[char](403-289); $ECCON+=[char](-301+415); : : If(Test-Path variable:global:psISE){"D`eb`u`g`g`in`g is `pr`o`h`ib`it`e`d";Exit} : : If($host."na`m`e" -ne "C`on`s`o`l`e`H`o`st"){"D`eb`u`g`g`in`g is `pr`o`h`ib`it`e`d";Exit} : :
とあったので、デバッグを阻止している部分をコメントアウト。次いでファイルの末尾に
"$ECCON" > file.ps1
を追記してファイルに落とし込む。
実行してもThis host is too flesh!
と出てプログラムが落ちる。「SECCON」の文字を出力しているであろう箇所の下の Checking Host
を削除。
次いでピアノ。
$secret=@(440,440,493,440,440,493,440,493,523,493,440,493,440,349)
とあるので、これに一致するように奏でれば次に進めるっぽい。
"$k " + [math]::floor($keytone[$k])
を挿入してキーと数値の対応を調べて、 $secret
の値に合う楽譜()を作ると
hhjhhjhjkjhjhf
となった。次のステージへ。
ここでも難読化されてるので、
[System.Text.Encoding]::ASCII.GetString($plain) > ans.ps1
としてファイルに書き出す。「また」難読化されたファイルが出て来るので、PowerShell ISEに食わせてステップイン実行する。
flag: SECCON{P0wEr$H311}