sqlmap技巧系列-dump數據出現亂碼

1. 場景git

咱們發現了一個SQL注入點,在經過sqlmap dump數據的時候出現亂碼了,若是咱們但願經過sqlmap選項,以合理的方式處理這些亂碼的數據,就須要一些技巧性的使用方式了。github

1.1 注入點sql

能夠看到下圖中,在我VPS上的sqlmap的--sql-shell選項下,經過sql語句來獲取某個字段的內容時,sqlmap輸出的數據是亂碼的shell

 

sqlmap技巧系列-dump數據出現亂碼

 

2. 技巧編碼

關於dump數據輸出亂碼,咱們至少能夠用二種以上的技巧來解決spa

--binary-fields:將指定的字段以十六進制的格式輸出(☆☆☆☆☆五星推薦)3d

--encoding:數據返回時的所使用的的編碼調試

不一樣版本的sqlmapcode

2.1 --binary-fieldsblog

好比在上面的場景中,咱們mb_name字段出現亂碼,則咱們能夠經過--binary-fields=mb_name的方式來解決這一個問題,完整的命令以下:

sqlmap -r xxx.txt -D dbname -T tablename -C mb_id,mb_email,mb_password,mb_name --dump --binary-fields="mb_name" --sql-shellwww.csfk0731.com

咱們能夠再次在sql-shell的模式下獲取mb_name內容

 

sqlmap技巧系列-dump數據出現亂碼

 

接下來,咱們應該如何對這裏的十六進制數據作處理?好比筆者上面mb_name對應的編碼爲euc-kr

import binascii

name = '3439B1E2B1BAC0C7'

binascii.unhexlify(name).decode("euc-kr")

 

sqlmap技巧系列-dump數據出現亂碼

 

2.2 --encoding

--encoding通常用於返回頁面沒有設置響應頭Content-Type和meta標籤的編碼時使用和配置,好比在上面的場景下,--encoding=euc-kr

sqlmap/lib/request/basic.py

 

sqlmap技巧系列-dump數據出現亂碼

 

2.3 不一樣版本的sqlmap

爲了更好的瞭解亂碼問題的出現,我在本地電腦也進行了數據獲取的操做,發現本地電腦獲取mb_name數據時,並無出現亂碼的狀況。

這時候我經過增長-v 3這一個參數來查看更多調試信息,發現了問題所在。

2.3.1 VPS上的輸出

這裏面有一條調試信息引發了個人注意turning off NATIONAL CHARACTER casting,咱們暫且先記錄下來

 

sqlmap技巧系列-dump數據出現亂碼

 

2.3.2 本地電腦的輸出

 

sqlmap技巧系列-dump數據出現亂碼

 

2.3.3 問題的根源

經過對比上面兩個圖片的調試信息,咱們能夠知道出現亂碼時的PAYLOAD:CAST(mb_name AS CHAR),沒有亂碼時

CAST(mb_name AS NCHAR)。

爲了驗證是否由於CAST後的數據類型不一致,咱們能夠經過--no-cast選項來模擬亂碼的場景,發現關閉CAST後,出現了咱們熟悉的亂碼,從而能夠肯定CAST(mb_name AS NCHAR)時纔不會亂碼。

 

sqlmap技巧系列-dump數據出現亂碼

 

2.3.4 問題的分析

咱們在sqlmap的github地址來查找這個調試信息turning off NATIONAL CHARACTER casting。

代碼以下:傳送門

 

sqlmap技巧系列-dump數據出現亂碼

 

對應的git blame地址:git blame 傳送門

 

sqlmap技巧系列-dump數據出現亂碼

 

git commit對好比下

 

sqlmap技巧系列-dump數據出現亂碼

 

從上面的信息咱們知道,sqlmap新版本修復了一個union注入時NCHAR問題,在union注入的狀況下,新版sqlmap會自動去掉CAST(mb_name AS NCHAR)的使用。

2.3.5 問題的解決

知道問題是不一樣版本的sqlmap致使的,那麼我們切換版本便可

#新版git

git switch -c c6557e2

#舊版git

git checkout c6557e2

 

sqlmap技巧系列-dump數據出現亂碼

 

 

sqlmap技巧系列-dump數據出現亂碼

相關文章
相關標籤/搜索