Calendarの15日目です。qiita.comOpenSSLに依存しているモジュールをインストールしようと思ったときにライブラリが見つからなくて困ることがあります。/usr/local/opt/openssl以下に配置されるため、モジュールのインストール時にインクルードパスとライブラリパスを指定しないといけません。cpanmであれば--configure-args経由でビルドする際の引数を渡すことができますが、コンパイラにどのように渡されるかはMakefile.PLを読む必要があります。そこで作ったのが、いいかんじにOpenSSLのパスを取ってきてくれるモジュールCrypt::OpenSSL::Guessです。metacpan.orgこれはNet::SSLeayで使われているOpenSSLのパス解決部分をモジュール化したものです。このモジュールは現在Crypt::OpenSSL::RSAとCrypt::OpenSSL::Randomで使われています。使い方はMakefile.PL内に以下のように書くだけです。openssl_inc_paths(),);実装は素直で、パスを順番に探して見つかったものを返すというものです。この中に含まれていない場合でも簡単にパスを指定できるように、環境変数OPENSSL_PREFIXに設定できるようにしています。either(ときには共通のやり方があっても悪くはない)という言葉があるように、各モジュールが行っていたOpenSSLのパスの解決の仕組みを共通のやり方で出来るようにモジュール化したという話でした。deference形式のCTFにオンラインで参加した。dodododoは19位。sshできるサーバが1台与えられて、そこで8つのサービスを正しく動かしつつ、攻撃と防御を行う。flagは運営からサービスが正しく動いているかどうかの確認と一緒に送られてくる。秘密のメモアプリみたいなのがあったとして、正規の方法だとメモの閲覧にはパスワードが必要だけど、サービスに残された脆弱性を使うと任意のメモを見られるになればflagを入手して提出することで攻撃できる。サービスはxinetd経由で起動するようになっていて、サービスの脆弱性を潰すためバイナリを書き換えたり、途中にバリデーション用のスクリプトを挟んだりしてflagを持ち出されないように防御できる。このCTF専用のサービス一覧/参加チーム取得やフラグ提出用のクライアントがあって、それを使うと手軽に攻撃の自動化ができる。渡されたのだけど、結構ミスっていて困っていた。stripped冷蔵庫サービス。linkされていて一瞬ぎょっとするけど、中身は単純にJSON経由で冷蔵庫に入れたりすることができるサービス。flagはsetflagで保存されたflag。することでディレクトリを変更できるこういう雑なバリデータを挟むことで回避できる。linkされているのはこういうことだったのか!上位チームでも意外と気づかなかったチームが結構いた。指定すればtokenチェックが問答無用に突破可能。7906397325484763355アドベンチャーゲーム。戦ったり、武器を買ったり、データをロード/セーブできる。flagはセーブされているデータのname部分。nameのときのreadlineが36バイト読み込むのを32バイトだけ読み込むようにバイナリを変更した。自分の現在の順位よりも上のチームにしか攻撃できない(flagの提出もできず、サーバへのアクセスも遮断されている)ようになっていて珍しいルールだった。あるA&D形式のCTFだと防御がボロボロだと上位チームに攻撃されて、点数が減る一方で最後までやる気がなくなってしまうのだけど、これならまだ最後までできる。よいルールに見えるのだけど、順位をわざと下げて攻撃対象を増やして、一度に大量の得点を取得することが可能で(もちろん攻撃が塞がれてなければだけど)割と入れ替わりが激しく、崩壊していた気がする。今回はRuCTFEのようにVPNの提供はなく、サーバが与えられて手元から他チームに攻撃するときはsocks経由でやってくれ、というかんじだったので運営のことを考えると準備の手間をあまり考える必要なく、これなら手軽にA&D形式のCTFを開催できるのではという気がした。チェックシステムを準備するのが大変という話はありそうだけど、ちょっと調べたらRuCTFEで使われているコードが公開されていた。A&D形式のCTF増えて欲しい。hero_text_adventureTweetもっと読むコメントを書く2018-03-03YAPC::Okinawaで「Perlコーディングテクニック2018」という話をしましたspeakerdeck.com最近の便利Perl情報や好きなモジュールの話をしました。トーク応募したときには話したかった細かい話題がいくつかあったのですが、20分では収まらなかったのもありクラスビルダやクラスローダ、バリデータ、Type::Tinyの話になりました。トークの中で紹介した、拙作のSmart::Args::TypeTinyが結構好きで最近よく使っています。さんが紹介している記事があります。さんのトークの冒頭では、手元環境ではstricturesのPERL_STRICTURES_EXTRAを設定しているという話がありました。metacpan.org参加者の皆様並び運営スタッフの皆様お疲れ様でした。次回も楽しみにしています。18:28YAPC::Okinawaで「Perlコーディングテクニック2018」という話をしましたTweetもっと読むコメントを書く2017-07-09YAPC::Fukuokaで「新時代のテストフレームワークTest2」という話をしましたspeakerdeck.comトークの内容はTest2の導入から便利情報を紹介したりしました。Test2使う人が増えるといいですね。スライド中にも触れていますが、基本的にはTest2に移行するにあたってはTest2::Plugin::UTF8を使うようにすれば大丈夫かなと思います。一部Test::ClassのハックをTest2に対応するといった特殊な例も紹介しました。スライドでは時間の都合上省いたのですが、Test::Classは意外と扱いが難しく、テストファイルから読み込まれるモジュールでTest::Moreを直接使っていると$TODOが動かなくなるというケースもありました。Test::Moreのokを直接呼んでいる場合はTest2::APIのcontextで書き換える必要があります。metacpan.org)が動かなくなっていることに関してはTest2::Plugin::NoWarningsを使うことにより代用することができます。metacpan.org参加者の皆様並び運営スタッフの皆様お疲れ様でした。次のYAPCは沖縄で開催するとのことで楽しみにしています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。