Skip to content

Instantly share code, notes, and snippets.

View ts0818's full-sized avatar

ts0818 ts0818

View GitHub Profile
@ts0818
ts0818 / upload_attack_02.php
Created November 5, 2015 08:11
パーフェクトPHP ファイルアップロード攻撃対応方法
<?php
// アップロードディレクトリは、ドキュメントルートの外側
$upload_dir = '/var/www/uploads/';
if (empty($_FILES) === false && empty($_FILES['upfile']) === false) {
if (is_uploaded_file($_FILES['upfile']['tmp_name']) === true) {
move_uploaded_file(
$_FILES['upfile']['tmp_name'],
$upload_dir . date('YmdHis') . '_'
. md5(microtime() . $_FILES['upfile']['tmp_name'])
);
@ts0818
ts0818 / upload_attack_01.php
Created November 5, 2015 08:09
パーフェクトPHP ファイルアップロード攻撃
<?php
/**
* このプログラムは脆弱性のサンプルです。
* 公開サーバに設置しないでください
*/
// アップロードされたファイルは、ドキュメントルート内のuploadsディレクトリに保存
$upload_dir = '/var/www/html/uploads/';
if (empty($_FILES) === false && empty($_FILES['upfile']) === false) {
if (is_uploaded_file($_FILES['upfile']['tmp_name']) === true) {
@ts0818
ts0818 / eval_attack_02.php
Created November 5, 2015 08:07
パーフェクトPHP eval攻撃対応方法 
<?php
$string = 'こたんたにたちたわた、世界!';
// 入力された文字列が$string変数に含まれている場合だけ処理を行う
if (strpos($string, $_GET['keyword']) !== false) {
eval("echo htmlspecialchars(str_replace('".$_GET['keyword'].
"','', '".$string."'), ENT_QUOTES, 'UTF-8');");
}
@ts0818
ts0818 / eval_attack_01.php
Created November 5, 2015 08:03
パーフェクトPHP eval攻撃
<?php
/**
* このプログラムは脆弱性のサンプルです。
* 公開サーバに設置しないでください
*/
$string = 'こたんたにたちたわた、世界!';
eval("echo htmlspecialchars(str_replace('" . $_GET['keyword'].
"','', '".$string."'), ENT_QUOTES, 'UTF-8');");
@ts0818
ts0818 / directory_travasal_04.php
Created November 5, 2015 07:55
パーフェクトPHP ディレクトリトラバーサル対応方法 不正文字列除去方式
<?php
if (isset($_GET['file']) === true && $_GET['file'] !== '') {
$file = str_replace("\0", "", $_GET['file']); // nullバイトを削除
$file = '/var/www/html/' . basename($file); // ファイル名以外の部分を削除
// GET変数で指定されたファイルが /var/www/html に存在すれば内容を出力
if (file_exists($file) === true) {
readfile($file);
}
}
@ts0818
ts0818 / directory_travasal_03.php
Last active November 5, 2015 07:58
パーフェクトPHP ディレクトリトラバーサル対応方法 ブラックリスト方式
<?php
if (isset($_GET['file']) === true && $_GET['file'] !== '') {
// 指定されたファイル名に「..」が含まれていたら処理終了
if (strpos($_GET['file'], '..') !== false) {
exit();
}
// GET変数で指定されたファイルが /var/www/html に存在すれば内容を出力
$file = '/var/www/html/' . $_GET['file'];
if (file_exists($file) === true) {
readfile($file);
@ts0818
ts0818 / directory_travasal_02.php
Last active November 5, 2015 08:00
パーフェクトPHP ディレクトリトラバーサル対応方法 ホワイトリスト方式
<?php
if (isset($_GET['file']) === true && $_GET['file'] !== '') {
// 指定されたファイルがfile1かfile2でなければ処理終了
if (! in_array($_GET['file'], array('file1', 'file2'))) {
exit();
}
// GET変数で指定されたファイルが /var/www/html に存在すれば内容を出力
$file = '/var/www/html/' . $_GET['file'];
if (file_exists($file) === true) {
readfile($file);
@ts0818
ts0818 / directory_travasal_01.php
Last active November 5, 2015 08:01
パーフェクトPHP ディレクトリトラバーサル
<?php
/**
* このプログラムは脆弱性のサンプルです。
* 公開サーバに設置しないで下さい
*/
if (isset($_GET['file']) === true && $_GET['file'] !== '') {
// GET変数で指定されたファイルが /var/www/html に存在すれば内容を出力
$file = '/var/www/html/' .$_GET['file'];
if (file_exists($file) === true) {
readfile($file);
@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 / null_byte_attack_01.php
Created November 5, 2015 07:39
パーフェクト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);