![見出し画像](https://assets.st-note.com/production/uploads/images/162854894/rectangle_large_type_2_32745f81c4afefcb56e09d0ca62e13bd.png?width=1200)
セキュリティ学習6日目
6日目となる。
webの最終日となるが、タイトル的にはやはりサービスでセキュリティを扱ってるだけあって、XSSやパストラバーサルなど、名前は聞いたことがあったが、深く理解したり、手を動かすことは少なかった。
簡単なものとはいえ、実際CTF形式で問題を解くと、タイトルのイメージがより濃く脳に残る感じがあって良かった。
これから復習はするが、ひとまず知識の蓄積だけ残しておく。
Obfuscated JavaScript
難読化されたJavaScriptのこと。
コードを読みにくくし、理解しにくくすることで、コードで何をしているかを理解できなくすることでセキュリティ強度を高めるもの。
evalというものがある。
文字列のJavaScriptを読み込んで実行する関数。
packed: 難読されたJavaScriptではよく出てくる。
一般的な難読化の手法。
以下のようなパッカーがある。
Dean Edwards' Packer
JSPacker
UglifyJS(圧縮機能付き)
現在は純粋なパッキングより、minifyなど複数の難読化を組み合わせたアプローチが大事。
SQLインジェクション
リレーショナルデータベースに対してインジェクションを行うような攻撃方法。
任意のSQLを実行できるような作りのwebサイトに対してSQLを埋め込んでデータを抜き出す手法。
検索結果と個人情報を合わせて取得するSQLをペイロードとして挿入する。
例えば以下のようなクエリを書く
SELECT * FROM users WHERE name = 'a' OR 'a' = 'a';
上記の
a' OR 'a' = 'a
この部分がインジェクションの部分。
インジェクションの対策
プレースホルダ一択。
すでに存在するSQL文に、値をバインドするような流れ。
これにより、適切なサニタイズができる。
ライブラリ側で値に対するサニタイズを行うことができる。
強力なキーワード
UNIONを利用する。
全く関係のないテーブルを結合して取得するような構文。
これにより、一つでもプレースホルダが漏れてるサイトであれば、データベースへの権限などが適切でないと、全てのデータへのアクセス権を持っていかれる可能性がある。
攻撃ペイロードが分からない時
SQLインジェクションがあったと分かっても、どんなペイロードを送ればいいか分からない。
そのため、データベースの情報を取得する方法を知る必要がある。
以下のようなことで取得する。
テーブルの一覧を取得する
特定のテーブルの中身を取得する
このようなチートシートを活用することができる。
SQLインジェクションの種類
ツール
sqlmapというのが、強力なツールとして存在する。
こちらからbrew経由で入れることができる。