CTFHub題解-技能樹-Web(web工具配置-SQL注入)


(五)時間盲注

1.知識點
基於時間的盲注就是在sql注入過程中,sql語句執行的選擇后,選擇的數據不能回顯到前端頁面。此時,我們需要利用一些方法進行判斷或者嘗試,這個過程稱之為盲注。
盲注原理:
盲注的本質就是猜解,在沒有回顯數據的情況下,我們只能靠‘感覺’來體會每次查詢時一點點細微的差異,而這差異包括運行時間的差異和頁面返回結果的差異。
對於基於布爾的盲注來說,我們可以構造一條注入語句來測試我們輸入的布爾表達式,而這布爾表達式結果的真假,決定了每次頁面有不同的反應。
對於基於時間的盲注來說,我們構造的語句中,包含了能否影響系統運行時間的函數,根據每次頁面返回的時間,判斷注入的語句是否被成功執行。
常用函數:
If(exp,v1,v2):如果表達式 expr 成立,返回結果 v1;否則,返回結果 v2 Substring(s,n,len):獲取從字符串 s 中的第 n 個位置開始長度為 len 的字符串
Sleep(duration):在duration參數給定的秒數之后運行
(注意:sleep 函數是只要存在一個滿足條件的行就會延遲指定的時間,比如sleep(5),但是實際上查找到兩個滿足條件的行,那么就會延遲10s,這其實是一個非常重要的信息,在真實的滲透測試過程中,我們有時候不清楚整個表的情況的話,可以用這樣的方式進行刺探~)
常用的判斷語句:
' and if(1=0,1, sleep(10)) --+ " and if(1=0,1, sleep(10)) --+ ) and if(1=0,1, sleep(10)) --+ ') and if(1=0,1, sleep(10)) --+ ") and if(1=0,1, sleep(10)) --+
但是對於筆者這種小菜雞來說,
sqlmap 它不香嗎?(偷笑
(主要是對基於時間的盲注的手工注入實驗做的還比較少,沒什么手工注入的經驗心得qwq,希望以后筆者可以學會手工注入!)
2.題解

sqlmap工具法:






(六)MySQL結構

1.知識點

MYSQL的隱式類型轉換:
如果兩個參數比較,有至少一個NULL,結果就是NULL,除了是用NULL<=>NULL 會返回1,不做類型轉換。
兩個參數都是字符串,按照字符串比較,不做類型轉換。
兩個參數都是整數,按照整數比較,不做類型轉換。
如果不與數字進行比較,則將十六進制值視為二進制字符串。
有一個參數是 decimal 類型,如果另外一個參數是 decimal 或者整數,會將整數轉換為 decimal 后進行比較,如果另外一個參數是浮點數,則會把 decimal 轉換為浮點數進行比較
所有其他情況下,兩個參數都會被轉換為浮點數再進行比較。
利用算術運算符:
實際中我們接觸到的語句都是帶有引號的,類似於where username='+input+' 這樣的,這時候我們就需要做一些處理來構造false注入的利用點。
輸入+ 則相當於語句被轉化為 where username="+" +,-,*,/,%都是同理。
利用比較運算符:
安全等於:<=> '=0<=>1# 拼接的語句:where username=''=0<=>1#' 不等於<>(!=) '=0<>0# 拼接的語句:where username=''=0<>0#'
注入常用函數與字符:
mid()---從文本字段中提取字符 limit()---返回前幾條或者中間某幾行數據 concat、concat_ws、group_concat MySQL的concat函數在連接字符串的時候,只要其中一個是NULL,那么將返回NULL group_concat([DISTINCT] 要連接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) rand隨機數(產生0,1之間隨機數)
假如你和筆者一樣,手工注入經驗很少的話,那么用sqlmap是最好的選擇!
2.題解







完成~

參考資料:
https://blog.csdn.net/m0_38103658/article/details/100160609
https://www.fujieace.com/penetration-test/mysql-injection-process.html
https://www.cnblogs.com/sylover/p/10826899.html