WEB安全 SQL注入漏洞測試 寬位元組

2022-09-09 22:42:31 字數 3068 閱讀 1702

前言

這是sql注入的第七篇,有關寬位元組注入的知識之前的部落格也有敘述,但是缺少一次完整的實操經歷,這一次完整的梳理一遍

正文首先明確實訓目標和解題方向,是寬位元組注入

進入**,發現和之前的靶場差不多,點進去公告

所謂寬位元組注入,原理在於開發人員在開發的時候,對傳入的引數進行了特殊的函式處理,比如使用了trim()函式,htmlspecialchars()函式,addlashes函式,是可以過濾我們非法提交的引數,從而導致sql注入無法成功。作為攻擊者,要完成的是對引數的拼接,從而導致惡意的sql語句寫入

開始注入,先測試單引號等情況,發現不可行,將id改成-1後頁面消失,所以判斷存在注入情況

之後用寬位元組注入方式 %df,原理在於在gbk編碼中,反斜槓的編碼是%5c,在輸入%df後,使得新增反斜槓後形成%df%5c,而%df%5c是繁體字「連」,單引號成功逃逸,爆出mysql資料庫的錯誤

發現報錯後,新增注釋符,報錯消失,判斷是單引號閉合

注意:這裡很重要的一點,也算是我之前走的坑,這裡如果進行測試,#在微軟的edge上是無法實現的,只能使用--+,而在火狐上面則是可以使用%23和--+,同時在這裡對注釋進行說明,注釋分為兩種,一種是#,另一種是--(空格),這裡重點說第二種,--是注釋符,之後只有在有乙個空格的情況下,後面的語句才會被當成注釋,但是如果只是--沒有空格,則不會當成注釋,在sql語句中+可以作為空格來連線,所以我們避免在注入時,注入點後緊接著乙個語句,使得注釋符後由於沒有空格導致無法形成注釋的情況,自己加乙個+作為空格,形成注釋符,而#在url裡確實有特殊含義,且有些get型禁止出現#號,所以如果以後#不生效,可以嘗試--+

接下來使用order by語句判斷列,發現6會報錯,5可以,所以確定為5列

回顯報錯位為3和5

獲取資料庫名為 mozhe_discuz_stormgroup

獲取表名為 notice,stormgroup_member

獲取stormgroup_member表的列名,但是這裡對單引號有過濾

%df' union select 1,2,database(),4,group_concat(column_name) from information_schema.columns where table_name='stormgroup_member' %23

修改**後,發現原有的繞過方式會在資料表中顯示編碼後的繁體字「連」,思考新的方式

隨後獲取name和password資料為 mozhe,3114b433dece9180717f2b7de56b28a3 和 mozhe,0959ad23e725f2a5e2acfa3344b479e4

%df' union select 1,2,database(),4,group_concat(name,0x7e,password) from mozhe_discuz_stormgroup.stormgroup_member %23

解密後獲得賬號密碼,輸入後獲取key

總結

打這個靶場還是收穫頗豐的,首先知道了寬位元組注入的繞過原理和方法,其次是發現有的瀏覽器對不同的注釋以及編碼的不同要求導致會誤判,所以以後在進行初步判斷時要更加的全面,因為只有判斷正確,之後的注入才可以繼續下去,剛開始就錯了也就沒有繼續的必要了

同時也收穫了寬位元組注入的具體流程,之前的筆記只知道原理,並沒有完整的實操過,這一次了解到在傳統union聯合注入過程中,針對存在過濾的情況,如何調整**來繞過防禦,在學到竟然可以通過16進製制的方式傳遞資料時,著實開啟了一扇新的大門,隨後順著這個線索知道對於其它字元的繞過,相關知識網上也有很多部落格,之後也要找時間學習和整理一下

WEB安全 SQL注入漏洞測試 報錯盲注

前言 目前鑽研sqli注入,這是第四篇,靶場名即為標題,鏈結如下 正文首先明確靶場為報錯注入,了解到目標,方便我們之後遇到問題有底,這裡截斷函式不知道,接下來就會遇到問題 進入靶場,環境和之前一樣,進入公告 之後按照流程,判斷出是單引號閉合,同時判斷出有四個回顯位,但是當我們準備判斷哪個是回顯位的時...

Web 安全漏洞之 SQL 注入

有人的地方就有江湖,有資料庫存在的地方就可能存在 sql 注入漏洞。在所有漏洞型別中,sql 注入可是說是危害最大最受大家關注的漏洞。簡單說來,sql 注入是通過在使用者可控引數中注入sql語法,破壞原有sql結構,達到編寫程式時意料之外結果的攻擊行為。還是以 thinkjs 為例,假設我們寫了如下...

WEB安全 SQL注入

sql注入 or 1 例如 select form table1 where name param 一般param是從頁面輸入控制項傳遞來的資料 如果你在控制項中輸入 or 1 1 那麼他將查詢所有的資料出來 表示後面的都被注釋掉了 你還可以 drop table table1 那麼他將刪除該錶,其...