一、CTF例子解析
1.PHP ord()函数
定义:ord()函数返回字符串的首个字母的ASCII值
实例:(返回“S”的ASCII值)
<?php
echo ord("S")."<br>";
echo ord("Shanghai")."<br>";
?>
二、CMS密码加密解密
1.密码加盐
(1)盐:没有任何规律的随机值
(2)MD5值的本质:将一串字符串通过某特定的算法来将其变成另一种形式,这样子就在外观上起到了加密的效果,但是由于背后的算法是固定的,所以每一个字符串都有固定的MD5格式
(3)UUID:UUID是指通用唯一识别码(Universally Unique Identifier),也被称为GUID(全局唯一标识符)。它是一种由软件程序创建的唯一标识符,可以用来标识互联网上的信息和实体。UUID是一个128位二进制数字,通常以16进制形式表示。它被设计成没有重复的可能性,即使在不同的计算机和网络之间。
(4)有些密码不得到其他东西(盐,诸如此类),是没有办法进行解密的
三、靶场练习
1.SQL注入漏洞测试(参数加密)——墨者学院
AES加密:对称加密,AES的区块长度固定为128位,密钥长度则可以是128,192或256位。大多数AES计算是在一个特别的有限域完成的。AES加密解密过程中用的密钥是相同的。AES加密存在偏移量,多观察。
流模式:流模式是指Serial接口两端的设备进入交互阶段后,链路一端的设备可以向对端设备发送配置信息,设置对端设备的物理层参数,然后建立链路。在流模式下,不支持链路层协议,也不支持IP网络层协议。
(1)mcrypt_module_open函数
本函数打开指定算法和模式对应的模块。 算法名称可以是字符串,例如 "twofish"
, 也可以是 MCRYPT_ciphername
常量。 调用 mcrypt_module_close() 函数可以关闭模块。
示例 在加密中使用 mcrypt_module_open()
<?php
/* 打开加密算法和模式 */
$td = mcrypt_module_open('rijndael-256', '', 'ofb', '');
/* 创建初始向量,并且检测密钥长度。
* Windows 平台请使用 MCRYPT_RAND。 */
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
$ks = mcrypt_enc_get_key_size($td);
/* 创建密钥 */
$key = substr(md5('very secret key'), 0, $ks);
/* 初始化加密 */
mcrypt_generic_init($td, $key, $iv);
/* 加密数据 */
$encrypted = mcrypt_generic($td, 'This is very important data');
/* 结束加密,执行清理工作 */
mcrypt_generic_deinit($td);
/* 初始化解密模块 */
mcrypt_generic_init($td, $key, $iv);
/* 解密数据 */
$decrypted = mdecrypt_generic($td, $encrypted);
/* 结束解密,执行清理工作,并且关闭模块 */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
/* 显示文本 */
echo trim($decrypted) . "\n";
?>
加密模式:MCRYPT_MODE_CBC
数据块:MCRYPT_RIJNDAEL_128
(2)mcrypt_generic_init函数
初始化加密所需的缓冲区
【1】加盐部分的概念引用: