欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

SQL注入方法

freeflydom
2024年9月18日 1:47 本文熱度 830

前言

記錄一些注入思路和經常使用的工具,后續有用到新的工具和總結新的方法再繼續補充。

如何測試與利用注入點

手工

下面的現象是在說存在注入點后的現象,如果服務端有防護手段就需要另外的手段繞過。

老方法:

  • 單引號

    現象:出現數據庫報錯。

  • 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表示 | 符號,其實就是用過|將所有字段數據拼接到一起進行顯示

注入思路

  • 第一步:找注入點,尋報錯

    單引號、雙引號、單引號+括號、雙引號+括號、單引號+雙括號、雙引號+雙括號、數字型(不用閉合)、json等等類型注入(post數據)、http header注入...

  • 第二步:

    • 嘗試報錯注入。

    • dnslog注入拖庫

    • bool盲注、base on time 時間型注入等等

    • http header 數據包中尋找注入點。

    • order by 、union select 等方法猜測后端代碼中這條sql語句查詢的屬性列數是多少

    • union select 1,2,3...,直到查詢列數后,通過查詢一個不存在的數據然后與union select聯合查詢配合回顯顯示位

    • 如果被攔下了:對數據進行編碼、大小寫混用、雙寫、字符串拼接等等

    • 若有回顯信息

      修改顯示位為我們要獲取的信息,比如:database()、version()等等,或者mysql5.0以上使用imformation_schema來快速拖庫。

    • 若無回顯信息

      嘗試bool盲注、base on time時間型注入等等。這里也可以嘗試報錯注入。

    • 若第一步發現有回顯報錯信息出現,則可以進行sql注入語句的編寫。

    • 若第一步無回顯信息出現。

  • 第三步:

    • 編寫能夠通過前后端檢查的sql注入語句

    • 使用工具拖庫

    • 可嘗試使用數據庫自帶的可執行系統命令進一步滲透。

工具

以下是一些工具注入手段。
在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

  • 介紹:萬能參數,主要針對post注入,但是任何其他請求方法都是可以的,這個參數用的最多。該參數是將數據包文件中的數據發送出去測試sql注入點,所以測試網站中某個url是否有sql注入點就可以抓包,然后保存下來,使用-r參數進行對該url測試。

執行命令:python2 sqlmap.py -r 數據包文件

-u

  • 介紹:只針對get請求,并且參數url最好用雙引號括起來。避免有些符號無法轉義當成參數寫進去了。

執行命令: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

  • 介紹:上面的-u只能對一個url進行測試,那么肯定能夠對多個url進行測試的參數,那就是-m了,需要注意的是-m的參數是指定文件,我們多個url是寫在文件中,然后-m指定該文件

執行命令:sqlmap-master>python2 sqlmap.py --level 3 --risk 3 -m ./m.txt

注意:若你使用的url都是同一個ip地址下的網址的話,在測試過程中,會出現問你是否跳過同一個ip下的另一個url網址測試,這時候需要你選擇否來繼續測試你文件中的下一個url網址,如果不是同ip僅僅只是詢問你確認該網址。如下圖就是同一個ip下的兩個網址進行測試,輪到下一個的時候會詢問你是否跳過,我們要測試的肯定一般都不會跳過,所以選擇否。

--level

  • 介紹:執行測試的等級(1-5,默認為1),使用–level 參數且數值 >=2的時候也會檢查cookie里面的參數,當>=3的時候將檢查User-agent和Referer。

執行命令:按照上面的執行語句加一句 [--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

  • 介紹:執行測試的風險(0-3,默認為1),默認是1會測試大部分的測試語句,2會增加基于事件的測試語句,3會增加OR語句的SQL注入測試。

執行命令: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

  • 介紹:指明發送請求的并發線程數量。線程數越低判斷出來的sql注入準確率越高。

    • 注意:這個默認線程數量在 sqlmap文件夾\lib\core\setting.py 中,修改其中的MAX_NUMBER_OF_THREADS = 10,也就是說你使用--threads 指明的線程數最大也就10,想要指定更大的就修改配置文件。(一般不需要很大,不然對方服務器也頂不住這么大的請求數量。甚至還有可能封你ip)

-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 #列出數據庫所有所有用戶


暫時了解這么多,后面繼續進階了再繼續學習補充...




該文章在 2024/9/18 9:56:19 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved