Skip to content

Instantly share code, notes, and snippets.

View ts0818's full-sized avatar

ts0818 ts0818

View GitHub Profile
@ts0818
ts0818 / null_byte_attack_02.php
Created November 5, 2015 07:48
パーフェクトPHP nullバイト攻撃対応方法
<?php
/**
* 文字列中のnullバイトを削除する関数
* 引数が配列の場合は、配列の要素に対して再帰的に処理を行う
*/
function delete_null_byte($value){
if (is_string($value) === true) {
$value = str_replace("\0", "", $value);
} elseif (is_array($value) === true) {
$value = array_map('delete_null_byte', $value);
@ts0818
ts0818 / mail_header_injection.php
Created November 5, 2015 08:44
PEAR::Mail_RFC822から抜き出したメールアドレスの正規表現による判定
<?php
function isValidInetAddress($data, $strict = false){
// 次の行は、表示改行されていますが実際は一行です
$regex = $strict ? ' /^([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})$/i ' :
' /^([*+!.&#$|\'\\%\/0-9a-z^_`{ }=?~:-]+])@(([0-9a-z-]+\.)+[0-9a-z]{2,})$/i ';
if(preg_match($regex, trim($data),$matches)){
return array($matches[1], $matches[2]);
}else{
return false;
}
@ts0818
ts0818 / include_attack_03.php
Last active November 5, 2015 08:32
パーフェクトPHP インクルード攻撃対応方法 ホワイトリスト方式によるインクルードファイルの制限
<?php
// nullバイトが含まれていた場合は処理終了
if (strpos($_GET['design'], "\0") !== false) {
exit();
}
// 「red.html」, 「blue.html」以外の読み込み指定があったら処理終了
$allow_files = array('red', 'blue');
if (in_array($_GET['design'], $allow_files, true) === false) {
exit();
@ts0818
ts0818 / include_attack_04.php
Last active November 5, 2015 08:32
パーフェクトPHP インクルード攻撃対応方法 basename( )関数を使って読み込みファイルを特定のディレクトリ内に制限
<?php
// basename()関数はバイナリセーフではないため、nullバイト対応を行う
if (strpos($_GET['design'], "\0") !== false) {
exit();
}
// 指定されたファイルをインクルード
// basename()関数で不正文字列を除去してインクルードを行う
include '/var/www/html/design/' . basename($_GET['design']) . '.html';
@ts0818
ts0818 / path_disclosure_01.php
Last active November 5, 2015 08:32
パーフェクトPHP パス・ディスクロージャ
<?php
/**
* このプログラムは脆弱性のサンプルです。
* 公開サーバに設置しないでください
*/
// GET変数で指定があった場合は、出力する$string変数にセット
if (isset($_GET['string']) === true) {
$string = $_GET['string'];
} else {
$string = '';
@ts0818
ts0818 / command_injection_02.php
Created November 5, 2015 08:31
パーフェクトPHP コマンド実行攻撃(Command Injection)対応方法
<?php
// 一覧を出力するディレクトリを$dir変数にセット
if (isset($_GET['dir']) === true) {
// nullバイトを削除
$dir = str_replace("\0", '', $_GET['dir']);
} else {
$dir = '/';
}
// ディレクトリ内のファイル一覧を出力
@ts0818
ts0818 / command_injection_01.php
Created November 5, 2015 08:29
パーフェクトPHP コマンド実行攻撃(Command Injection)
<?php
/**
* このプログラムは脆弱性のサンプルです。
* 公開サーバに設置しないでください
*/
// 一覧を出力するディレクトリを$dir変数にセット
if (isset($_GET['dir']) === true) {
$dir = $_GET['dir'];
} else {
$dir = '/';
@ts0818
ts0818 / path_disclosure_02.php
Created November 5, 2015 08:27
パーフェクトPHP パス・ディスクロージャ対応方法
<?php
/**
* エラーレポートの設定を最初(5行目~7行目)に行う
*/
ini_set('display_errors', 0); // エラーを画面に出力しない設定
ini_set('log_errors', 1); // エラーをログに記録する設定
ini_set('error_log', '/path/to/php/php_error.log'); // エラーログの指定
// GET変数で指定があった場合は、出力する$string変数にセット
if (isset($_GET['string']) === true) {
@ts0818
ts0818 / include_attack_02.php
Created November 5, 2015 08:19
パーフェクトPHP ローカルファイル・インクルード攻撃
<?php
/**
* このプログラムは脆弱性のサンプルです。
* 公開サーバに設置しないでください
*/
// 指定されたファイルをインクルード
include '/var/www/html/design/' . $_GET['design'] . '.html';
@ts0818
ts0818 / include_attack_01.php
Last active November 5, 2015 08:19
パーフェクトPHP リモートファイル・インクルード攻撃
<?php
/**
* このプログラムは脆弱性のサンプルです。
* 公開サーバに設置しないでください
*/
// 指定されたファイルをインクルード
include $_GET['design'];