天天看點

聊聊常見的加密與JWT一、加密算法/編碼二、JWT:

文章目錄

  • 一、加密算法/編碼
  • 二、JWT:
      • 2.1 概念:
      • 2.2 确認網站使用JWT:
      • 2.3 實際例子:
      • 2.4 結構(三部分):
      • 2.5 攻擊思路:
        • 2.6 其他:

一、加密算法/編碼

常見的:

md5(大多數網站已經開始加鹽)
    
    SHA-1、2、256等(與md5同屬于雜湊演算法)
    
    AES(加密模式、填充、資料庫、密碼、偏移量),可選以上5種方法對内容進行加密,且輸出可以選base64與hex(16進制)兩種。

        假設一串特殊的base64解碼(密文中存在“ +/= ”)之後發現是一些亂碼,這串密文大機率是AES進行加密的

        其破解來說,除了“密碼”與”偏移量“難搞,另外3種相關好碰撞(常見于CTF),正在陸續取代md5。 

    DES(與base64相似,但是在密文之中會出現“ / ”字元) 
           

二、JWT:

2.1 概念:

一個用于替代session機制的産物,用于對使用者的身份做檢驗。
	
  全稱JSON Web Token(JSON Web令牌)。
      
  JWT不加密傳輸的資料,但是可以通過數字簽名來防止資料被篡改,用戶端與伺服器的具體互動如下:

        ~使用者輸入正确的賬戶密碼上傳伺服器,

        ~通過認證之後,伺服器将一串證明身份的字元傳回使用者端,即JWT

        ~之後使用者所有需要認證身份的資料包都攜帶着JWT去請求,作用十分類似cookie
        
           

需要注意的一點是,

一般JWT字元串都是儲存在header之中而非cookie之中(當然可以存在cookie中)。

	這就使得其可以天然防禦csrf攻擊,但是無法抵擋XSS攻擊。
	
           

2.2 确認網站使用JWT:

~關鍵字 “ Authorization ”

   ~資料包格式(XXX.XXX.XXX)
   
           

2.3 實際例子:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

2.4 結構(三部分):

頭部(base64編碼)、資料(base64編碼)、簽名((頭部+資料+一個秘鑰)加密得到)

     	//由上述看出,一個強秘鑰(類似強密碼)對JWT的安全來說十分重要。
     	
           

舉個例子:

頭部内容:

        {
        "alg": "HS256",       、、加密算法,常見的如HS256
        "typ": "JWT"          、、可有可無的字段
        }

    資料:
  
      {
        "user_id": "666",         、、目前使用者的編号
        "admin": "false",         、、目前使用者不是管理者 
        "iat": 1516239022         、、時間戳
      }
           

2.5 攻擊思路:

~第一種:

        正常的JWT:   AAA.BBB.CCC   

        我們可以先base64還原 AAA.BBB 之後,修改完畢在base64編碼成為 XXX.YYY .

                、、這裡注意,假設編譯的xxx.yyy中含有“=”直接去掉即可。

        最終上傳“ XXX.YYY. ”到伺服器,直接幹掉簽名部分,這樣假設伺服器對簽名不進行校驗,

        即可達成越權的目的。
        	
        	
       	注意的是,假設可以使用這種方式繞過身份驗證,可以嘗試在AAA.BBB中sql注入、XSS等等
	
		
				XXX是base64編碼後的:
						
						{
						     "alg": "none",        
						}
				YYY是base64編碼後的:
					
						{
						  "user_id": "666",         
						  "admin": "true",         
						  "iat": 1516239022         
						}

  ~第二種:

        直接使用腳本爆破JWT的秘鑰,直接谷歌/百度即可,或者在GitHub上搜尋
  
  ~第三種:
  		
  		在一些日志檔案中得到JWT,直接使用可能提示失效,
		
		可以試着修改其對應的時間戳,即失效時間。(配合前兩種情況)
          
           

2.6 其他:

~遇到類似字元串的時候,可以複制粘貼到這個網站看看:
	
			 https://jwt.io/
    

  ~可以通過對JWT進行二次加密或者魔改來達到提高其安全性的目的