基礎(chǔ)[1]?入門-算法逆向&散列對(duì)稱非對(duì)稱&JS源碼逆向&AES&DES&RSA&SHA
#知識(shí)點(diǎn): 1、Web常規(guī)-系統(tǒng)&中間件&數(shù)據(jù)庫(kù)&源碼等 2、Web其他-前后端&軟件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&負(fù)載均衡等 ----------------------------------- 1、APP架構(gòu)-封裝&原生態(tài)&H5&flutter等 2、小程序架構(gòu)-Web&H5&JS&VUE框架等 ----------------------------------- 1、滲透命令-常規(guī)命令&文件上傳下載 2、反彈Shell-防火墻策略&正反向連接 3、數(shù)據(jù)回顯-查詢帶外&網(wǎng)絡(luò)協(xié)議層級(jí) ----------------------------------- 1、抓包技術(shù)-HTTP/S-Web&APP&小程序&PC應(yīng)用等 2、抓包工具-Burp&Fidder&Charles&Proxifier ----------------------------------- 1、抓包技術(shù)-全局-APP&小程序&PC應(yīng)用 2、抓包工具-Wireshark&科來(lái)分析&封包 ----------------------------------- 1、存儲(chǔ)密碼加密-應(yīng)用對(duì)象 2、傳輸加密編碼-發(fā)送回顯 3、數(shù)據(jù)傳輸格式-統(tǒng)一格式 4、代碼特性混淆-開(kāi)發(fā)語(yǔ)言 ----------------------------------- 1、單向散列加密 -MD5,HASH 2、對(duì)稱加密 -AES DES 3、非對(duì)稱加密 -RSA 4、解密-識(shí)別&需求&尋找(前后端)&操作 #章節(jié)點(diǎn) 應(yīng)用架構(gòu):Web/APP/云應(yīng)用/小程序/負(fù)載均衡等 安全產(chǎn)品:CDN/WAF/IDS/IPS/蜜罐/防火墻/殺毒等 滲透命令:文件上傳下載/端口服務(wù)/Shell反彈等 抓包技術(shù):HTTP/TCP/UDP/ICMP/DNS/封包/代理等 算法加密:數(shù)據(jù)編碼/密碼算法/密碼保護(hù)/反編譯/加殼等 |
演示案例:
- 算法加密-概念&分類&類型
- 加密解密-識(shí)別特征&解密條件
- 解密實(shí)例-密文存儲(chǔ)&數(shù)據(jù)傳輸
安全測(cè)試中: 密文-有源碼直接看源碼分析算法(后端必須要有源碼才能徹底知道) 密文-沒(méi)有源碼1、猜識(shí)別 2、看前端JS(加密邏輯是不是在前端) #算法加密-概念&分類&類型1. 單向散列加密 -MD5 單向散列加密算法的優(yōu)點(diǎn)有(以MD5為例): 方便存儲(chǔ),損耗低:加密/加密對(duì)于性能的損耗微乎其微。 單向散列加密的缺點(diǎn)就是存在暴力破解的可能性,最好通過(guò)加鹽值的方式提高安全性,此外可能存在散列沖突。我們都知道MD5加密也是可以破解的。 常見(jiàn)的單向散列加密算法有: MD5 SHA MAC CRC 2. 對(duì)稱加密 -AES 對(duì)稱加密優(yōu)點(diǎn)是算法公開(kāi)、計(jì)算量小、加密速度快、加密效率高。 缺點(diǎn)是發(fā)送方和接收方必須商定好密鑰,然后使雙方都能保存好密鑰,密鑰管理成為雙方的負(fù)擔(dān)。 常見(jiàn)的對(duì)稱加密算法有: DES AES RC4 3. 非對(duì)稱加密 -RSA 非對(duì)稱加密的優(yōu)點(diǎn)是與對(duì)稱加密相比,安全性更好,加解密需要不同的密鑰,公鑰和私鑰都可進(jìn)行相互的加解密。 缺點(diǎn)是加密和解密花費(fèi)時(shí)間長(zhǎng)、速度慢,只適合對(duì)少量數(shù)據(jù)進(jìn)行加密。 常見(jiàn)的非對(duì)稱加密算法: RSA RSA2 PKCS #加密解密-識(shí)別特征&解密條件MD5密文特點(diǎn): 1、由數(shù)字“0-9”和字母“a-f”所組成的字符串 2、固定的位數(shù) 16 和 32位 解密需求:密文即可,但復(fù)雜明文可能解不出 BASE64編碼特點(diǎn): 0、大小寫區(qū)分,通過(guò)數(shù)字和字母的組合 1、一般情況下密文尾部都會(huì)有兩個(gè)等號(hào),明文很少的時(shí)候則沒(méi)有 2、明文越長(zhǎng)密文越長(zhǎng),一般不會(huì)出現(xiàn)"/""+"在密文中 AES、DES密文特點(diǎn): 同BASE64基本類似,但一般會(huì)出現(xiàn)"/"和"+"在密文中 解密需求:密文,模式,加密Key,偏移量,條件滿足才可解出 RSA密文特點(diǎn): 特征同AES,DES相似,但是長(zhǎng)度較長(zhǎng) 解密需求:密文,公鑰或私鑰即可解出
其他密文特點(diǎn)見(jiàn): 1.30余種加密編碼類型的密文特征分析(建議收藏) https://mp.weixin.qq.com/s?__biz=MzAwNDcxMjI2MA==&mid=2247484455&idx=1&sn=e1b4324ddcf7d6123be30d9a5613e17b&chksm=9b26f60cac517f1a920cf3b73b3212a645aeef78882c47957b9f3c2135cb7ce051c73fe77bb2&mpshare=1&scene=23&srcid=1111auAYWmr1N0NAs9Wp2hGz&sharer_sharetime=1605145141579&sharer_shareid=5051b3eddbbe2cb698aedf9452370026#rd 2.CTF中常見(jiàn)密碼題解密網(wǎng)站總結(jié)(建議收藏) https://blog.csdn.net/qq_41638851/article/details/100526839 3.CTF密碼學(xué)常見(jiàn)加密解密總結(jié)(建議收藏) https://blog.csdn.net/qq_40837276/article/details/83080460 #解密實(shí)例-密文存儲(chǔ)&數(shù)據(jù)傳輸1、密碼存儲(chǔ)(后端處理) X3.2-md5&salt DZ對(duì)應(yīng)代碼段-/uc_server/model/user.php ??????? function add_user() { ??????????????? $password = md5(md5($password).$salt); ??? } ??? <?PHP $h = 'd7192407bb4bfc83d28f374b6812fbcd'; $hash=md5(md5('123456').'3946d5'); if($h==$hash){ ??????? echo 'ok'; }else{ ??????? echo 'no'; } ?>文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-821337.html X3.5-hash DZ對(duì)應(yīng)代碼段-/uc_server/model/user.php ??????? function add_user() { ??????????????? $salt = ''; ??????????????? $password = $this->generate_password($password); ??? } ??????? function generate_password($password) { ??????????????? $algo = $this->get_passwordalgo(); ??????????????? $options = $this->get_passwordoptions(); ??????????????? $hash = password_hash($password, $algo, $options); ??????? } <?PHP $hash = '$2y$10$KA.7VYVheqod8F3X65tWjO3ZXfozNA2fC4oIZoDSu/TbfgKmiw7xO'; if (password_verify('123456', $hash)) { ??? echo 'ok'; } else { ??? echo 'error'; } ?> 2、數(shù)據(jù)通訊 -博客登錄-zblog(前端處理) <script src="script/md5.js" type="text/javascript"></script> $("#btnPost").click(function(){ ??? var strPassWord=$("#edtPassWord").val(); ??? $("form").attr("action","cmd.php?act=verify"); ??? $("#password").val(MD5(strPassWord)); -墨者靶場(chǎng)-(后端處理) -1 union select 1,database(),user(),4_mozhe xgd58ipTrnx8VzSBJicqCibZxIRsZKgXOYUrNQP8fCCtx9JZ+6K1hHt7RKkzV305 eGdkNThpcFRybng4VnpTQkppY3FDaWJaeElSc1pLZ1hPWVVyTlFQOGZDQ3R4OUpaKzZLMWhIdDdSS2t6VjMwNQ== |
//PHP7.3加密演示代碼塊 <?php //aes namespace vendor; class EncryptionTool{ ??? public static function enAES($originTxt, $key): string{ ??????? return base64_encode(openssl_encrypt($originTxt, 'AES-128-ECB',$key, OPENSSL_RAW_DATA)); ??? } ??? public static function deAES($originTxt, $key): string{ ??????? $data = base64_decode($originTxt); ??????? return openssl_decrypt($data,'AES-128-ECB',$key, OPENSSL_RAW_DATA); ??? } ??? } //des class DES { ??? /** ???? * @var string $method 加解密方法,可通過(guò) openssl_get_cipher_methods() 獲得 ???? */ ??? protected $method; ??? /** ???? * @var string $key 加解密的密鑰 ???? */ ??? protected $key; ??? /** ???? * @var string $output 輸出格式 無(wú)、base64、hex ???? */ ??? protected $output; ??? /** ???? * @var string $iv 加解密的向量 ???? */ ??? protected $iv; ??? /** ???? * @var string $options ???? */ ??? protected $options; ??? // output 的類型 ??? const OUTPUT_NULL = ''; ??? const OUTPUT_BASE64 = 'base64'; ??? const OUTPUT_HEX = 'hex'; ??? /** ???? * DES constructor. ???? * @param string $key ???? * @param string $method ???? *????? ECB DES-ECB、DES-EDE3 (為 ECB 模式時(shí),$iv 為空即可) ???? *????? CBC DES-CBC、DES-EDE3-CBC、DESX-CBC ???? *????? CFB DES-CFB8、DES-EDE3-CFB8 ???? *????? CTR ???? *????? OFB ???? * ???? * @param string $output ???? *????? base64、hex ???? * ???? * @param string $iv ???? * @param int $options ???? */ ??? public function __construct($key, $method = 'DES-ECB', $output = '', $iv = '', $options = OPENSSL_RAW_DATA | OPENSSL_NO_PADDING) ??? { ??????? $this->key = $key; ??????? $this->method = $method; ??????? $this->output = $output; ??????? $this->iv = $iv; ??????? $this->options = $options; ??? } ??? /** ???? * 加密 ???? * ???? * @param $str ???? * @return string ???? */ ??? public function encrypt($str) ??? { ??????? $str = $this->pkcsPadding($str, 8); ??????? $sign = openssl_encrypt($str, $this->method, $this->key, $this->options, $this->iv); ??????? if ($this->output == self::OUTPUT_BASE64) { ??????????? $sign = base64_encode($sign); ??????? } else if ($this->output == self::OUTPUT_HEX) { ??????????? $sign = bin2hex($sign); ??????? } ??????? return $sign; ??? } ??? /** ???? * 解密 ???? * ???? * @param $encrypted ???? * @return string ???? */ ??? public function decrypt($encrypted) ??? { ??????? if ($this->output == self::OUTPUT_BASE64) { ??????????? $encrypted = base64_decode($encrypted); ??????? } else if ($this->output == self::OUTPUT_HEX) { ??????????? $encrypted = hex2bin($encrypted); ??????? } ??????? $sign = @openssl_decrypt($encrypted, $this->method, $this->key, $this->options, $this->iv); ??????? $sign = $this->unPkcsPadding($sign); ??????? $sign = rtrim($sign); ??????? return $sign; ??? } ??? /** ???? * 填充 ???? * ???? * @param $str ???? * @param $blocksize ???? * @return string ???? */ ??? private function pkcsPadding($str, $blocksize) ??? { ??????? $pad = $blocksize - (strlen($str) % $blocksize); ??????? return $str . str_repeat(chr($pad), $pad); ??? } ??? /** ???? * 去填充 ???? * ???? * @param $str ???? * @return string ???? */ ??? private function unPkcsPadding($str) ??? { ??????? $pad = ord($str{strlen($str) - 1}); ??????? if ($pad > strlen($str)) { ??????????? return false; ??????? } ??????? return substr($str, 0, -1 * $pad); ??? } } //rsa define('RSA_PUBLIC', '-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmkANmC849IOntYQQdSgLvMMGm 8V/u838ATHaoZwvweoYyd+/7Wx+bx5bdktJb46YbqS1vz3VRdXsyJIWhpNcmtKhY inwcl83aLtzJeKsznppqMyAIseaKIeAm6tT8uttNkr2zOymL/PbMpByTQeEFlyy1 poLBwrol0F4USc+owwIDAQAB -----END PUBLIC KEY-----'); define('RSA_PRIVATE','-----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKaQA2YLzj0g6e1h BB1KAu8wwabxX+7zfwBMdqhnC/B6hjJ37/tbH5vHlt2S0lvjphupLW/PdVF1ezIk haGk1ya0qFiKfByXzdou3Ml4qzOemmozIAix5ooh4Cbq1Py6202SvbM7KYv89syk HJNB4QWXLLWmgsHCuiXQXhRJz6jDAgMBAAECgYAIF5cSriAm+CJlVgFNKvtZg5Tk 93UhttLEwPJC3D7IQCuk6A7Qt2yhtOCvgyKVNEotrdp3RCz++CY0GXIkmE2bj7i0 fv5vT3kWvO9nImGhTBH6QlFDxc9+p3ukwsonnCshkSV9gmH5NB/yFoH1m8tck2Gm BXDj+bBGUoKGWtQ7gQJBANR/jd5ZKf6unLsgpFUS/kNBgUa+EhVg2tfr9OMioWDv MSqzG/sARQ2AbO00ytpkbAKxxKkObPYsn47MWsf5970CQQDIqRiGmCY5QDAaejW4 HbOcsSovoxTqu1scGc3Qd6GYvLHujKDoubZdXCVOYQUMEnCD5j7kdNxPbVzdzXll 9+p/AkEAu/34iXwCbgEWQWp4V5dNAD0kXGxs3SLpmNpztLn/YR1bNvZry5wKew5h z1zEFX+AGsYgQJu1g/goVJGvwnj/VQJAOe6f9xPsTTEb8jkAU2S323BG1rQFsPNg jY9hnWM8k2U/FbkiJ66eWPvmhWd7Vo3oUBxkYf7fMEtJuXu+JdNarwJAAwJK0YmO LxP4U+gTrj7y/j/feArDqBukSngcDFnAKu1hsc68FJ/vT5iOC6S7YpRJkp8egj5o pCcWaTO3GgC5Kg== -----END PRIVATE KEY-----'); $password='xiaodisec'; //md5echo "原始數(shù)據(jù):$password". "<br/>"; echo "MD5加密后:".md5($password). "<hr/>"; //base64echo "原始數(shù)據(jù):$password". "<br/>"; echo "BASE64編碼后:".base64_encode($password). "<hr/>"; //aesecho "原始數(shù)據(jù): " . $password . "<br/>"; $data = EncryptionTool::enAES($password, "1234567891234567"); echo "AES加密后: " . $data . "<hr/>"; //echo "解密后: " . EncryptionTool::deAES($data, "1234567891234567") . "<br/>"; //desecho "原始數(shù)據(jù):$password". "<br/>"; $key = 'key123456'; $iv = 'iv123456'; // DES CBC 加解密 echo 'DES CBC 加解密:'; $des = new DES($key, 'DES-CBC', DES::OUTPUT_BASE64, $iv); echo $base64Sign = $des->encrypt($password); echo "<br>"; //echo $des->decrypt($base64Sign); echo "<hr>"; // DES ECB 加解密 echo "原始數(shù)據(jù):$password". "<br/>"; echo 'DES ECB 加解密:'; $des = new DES($key, 'DES-ECB', DES::OUTPUT_BASE64); echo $base64Sign = $des->encrypt($password); echo "<hr>"; //echo $des->decrypt($base64Sign); //rsa//公鑰加密$public_key = openssl_pkey_get_public(RSA_PUBLIC); if(!$public_key){ ??? die('公鑰不可用'); } //第一個(gè)參數(shù)是待加密的數(shù)據(jù)只能是string,第二個(gè)參數(shù)是加密后的數(shù)據(jù),第三個(gè)參數(shù)是openssl_pkey_get_public返回的資源類型,第四個(gè)參數(shù)是填充方式 $return_en = openssl_public_encrypt($password, $crypted, $public_key); if(!$return_en){ ??? return('加密失敗,請(qǐng)檢查RSA秘鑰'); } $eb64_cry = base64_encode($crypted); echo "RSA公鑰加密數(shù)據(jù):".$eb64_cry; echo "<br>"; //私鑰解密$private_key = openssl_pkey_get_private(RSA_PRIVATE); if(!$private_key){ ??? die('私鑰不可用'); } $return_de = openssl_private_decrypt(base64_decode($eb64_cry), $decrypted, $private_key); if(!$return_de){ ??? return('解密失敗,請(qǐng)檢查RSA秘鑰'); } echo "RSA私鑰解密數(shù)據(jù):".$decrypted; echo "<hr>"; //私鑰加密$private_key = openssl_pkey_get_private(RSA_PRIVATE); if(!$private_key){ ??? die('私鑰不可用'); } $return_en = openssl_private_encrypt($password, $crypted, $private_key); if(!$return_en){ ??? return('加密失敗,請(qǐng)檢查RSA秘鑰'); } $eb64_cry = base64_encode($crypted); echo "RSA私鑰加密數(shù)據(jù)".$eb64_cry; echo "<br>"; //公鑰解密$public_key = openssl_pkey_get_public(RSA_PUBLIC); if(!$public_key){ ??? die('公鑰不可用'); } $return_de = openssl_public_decrypt(base64_decode($eb64_cry), $decrypted, $public_key); if(!$return_de){ ??? return('解密失敗,請(qǐng)檢查RSA秘鑰'); } echo "RSA公鑰解密數(shù)據(jù):".$decrypted; echo "<hr>"; ?> |
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-821337.html
到了這里,關(guān)于web安全學(xué)習(xí)筆記【09】——算法2的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!