PHPによる脆弱なWebアプリ

この記事は、まだ書きかけです。

前置き

「PHPサイバーテロの技法(GIJOE、ソシム)」を読みました。せっかくなので、整理しておきます。ただし、この本の情報は最新ではないし、私の理解不足もあるので、この記事の内容を鵜呑みにしないで下さい。

この記事は、まだ書きかけです。

本文

攻撃方法14種類

  • XSS(Cross Site Scripting)
  • Script Insertion
  • SQL Injection
  • CSRF(Cross Site Request Forgery)
  • ヌルバイト攻撃
  • Directory Traversal
  • 変数汚染攻撃
  • HTTPレスポンス分割攻撃
  • インクルード攻撃
  • eval利用攻撃
  • 外部コマンド実行攻撃
  • ファイルアップロード攻撃
  • セッションハイジャック
  • スパムメール踏み台攻撃

entry points(carrier)

  • URL(path, request parameters)
  • HTTP Header(cookie)
  • HTTP Body(request parameters, MIME, file(EXIF of image, Flash, php, html))

vulnerable points

  • HTMLのbody部にrender
  • uploadされたファイルをcgiやmod_phpで実行
  • uploadされたHTMLをブラウズ
  • HTTPヘッダ
  • PHPのinclude文
  • Mailのヘッダ(to/cc/bcc)
  • eval()
  • preg_replace()の正規表現(PCRE、Perl Compatible Regular Expression)に、修飾子eを付ける
  • コールバック系関数(call_user_funcなど)でeval()やpreg_replace()を呼ばせる
  • system()
  • MIMEのContent-Disposition、Content-Type
  • header()
  • HTTPのLocationヘッダ
  • HTTPのSet-cookieヘッダ
  • クライアントが指定したPHPSESSIDでsession_start()する
  • encoding指定(utf-7) → <?xml version="1.0" encoding="UTF-8"?>や<meta http-equiv="content-type" content="text/html; charset=utf-8" />
  • substr()
  • fopen(), file(), copy(), unlink()
  • ereg(), ereg_replace()
  • $_SERVER['PHP_SELF']
  • echo, pring(), <?= ?>
  • $_SERVER['PATH_INFO']
  • $_SERVER['HTTP_REFERER']
  • SID
  • $_REQUEST
  • RSS, ATOM
  • $_GET, $_POST, $_COOKIE, $_FILES
  • register_globals on

tricks

  • ../でディレクトリを遡る
  • 改行(%0d%0a)でHTTPやMailのヘッダを切る
  • ヌルバイト(%00)で文字列を切る
  • ;でSQL文を切る
  • 'でSQLの比較式を切る
  • "でHTMLの属性値を切る
  • <script>
  • formからのGET/POSTに見せかける
  • onmouseover属性を挿入
  • document.location、document.cookie
  • onmouseover="submit();"でPOSTするHTMLを埋め込む
  • "javascript:"で始まる属性値 →IE?
  • Content-Typeの不整合時に、デフォルトでtext/htmlとして扱う →IE?

設定、対策

  • allow_url_fopen off
  • escapeshellarg()
  • safe_mode_exec_dir
  • session.use_trans_sid off
  • session.use_cookies on
  • session.use_only_cookies on
  • session.auto_start off
  • session.referer_check on
  • session.regenerate_id(true)
  • register_globals off
  • display_errors off
  • error_reporting E_ALL&~E_NOTICE
  • display_startup_errors off
  • log_errors on
  • addslashes()
  • htmlspecialchars(" ", ENT_QUOTES)
  • ワンタイムチケットをformのhiddenに
Last modified:2011/06/08 22:13:45
Keyword(s):
References:[言語Tips]
This page is frozen.