Nov 04, 2007

[Misc] Wapiti にチャレンジ

Wapiti とは

Wapiti は Web アプリケーションの脆弱性チェックを行うスキャナ。

Wapiti can detect the following vulnerabilities :

  • File Handling Errors (Local and remote include/require, fopen, readfile...)
  • Database Injection (PHP/JSP/ASP SQL Injections and XPath Injections)
  • XSS (Cross Site Scripting) Injection
  • LDAP Injection
  • Command Execution detection (eval(), system(), passtru()...)
  • CRLF Injection (HTTP Response Splitting, session fixation...)
この類のソフトウェアは有償のものが多いのだけれど、Wapiti は珍しくオープンソースでフリー。 というわけで、インストールして実際に自作のサンプルアプリをチェックしてみた。
Wapiti - Web application vulnerability scanner / security auditor
http://wapiti.sourceforge.net/

Wapiti のインストール

Wapiti は Python で実装されているので、python の実行環境があればすぐに使用できる。 ここでは Mac OS X (Tiger) に MacPorts を使用して Python とその他必要となるライブラリをインストールした。

$ sudo port install python25
Password:
--->  Fetching python25
--->  Attempting to fetch Python-2.5.1.tar.bz2 from http://www.python.org//ftp/python/2.5.1/
--->  Verifying checksum(s) for python25
--->  Extracting python25
--->  Applying patches to python25
--->  Configuring python25
--->  Building python25 with target all
--->  Staging python25 into destroot
--->  Installing python25 2.5.1_2+darwin_8
--->  Activating python25 2.5.1_2+darwin_8
--->  Cleaning python25
$ /opt/local/bin/python2.5 -V
Python 2.5.1
$ sudo port install py25-hashlib
--->  Fetching py25-hashlib
--->  Verifying checksum(s) for py25-hashlib
--->  Extracting py25-hashlib
--->  Configuring py25-hashlib
--->  Building py25-hashlib with target build
--->  Staging py25-hashlib into destroot
--->  Installing py25-hashlib 2.5.1_0
--->  Activating py25-hashlib 2.5.1_0
--->  Cleaning py25-hashlib
$ sudo port install py25-socket-ssl
--->  Fetching py25-socket-ssl
--->  Verifying checksum(s) for py25-socket-ssl
--->  Extracting py25-socket-ssl
--->  Configuring py25-socket-ssl
--->  Building py25-socket-ssl with target build
--->  Staging py25-socket-ssl into destroot
--->  Installing py25-socket-ssl 2.5.1_0
--->  Activating py25-socket-ssl 2.5.1_0
--->  Cleaning py25-socket-ssl
$

Wapiti によるサンプルアプリケーションのスキャン

サンプルアプリケーションのセッション取得

スキャンを行う前に、まずはサンプルアプリケーションにログインする。 Wapiti にログイン用の URL, アカウント情報を指定してサンプルアプリケーションにログインさせ、セッション維持用の Cookie をファイルに保存しておく。

$ /opt/local/bin/python2.5 getcookie.py cookies.txt http://127.0.0.1:8080/sample/login
lswww will be far less effective without tidy
please install libtidy ( http://tidy.sourceforge.net/ ),
ctypes ( http://starship.python.net/crew/theller/ctypes/ )
and uTidylib ( http://utidylib.berlios.de/ )
Please enter values for the folling form :
url = http://127.0.0.1:8080/sample/login
loginname (on) : scott
loginpassword (on) : tiger
0 : <Cookie JSESSIONID=6E4E47C3C907D6EF9C0771920220AC135 for 127.0.0.1/sample>
$

サンプルアプリケーションのスキャン

XSS を仕込んだサンプルアプリケーションをでっち上げてスキャンしてみた。 要は GET で取得した値をそのままレスポンスの HTML に埋め込んだだけ。

$ /opt/local/bin/python2.5 wapiti.py http://127.0.0.1:8080/sample/ -c cookies.txt -x 
http://127.0.0.1:8080/sample/logout
lswww will be far less effective without tidy
please install libtidy ( http://tidy.sourceforge.net/ ),
ctypes ( http://starship.python.net/crew/theller/ctypes/ )
and uTidylib ( http://utidylib.berlios.de/ )
Wapiti-1.1.6 (wapiti.sourceforge.net)
........................................................
Attacking urls (GET)...
-----------------------
XSS (danger_value) in http://127.0.0.1:8080/sample/index
        Evil url: http://127.0.0.1:8080/sample/index?danger_value=<script>var
+wapiti_687474703a2f2f3132372e302e302e313a383038302f4242617369632f636f6d6d756e69747
92f4242534c697374_735f305f305f305f305f736f72745470=new+Boolean();</script>
  :
Wapiti は XSS をきちんと検出してくれた。 Wapiti でオールグリーンだからといって安心は出来ないけれど、最小限のセキュリティチェックを自動化できるメリットは大きそう。

ちなみに・・・

必要なライブラリがインストールされていないと Wapiti のスクリプトを実行したときに下記の様なエラーが出る。

ImportError: No module named cookielib
ImportError: No module named _md5
AttributeError: 'module' object has no attribute 'HTTPSHandler'

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |