安装破解版的Zend Guard 6.0软件之后,博主Jhonse哥就尝试给php文件加密。
第一步: 打开Zend Guard 6.0软件
本文我们来讲讲另外一种网站注入攻击方式,PNG图像元数据中iFrame注入攻击,这个也是本人最近接触,以前没有注意过,或许也有很多站长不清楚,现在分享出来。
我们一直在努力保持领先的最新趋势,今天我们发现了一个非常有趣的事,这或者是我们之前没有发现,或者是刚发生的。 我们只能说这是新发现的。
我们都了解的iFrame注入攻击,对吧?
了解一个iFrame注入
今天的iFrame 是非常标准的HTML标记,它是在自己网页中嵌入其他网站内容的简单方式。 被几乎所有的浏览器支持和百万计的网站使用,使用AdSense吗? 那么你的网站中就有一个iFrame。
我知道这东西很好,然而总是福祸相惜。
今天的攻击,特别是当我们谈论路过式下载,首选是利用IFRAME标记。 它简单方便,只需简单的属性修改,攻击者可以稳妥的从另一个站点嵌入代码,并通过客户的浏览器不知不觉的加载。
像这样:
攻击者通常从其他网站嵌入的恶意文件,通常是一个PHP文件或类似的形式。 当然,这并不是唯一的方法,但是是最普遍的。 从检测和修复的角度来看,这往往很容易修复。
新的iFrame注入法
然而今天,我们发现一个有趣的iFrame注入类型。
它的特殊之处不是在iframe标签中嵌入的内容,而是它分发恶意软件的方式。 你会看到,攻击者将威胁隐藏在PNG文件中。
我几乎可以听到很多你的窃笑,PFF .. 这不是新的…. 但问题是在细节上我的朋友。
如下,iFrame加载了一个有效的文件,没有什么恶意,一个叫jquery.js的JavaScript文件。这一切看上去都很好。你要细细的找:
起初,很多人会说我们傻。 这些代码很好,没看见什么问题,对不对? 然后,我们注意到了这个小函数,loadFile()。 函数本身并不奇怪,但事实上,它是装载一个PNG-var strFile = ‘./dron.png。 你会被它惊讶良久,它才是一个真正的黑手。
自然,下一步就是好奇的打开dron.png文件。 会有什么可怕的事情发生吗?
噢,什么都没有,太无聊了,这纯粹是浪费时间。
但是,请等一下,我发现这里有个有趣的小循环。
嗯,这是确实挺奇怪的,这是一个解码循环。 为什么要一个循环的解码PNG文件呢?
作为一个优秀的研究人员,采取最简单的方式,我可以将它加载到简单的测试页上 并提取图像内容。搞定!
测试页上加载它之后这,我们获得了strData变量:
看到它在干嘛了吗?
它做了个iFrame注入,并把它嵌入到PNG的元数据中,像一个新的分配机制。
有两点需要特别注意了,它使用createElement做了一个iFrame标签,然后设置elm.style.position.left 和 elm.style.position.top 属性的值为-1000px,把iframe放到可视区域之外。这些值都是负值,在浏览器中根本看不到。但是你知道谁能看到吗?只有浏览器和Google能看到。这就是下载驱动和搜索引擎感染(SEP)攻击的小伎俩。
最后我们在elm.src元素中发现了真正的威胁。
做的这么独特到底有什么用呢?
它尽力隐藏真正的威胁的水平是独特的。现在的杀毒软件不会解码图像元数据,直到JavaScript文件加载完毕就停止扫描。不会追踪cookie文件,对于攻击者来说,这太好了,使它们很难被发现。
记住一点,尽管我们这里谈论的是PNG文件,这些方法和概念也可以应用到其他类型图像中。重要的一点是:留意你的web 服务状态,了解哪些修改和未修改的文件并确保漏洞未被利用。
通常情况下,一些新的侦查和排障需要一定的时间。 现在我们的 网站恶意软件扫描器能发现它吗 ? 绝对可以!
验证码通常是用来安全保证我们网站注册或登录不被注入的,但为了更安全我们通常会生成一些混合验证码了,下面一起来看看例子.在我们开发登录模块或者是论坛的灌水模块的时候,为了防止恶意提交,需要用到验证码。验证码就是用来区分人和机器的一种手段,当然这种手段不是万无一失,但总归会起到一些作用。
验证码的实现需要GD库的支持,没有开启GD库的童鞋需开启GD库。
其实验证码的制作和使用非常的简单,仅仅只是需要4个步骤就可以搞定:创建验证码底图,显示验证码内容,增加干扰元素,输出验证码。下面我们来进行步骤拆分:
第一步:创建验证码底图
$image = imagecreatetruecolor(100, 30); // 创建一个宽为 100 高为 30 的底图 该底图的背景色 为黑色 是系统定义的
$bgcolor = imagecolorallocate($image, 255, 255, 255); // 为上面创建的底图分配 白色的背景颜色
imagefill($image, 0, 0, $bgcolor); // 填充白色背景色
第二步:显示验证码内容
// 输出验证码内容
for ($i=0; $i < 4; $i++) {
$fontsize = 6;
$fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
$data = 'qwertyuipkjhgfdsazxcvbnm23456789';
$content = substr($data, rand(0, strlen($data)), 1);
$x = ($i*100/4) + rand(5,9);
$y = rand(5,10);
imagestring($image, $fontsize, $x, $y, $content, $fontcolor); //在图像上水平输出一行字符串
}
第三步:增加干扰元素
// 增加干扰点元素
for ($i=0; $i < 300; $i++) {
$pointcolor = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200));
imagesetpixel($image, rand(0,99), rand(0,29), $pointcolor);
}
// 增加干扰线元素 线 和 点 的颜色一定要控制好 要比验证码数字的颜色浅 避免出现验证码数字看不见的现象
for ($i=0; $i < 4; $i++) {
$linecolor = imagecolorallocate($image, rand(100,240), rand(100,240), rand(100,240));
imageline($image, rand(0,99), rand(0,29), rand(0,99), rand(0,29), $linecolor);
}
第四步:输出验证码
// 输出创建的图像 在输出图像之前 必须输出头信息 用来规定输出的图像类型
header("Content-Type: image/png");
imagepng($image);
// 销毁图像
imagedestroy($image);
至此,一个简单的验证码就实现了,关于实现验证码的注意事项已经写在了注释里。
使用验证码的时候,我们一般都需要用session来保存以便验证,在这里就不作详细介绍。
我们只要查看开源的程序几乎都会有下面两段差不多相关的代码,代码的功能就是过滤提交数据中的一些特殊字符了,通常是有post与get了,下面来看看吧.
/**
* 递归方式的对变量中的特殊字符进行转义
*
* @access public
* @param mix $value
*
* @return mix
*/
function addslashes_deep($value)
{
if (empty($value))
{
return $value;
}
else
{
return is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);
}
}
使用:
/* 对用户传入的变量进行转义操作。*/
if (!get_magic_quotes_gpc())
{
if (!empty($_GET))
{
$_GET = addslashes_deep($_GET);
}
if (!empty($_POST))
{
$_POST = addslashes_deep($_POST);
}
$_COOKIE = addslashes_deep($_COOKIE);
$_REQUEST = addslashes_deep($_REQUEST);
}
在研究Discuz 的时候,发现Discuz有一套相当完美的加密算法(相对而言)。这个算法可以将数据加密后,储存起来,到需要用的时候,用之前加密的秘钥将之还原。
除了这个之外,还有AES这个算法能够将数据很好的加密起来,在传输过程中不容易被破解。
在PHP中,我们必须先安装好mcrypt这个模块,并且添加相应版本的扩展到php中,详情可以看 不重新编译PHP安装Mcrypt扩展
AES加密模式和填充方式有以下之中,但不是全部
算法/模式/填充 16字节加密后数据长度 不满16字节加密后长度
AES/CBC/NoPadding 16 不支持
AES/CBC/PKCS5Padding 32 16
AES/CBC/ISO10126Padding 32 16
AES/CFB/NoPadding 16 原始数据长度
AES/CFB/PKCS5Padding 32 16
AES/CFB/ISO10126Padding 32 16
AES/ECB/NoPadding 16 不支持
AES/ECB/PKCS5Padding 32 16
AES/ECB/ISO10126Padding 32 16
AES/OFB/NoPadding 16 原始数据长度
AES/OFB/PKCS5Padding 32 16
AES/OFB/ISO10126Padding 32 16
AES/PCBC/NoPadding 16 不支持
AES/PCBC/PKCS5Padding 32 16
AES/PCBC/ISO10126Padding 32 16
下面就是在PHP中使用AES对数据加密
AES-CBC 加密方案
代码如下 | 复制代码 |
<?php //加密 //解密 |
AES-ECB加密方案
代码如下 | 复制代码 |
<?php |
AES-ECB加密方案
代码如下 | 复制代码 |
<?php |
以上只是我列出的简单的3种加密方法,事实上还有很多中方法,需要我们不断的学习。密码学的道路还任重而道远