php 加密 解密-php加密解密解读

2023-08-21 0 4,587 百度已收录

不知道大家对php加密解密了解多少。 本文主要与大家分享关于php加密解密的知识,希望对大家有所帮助。

一种对称加密

1.mycyrpt的对称加密:

/** 
* @param $key  //数据加密密钥 由自己定义,长度有限制 string 
* @param $string  //需要进行加解密的字符串 string 
* @param $decrypt //加密还是解密 (最简单的,0代表加密,1代表解密) 
* @return string */
function encryptDecrypt($key, $string, $decrypt)
{   
 if(!$decrypt){        
 //加密        
 $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));        
 return $encrypted;    
 }else{       
 //解密        
 $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");        
 return $decrypted;    
 }
}//使用方法:echo encryptDecrypt('passwordgg', 'Hello欢迎您',0);  
//加密  
ZbKOQy8uarg6nsIrpjZnJvaIDMuAAIBH3sjhBEqYujM=echo encryptDecrypt('passwordgg', 'ZbKOQy8uarg6nsIrpjZnJvaIDMuAAIBH3sjhBEqYujM=',1);  
//解密  
Hello欢迎您

登录后复制

注意:该方法从php7.1开始被废弃php 加密 解密,使用openssl_encrypt和openssl_decrypt。 官方推荐使用openssl家族进行加解密

2. OpenSSL扩展中的对称加密

php 加密 解密-php加密解密解读

/** 
* @param string $data 需要加解密的数据字符串 string
* @param int $yes 加密还是解密(1表示加密,0表示解密) 
* @param string $key 数据加密密钥 
* @param string $iv 初始化向量 //注:这里为了显示效果,暂时将iv存储到session中, 
* @param string $iv 实际应用中,应该将iv和加密后的字符串都存储在数据库 
* @param string $encryptMethod  
数据加密方式 100余种,可通过openssl_get_cipher_methods()函数获取, 
* @param string $encryptMethod  选择其中一种(如果选择cbc结尾的加密算法,
需要初始化向量iv,如本例) 
* @return string 
*/
function openssl_crypt($data='',$yes=1,$key='secret',$iv='',$encryptMethod='aes-256-cbc'){    
if($yes)
{        
$ivLength = openssl_cipher_iv_length($encryptMethod); //获取该加密算法iv应该具有的长度        
$iv = openssl_random_pseudo_bytes($ivLength, $isStrong); //生成iv(初始化向量)       
 if (false === $iv && false === $isStrong) 
 {            
 die('IV generate failed');        
 }        
//加密        
$encrypted = openssl_encrypt($data, $encryptMethod, $key, 0, $iv);        
$_SESSION['iv']=$iv; //将iv存到session中        
return $encrypted;    
}else{       
 //解密        
 $decrypted = openssl_decrypt($data, $encryptMethod, $key, 0, $iv);        
 return $decrypted;    
 }
}//使用方法
echo $a=openssl_crypt('我爱北京天安门 /我爱祖国',1,'passG506'); //加密 
LMcwSGlTFijXRdcPaccYoc08xgr7NydtZ+Wrhdv/145gF3/ayKQCJvRLmvhs5ec8echo "
"; echo openssl_crypt($a,0,'passG506',$_SESSION['iv']); //解密 我爱北京天安门 /我爱祖国

登录后复制

注:1.为什么生成iv,iv的作用是什么

回顾openssl_get_cipher_methods()返回的加密算法列表,有很多名字中间带有“CBC”的。 该加密算法采用相同的加密模式,即CipherBlockChaining。

php 加密 解密-php加密解密解读

CBC模式的加密算法中,明文会被分成若干组,并以组为单位进行加密。 每组的加密过程依赖于前一组的数据:需要与前一组的数据进行异或运算,生成本组的密文。 那么一开始哪个群体取决于谁呢? 它取决于IV,所以这就是为什么IV被称为初始化向量。 IV 是初始化向量的缩写

IV应该是随机生成的,因此代码使用openssl_random_pseudo_bytes()来生成IV。 该函数接收一个表示要生成的 IV 厚度的 int。

不同的加密算法,IV的宽度也不同。 普通人记不住这么多算法所需要的IV宽度。 所以直接使用openssl_cipher_iv_length()函数,该函数返回一个int,表示加密算法所需的IV宽度:

echo openssl_cipher_iv_length('AES-256-CBC'); // 16
echo openssl_cipher_iv_length('BC-CBC'); // 8
echo openssl_cipher_iv_length('AES-128-ECB'); // 0

登录后复制

例如,AES-256-CBC需要16位IV,BC-CBC需要8位IV,而AES-128-ECB不需要IV,因此返回0。

2、使用过程中需要注意的问题

添加和泄露秘密时,不仅两个函数的第一个参数不同,而且其余参数必须相同才能成功泄露秘密。 最后,在使用需要IV的加密算法时,需要注意:

必须传递 $iv 参数,否则 PHP 将抛出警告

IV应该是随机生成的(例如使用openssl_random_pseudo_bytes()),并且不能人为设置

每次加密都应该重新生成IVphp 加密 解密,并且多次加密不应该使用同一个IV

IV应与密文一起保存(否则无法泄密),可以直接附在密文串前面,也可以单独保存

如果不懂可以参考对称加密

两种非对称加密

常用的非对称加密是RSA算法。 非对称加密和解密使用不同的密钥,其中一个作为私钥公开,另一个作为公钥仅由私有者拥有。

用公钥加密的信息只能用私钥解密,反之亦然。 用私钥加密的信息只能用公钥解密。

在RSA解密之前,需要生成一对公钥和公钥。 可以使用Linux自带的RSA密钥生成工具openssl来获取一对公钥和公钥,也可以使用PHPopenssl扩展功能来生成一对公钥和公钥。

参考:RSA非对称加密

注:非对称加密的缺点是泄露绝密时间较长且解密速度慢,仅适合加密少量数据。

如果想要有很快的加密速率,并且想要保证数据比对称加密更安全,可以使用混合加密。 (即数据的对称加密和秘钥的非对称加密)

泄密时,首先使用非对称加密获取秘钥,然后使用秘钥解密密文得到明文。

因传播、使用本公众号提供的信息而造成的任何直接或间接的后果和损失均由用户自行承担。 后果请自行承担! 如有侵权,请告知,我们将立即删除并致歉。 感激的!

0.2。 其他的

因为很多同学告诉我,用CSDN看文章不太方便,而且有时设置粉丝后还需要登录账号才能阅读,所以这里我规划了一个公众号,会陆续同步文章,期间还可能发布一些其他内容。

文章内容太多用手机看,手机只适合点赞

内容与CSDN同步:不加蘑菇的红烧排骨

1. 文件上传漏洞 1.1。 文件上传漏洞定义

文件上传漏洞是Web系统中常见的功能。 通过文件上传,可以上传图片、视频等类型的文件,随着网络中包含的功能越来越多,潜在的网络安全风险也随之增加。 大。

如果恶意用户上传可执行文件或脚本,就会导致被其控制的网站甚至其服务器瘫痪,引发恶意网络安全事件。

1.2. 文件上传漏洞原理

文件上传漏洞是指用户通过界面的上传功能上传可执行脚本文件,但WEB端系统没有检查或者测量逻辑不够好。

从来说,文件上传功能没有问题,主要是服务器如何处理上传的文件。

如果WEB没有对用户上传的文件进行有效审核,如果有恶意用户向其上传一句话木马,进而达到控制WEB网站的目的。

1.3. 文件上传思路 1.3.1. 常规类

扫描获取上传、会员中心头像上传、后台系统上传等多种方式上传。

1.3.2.cms类

已知cms源代码。

1.3.3. 编辑班

ckeditor、fckeditor、kindeditor、xxxxeditor。

1.3.4. 其他类别/CVE

代码审核、平台或第三方应用程序。

1.4. Web 界面中的风险点

上传头像、上传身份认证、上传文件、有文件上传的地方都可能存在相关漏洞,但有文件上传就一定有漏洞,但只有有文件上传才能进行测试。

1.5. 文件上传的实用思路

上传文件和执行文件是两个不同的事情

漏洞分类:解析漏洞、cms漏洞、其他漏洞(编辑器漏洞、cve漏洞、安全补丁)

想法:

如果有网站,则从文件上传的方向开始

第一步:首先查看中间件是否存在解析漏洞/CMS/编辑器漏洞/CVE/

如果有,如何找到它:

词典扫描:扫描会员中心,文件上传的地方

找到后,如何使用:

认证/绕过

2、文件上传绕过分类2.1。 JS级防护

JS防护是对上传文件的格式进行验证,而JS类的防护是用户可控的,所以后端的所有验证都是不安全的。

2.1.1. 后端验证2.1.1.1.upload-labs第一遍

通过禁用接口JS处理,然后上传1.php文件,可以绕过后端检查。 关于如何禁用界面JS,可以通过安装插件一键禁用。 在傲游插件市场搜索javascriptswitcher。

图像

img2.2。 黑名单

黑名单是服务器明确不允许上传的格式后缀,如:rar、php、zip等。

2.2.1. 特殊解析后缀2.2.1.1。 基本概念

特殊解析后缀被绕过是因为黑名单过滤规则不严格,在某些特定情况下后缀只能解析为php文件,如PHP2、php3、php4、phtml、pht等。

您可以使用 phtml、php3、php4 和 php5。 其实前提是apache服务器。 同时,上面的配置文件夹中必须有一段像AddTypeapplication/x-httpd-php.php.phtml.phps.php1.php4.pht这样的段落。 删除注释并重启phpstudy即可生效。

2.2.1.2.upload-labs第三级

根据源代码,严禁上传.asp、.aspx、.php、.jsp类型。

可以通过上传其他文件扩展名来绕过该级别,实现文件上传。

图像

img2.2.2..htaccess分析2.2.2.1。 基本概念

.htaccess文件是Apache服务器中的配置文件,负责相关目录下的网页配置。 通过htaccess文件,可以实现:网页301重定向、自定义404页面、更改文件扩展名、允许/停止特定用户或目录的访问、禁止目录列出、配置默认文档等功能。

2.2.2.2.upload-labs第四级

根据源代码,第三级使用的phtml受到限制,但设置了更多特殊解析后缀,因此长期以来很难绕过特殊解析后缀的使用。 这里可以使用.htaccess来绕过测试。

先决条件:

Apache开启重写模块

.apache配置文件为AllowOverrideAll(默认为None)

.htaccess需要用notepad++创建,否则无法创建,创建.htaccess代码:

  
SetHandler application/x-httpd-php

x.png是用php执行目录中名为x.png的文件的代码。

首先上传.htaccess,然后上传名为x.png的文件来执行。

图像

img2.2.3。 案例旁路 2.2.3.1。 基本概念

后缀的情况是因为服务器没有将后缀转换成统一的格式,从而无法上传PHP文件。 同时,由于Windows系统对后缀大小写不敏感,所以在编写PHP,改成Php时,会被解析为PHP。

2.2.3.2.upload-labs第五遍

根据源代码,其大小没有限制,而且由于是黑名单,所以只限制不能上传的内容。 这样我们就可以改变php后缀的大小写,如:PHP、Php、pHp等。

图像

img2.2.4。 点绕过 2.2.4.1。 基本概念

点绕过虽然是利用Windows对文件和文件名的限制,但是当点放在末尾时,也会触发操作系统的命名约定问题,所以在生成文件时,在末尾添加了点最终将被淘汰。

2.2.4.2.upload-labs 级别 7

通过源码发现这个关卡并没有衡量终点。 所以这里你可以通过在后缀上添加一个点来绕过它。 这里我用的是之前的案例文件,没有改名字,所以不用太在意。 这并不意味着您可以通过使用 case 来绕过它。

img2.2.4.3.upload-labs 第九级

通过源码,我发现这一级之前的绕过思路都被过滤了,而且通过源码,我发现所有的过滤都是一次性的,并不是循环过滤的。 也就是说源码中提到的删除空格和删除点只删除一次,这样就可以在数据包中添加php后缀..生成.php..,因为只验证一次,所以删除一个点和一个空格后就不会被删除了。

img2.2.5。 空间旁路 2.2.5.1。 基本概念

虽然空格绕过和点绕过是一样的,但是都是借助操作系统的特性来解析绕过的。 详细内容请参考绕过的解释。

2.2.5.2.upload-labs第六级

通过源码我们发现没有对空格的限制,所以我们可以在后缀中添加空格来绕过,而在Windows系统中我们无法创建后缀带有空格的文件,并且后缀中的空格也不会数据包中要被清除啊,所以这里我们需要使用BS来抓包,对其进行修改,然后上传。

当修改上传到对方服务器时,服务器会手动清理前面的空格,从而实现绕过。

img2.2.6.::$$DATA 绕过 2.2.6.1。 基本概念

在窗口中,如果将文件名+"::DATA后面的数据视为文件流,则不会检查后缀名,而保留::$DATA之前的文件名。他的目的是不检测后缀名

2.2.6.2.upload-labs第八级

通过源码发现::DATA并没有被绕过。

img2.2.7。 配合解析漏洞2.2.7.1。 基本概念

配合解析漏洞就是利用文件上传漏洞和相关解析漏洞的组合来完成成功的攻击,例如配合iis、nginx、apache、tomcat的解析漏洞来实现上传漏洞的实现。 详细信息请参见下面提到的各种相关解析漏洞。

2.2.8. 双后缀绕过 2.2.8.1。 基本概念

服务器可能会将后缀替换为空,并且有可能在编辑和过滤时只过滤一次,因此有可能通过词尾绕过。

2.2.8.2.upload-labs第十级

通过源码发现,如果上传文件的后缀在禁止栏内,那么后缀就会被替换为空,而这里只是过滤一次,这样就可以通过后缀绕过。

这里,因为过滤是从左到右匹配,所以不要问为什么不从右到左匹配。

例如:pphp

img2.3。 白名单

白名单是服务器可以明确上传的格式后缀,如:jpg、png、jpeg等。

2.3.1. MIME 绕过 2.3.1.1。 基本概念

服务器端MIME类型检查是通过检测http中包含的Content-Type数组中的值来判断上传的文件是否合法。

使用Burp抓包并将消息中的Content-Type更改为允许的类型

Content-Type:image/gif(gif 图像)

Content-Type:image/jpg(jpg图像)

内容类型:image/png(png图像)

2.3.1.2.upload-labs 第二遍

通过对源码中第五段的分析,得出该关卡采用content-type进行前端验证,因此使用BS抓包改变content-type,然后上传。

img2.3.2。 截断 2.3.2.1。 基本概念

它并不代表一个空格,而是一个null,一个空字符。 程序执行时,旁边的数据会停止php判断空,也就是说被误认为是结束符,直接忽略前面的数据,这样就会产生漏洞。

文件上传后,借助截断,在验证文件扩展名时,会使用文件的扩展名进行验证,最终保存到本地时,会截断文件名,只保留之前的内容将会被拯救。

只能用于PHP 5.3以上版本。 这里我们需要切换phpstudy的版本,并关闭magic_quotes_gpc,以phpstudy为例。 其他选项菜单---php扩展及设置---参数开关设置---关闭magic_quotes_gpc。

2.3.2.2.upload-labs第十一层

通过源码发现这个级别是白名单,路径可以截断。

img2.3.2.3.upload-labs 级别 12

该级别的接受值从 get 到 post 发生变化。 两者的区别是get会自己解码,而post不会,所以需要解码。

在BS抓包中,右键选择URL,然后选择URL解码。

img2.4。 2.4.1. 内容及其他文件头检查 2.4.1.1。 基本概念

图片的格式一般不通过保护中的后缀来判断。 文件头是文件开头的两个补码。 不同类型的图片也会有不同的二补码终端。

JPEG (jpg),文件头:FF D8 FF E1 
PNG (png),文件头:89 50 4E 47
GIF (gif),文件头:47 49 46 38

img2.4.1.2.upload-labs 级别 13

画马可以用记事本直接打开图片,在前面添加一段PHP代码,但可能会出现错误。 第二种是使用copyX.png/b+1.php/ax.png。

准备好的图马如果要解析图片,肯定有这个包含漏洞。我们看到他已经说过该网站包含漏洞了

图像

上传一张马的图片,并找到路径。

图像

构造的URL:http://192.168.10.150/upload-labs/include.php?file=upload/2120221024150121.png

img2.4.2。 二次渲染2.4.2.1。 基本概念

二次渲染是指我们上传图片后,网站会对图片进行二次处理,比如处理图片规格、格式以及网站定义图片的一些要求等,但是服务器会进行二次处理关于上述内容。 替换更新,处理后会生成符合要求的图片并显示在网站上。

2.4.2.2.upload-labs 十六级

这里当然也可以使用jpg等图片格式,最好使用gif图片。

使用抓包软件截取并查看上传的文件名。

网上找到的gif图片马:链接: 提取码:1b8h

图像

图像

构建的URL:http://192.168.10.150/upload-labs/include.php?file=/upload/18556.gif

img2.4.3。 条件竞赛 2.4.3.1. 基本概念

条件竞争是源代码中有校准,并且校准是在文件上传后开始的,即先将文件上传到服务器,然后服务器对文件进行校准。 文件被重命名,当文件不符合要求时,文件被删除。

并且我们需要在服务器删除文件之前访问该文件,因为在访问过程中服务器很难删除该文件,所以我们可以利用这个节点来实现条件竞争。

2.4.4. 突破gaimagesize 2.4.4.1。 基本概念

getimagesize函数用于获取图像大小及相关信息,成功则返回一个链表,失败则返回false,形成e_warning级别的错误信息。

通过图像和代码的合成,此时getimagesize函数就可以获取图像信息,并且文件后缀php也可以解析为脚本文件,从而绕过getimagesize函数的限制。

2.4.4.2.upload-labs 级别 14

这一级有getimagesize函数,意思是:会读取目标文件的16的补码,读取前几个字符串是否满足图像的要求。

使用方法与十三级相同php判断空,前提是必须有相关漏洞。

img2.4.5。 突破exif_imagetype2.4.5.1。 基本概念

服务器exit_imagetype()函数测量上传的图片类型是否为白名单图片格式,以验证上传文件的合法性。 可以通过画马来规避,然后配合包含漏洞分析文件的文件获取服务器配置信息。

2.4.5.2.upload-labs 级别 15

上传一张马的图片,然后用br抓包软件抓包,查看上传的文件名。

图像

URL:http://192.168.10.150/upload-labs/include.php?file=/upload/4920221126063306.png

img3. 3.1. 解析漏洞解析漏洞说明

解析漏洞是指服务器应用程序解析精心构造的后缀文件时,会将相关文件解析为网页的脚本,进而导致控制网站的实现。 同时,大部分解析漏洞是由应用程序形成的。

3.2. IIS解析漏洞3.2.1.IIS5.0/6.03.2.1.1。 目录解析

名为 .asp 的文件夹中的任何文件都将作为 asp 文件执行。

即当目录为XX.asp时,访问下面的图片时,如XX.aps/1.jpg将被作为ASP执行。

3.2.1.2. 文件解析

如果文件是1.asp;.jpg,因为IIS不解析; 前面的内容会被解析为1.asp,另外还有.asa、.cer、.cdx可以解析。

3.2.1.3. 补丁建议

1)限制上传目录的执行权限,不允许执行脚本。

2) 不允许创建目录。

3) 上传的文件被重命名。

3.2.2.IIS7.0/IIS7.53.2.2.1.IIS7.0/IIS7.5Fast-CGI

当Fast-CGI开启时,在1.jpg之类的前面添加/1.php,/1.jpg/1.php路径就会被解析成PHP文件。 您需要进入php.ini并更改cig.cgi_pathinfo=1。

将1.txt文本文件中的侧门代码写入1.jpg图像的补码:

copy 1.jpg/b + 1.txt/a 1.jpg

1.txt文件内容为:

<?PHP fputs(fopen('shell.php','w'),'');?>

当图片文件中写入侧门代码时,访问图片并添加/.php时,会在当前目录生成单字木马shell.php。

3.2.2.2. 补丁建议

配置cgi.fix_pathinfo(在php.ini中)为0并重启php-cgi程序

img3.3.apache解析漏洞 3.3.1.apache解析漏洞

apache1.x和apache2.x中存在解析漏洞。

当文件为1.php.yy.xx时,它将作为php执行。 这是因为apache解析文件时有一个原则,就是解析前面的扩展名。 当使用扩展名时,会向前解析,直到遇到只能解析的后缀。

例如:1.php.yy.xx,会先解析xx,如果xx解析失败则解析yy,如果yy没有解析则解析php,所以不管php能不能解析,这都会结束。

这些方法大多用于绕过黑名单检测。

3.3.2. 补丁建议

1)更新到最新版本。

2) 重命名上传的文件。

3.4.nginx解析漏洞3.4.1.nginx3.4.1.1.nginx配置文件错误

因为nginx默认使用cgi解析php,所以可以像iis一样绘制图片并立即上传。

当图片文件中写入侧门代码时,访问图片并添加/.php时,会在当前目录生成单字木马shell.php。

3.4.1.2. 补丁建议

1)配置cgi.fix_pathinfo(在php.ini中)为0并重启php-cgi程序

图像

2)或者如果需要使用cgi.fix_pathinfo的功能(例如:Wordpress),可以严格禁止上传目录的脚本执行权限。 或者将上传和存储的内容与网站分离,即站库分离。

3)或者更高版本的PHP提供了配置参数security.limit_extensions,设置security.limit_extensions=.php

3.4.2.nginx0.5/0.6/0.7

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 加密 解密-php加密解密解读 https://www.wkzy.net/game/137952.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务