Paros使ってみた
プロキシ型脆弱性スキャナの1つであるParosを使ってみました。
Parosがチェックする内容は、ユーザーガイドによると以下の通りです。
We wrote a program called "Paros" for people who need to evaluate the security of their web applications. It is free of charge and completely written in Java. Through Paros's proxy nature, all HTTP and HTTPS data between server and client, including cookies and form fields, can be intercepted and modified.
- HTTP PUT allowed - check if the PUT option is enabled at server directories
- Directory indexable - check if the server directories can be browsable.
- Obsolete files existed - check if there exists obsolete files at
- Cross-site scripting - check if cross?site scripting (XSS) is allowed on the query parameters
- Default files on websphere server - check if default files existed on websphere server
使い方としては、ブラウザからプロキシ(Paros)経由で目的のサイトにアクセスしてチェック対象のURLパターンを覚えさせ、そのURLに対していろいろなパラメータを付けて脆弱性のチェックを行います。
たとえば、以下のようなダメなスクリプト(真似しないでね)
<?php error_reporting(E_ALL|E_STRICT); $id = ''; if (isset($_POST['empno']) ) { $id = $_POST['empno']; $dsn = 'sqlite:emp'; try { $db = new PDO($dsn); $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = 'SELECT * FROM emp '; if ($id !== '') { $sql .= 'WHERE empno = \'' . $id . '\' '; } $sql .= 'ORDER BY empno '; $stmt = $db->query($sql); $cnt = 1; $row = array(); echo '<table border="1">'; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo '<tr>'; echo '<th>' . $cnt++ . '</th>'; foreach ($row as $column_name => $column_value) { echo '<td>' . $column_value . '</td>'; } echo '</tr>'; } echo '</table>'; } catch (PDOException $e) { echo 'execution failed: ' . $e->getMessage(); echo ' error code: ' . $e->getCode(); } echo '<hr>'; } ?> <form action="" method="post"> <input type="text" name="empno" value="<?php echo $id; ?>"> <input type="submit"> </form>
の脆弱性をチェックする場合は以下のような手順です。
- Parosを起動する
- ブラウザのプロキシ設定をlocalhost:8080に変更する
- ブラウザからPHPスクリプトにアクセスする
- [Analyze]-[Scan All]を実行
- 検出された脆弱性(可能性も含む)
- XSS、SQLインジェクションが検出されました
検出は完全ではないですが、使い方によってはかなり効率的と思います。
なお、試す場合は絶対に余所様のサイトに向かってしないように。