louys louys

湖湘杯线下

in web相关read (440) 文章转载请注明来源!

前言

上午的web,洞基本在后台,弱口令admin,admin一改就基本没戏了。下午两道web,一道python的django,审不动补不来。一道php,同样后台弱口令,进去转了半天根本找不到getshell的洞,后来被人捅了一刀才知道洞在哪。

上午

由于源码就在刚刚不小心被我从回收站送到了永恒虚空,先鸽了。(又收到啦)

源码在虚拟机跑不起来就直接看源码分析了。

首先有个admin.php,会路由到后台界面,用户密码一开始是不知道的,可以猜一下,admin,admin。或者可以去看看install.sql看初始化的是啥

INSERT INTO `gxl_admin` (`admin_id`, `admin_name`, `admin_pwd`, `admin_count`, `admin_ok`, `admin_del`, `admin_ip`, `admin_email`, `admin_logintime`) VALUES
(1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 985, '1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1', 0, '127.0.0.1', 'admin@qq.com', 1492353748);

我当时是看的install.sql,21232f297a57a5a743894a0e4a801fc3这一坨心算一下md5可知是admin(用ipython试一下)

后台有一个执行sql语句的地方,刚开始试了一下没看见返回以为功能被阉割了,结果实际上并没有,只是没有回显而已。实际上是可以写shell的。。。

在PicAction.php中有一个任意文件删除,可以搞down别人的服务器,或者删掉别人的install.lock进行重装

    public function del()
    {
        $path = trim(str_replace("*", "-", $_GET["id"]));
        @unlink($path);
        @unlink(str_replace(C("upload_path") . "/", C("upload_path") . "-s/", $path));
        $this->success("删除附件成功!");
    }

访问方式为http://172.16.0.128/index.php?s=Admin-Pic-del&id=./Runtime/Install/install.lock

有一个readfile

public function down(){
        $filepath = DATA_PATH.'_bak/'.$_GET['id'];
        if (file_exists($filepath)) {
            $filename = $filename ? $filename : basename($filepath);
            $filetype = trim(substr(strrchr($filename, '.'), 1));
            $filesize = filesize($filepath);
            header('Cache-control: max-age=31536000');
            header('Expires: '.gmdate('D, d M Y H:i:s', time() + 31536000).' GMT');
            header('Content-Encoding: none');
            header('Content-Length: '.$filesize);
            header('Content-Disposition: attachment; filename='.$filename);
            header('Content-Type: '.$filetype);
            readfile($filepath);
            exit;
        }else{
            $this->error('出错了,没有找到分卷文件!');
        }
    }

readfile是可以读到远程文件的,可惜这里被限制了,没法利用。

后台可能还有一些其他的读写漏洞,或者ssrf漏洞,但是需要admin权限。扫了一圈,只扫到一个队admin,admin进去了。结果在测试文件上传的时候,发现内容被替换成某个师傅的id了,(后来和师傅交流了一下确实是他,orz)。然后这唯一的一台机子在测试文件删除的时候,不小心把index.php给删掉了,就down了。。。。交流的时候听说师傅重置后还是各种404,但愿不是之前瞎删文件的后果(逃

前台的文件看了半天也没看出什么洞来。另外规则里面写了通防waf扣500分,吓得我既没上通防也没上日志。(有不少队被扣了)文件监控脚本碰到thinkphp的缓存文件,无法删除就莫名退出了,try都没用。整个上午处于瞎子状态,没打人,也没被人打,靠服务正常拿点分数。

说到底上午还是个手速题,错过了sql写文件是一大失误。

下午

下午python题目用了sqlite做数据库,找到了后台密码改了以后就不知道怎么办了。就看起php了。

有了上午的经验以后,快速寻找后台,从数据库找到了hash后的密码,心算一下大概是123456,就进去了。

这次防御阶段结束后有至少十多个能进去,就先挂着session开始找后台的洞了。没有互联网,真的是硬审这么大一个框架,审的心累。连试带审都没找到洞。有个phpmailer,怼了一下也没啥反应。。

后来,突然有一只队伍开始打人了,我们光荣的成为了第一批被打的。 由于没上日志,没上waf,很蒙蔽,只在preview里面看到了shell,不知道哪里来的。

后来分析了一下,既然没写在其他地方,说明目录大概是受限的,也就是硬编码在文件里面的,所以直接全局搜索。

        $src = file_get_contents('php://input');
        if (preg_match("#^data:image/(\w+);base64,(.*)$#", $src, $matches)) {
            $previewUrl = sprintf(
                    "%s://%s%s",
                    isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
                    $_SERVER['HTTP_HOST'],$_SERVER['REQUEST_URI']
            );
            $previewUrl = str_replace("preview.php", "", $previewUrl);
            $base64 = $matches[2];
            $type = $matches[1];
            if ($type === 'jpeg') {
                $type = 'jpg';
            }
    
            $filename = md5($base64).".$type";
            $filePath = $DIR.DIRECTORY_SEPARATOR.$filename;
    
            if (file_exists($filePath)) {
                die('{"jsonrpc" : "2.0", "result" : "'.$previewUrl.'preview/'.$filename.'", "id" : "id"}');
            } else {
                $data = base64_decode($base64);
                file_put_contents($filePath, $data);
                die('{"jsonrpc" : "2.0", "result" : "'.$previewUrl.'preview/'.$filename.'", "id" : "id"}');
            }
        } else {
            die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "un recoginized source"}}');
        }
    }

发现了目标内容是直接从raw-post里面取得,内容为base64后的,后缀可控,所以可以写shell。

python就完全凉了,被人打了也不知道是啥洞。

先发这些吧,去研究python了,有哪位老哥如果知道姿势,请务必联系我。

https://xianzhi.aliyun.com/forum/topic/1695/?accounttraceid=6042b408-54aa-4add-a466-afb7e167f707

另外刚刚看了一眼,发现tpshop的洞大概一周前公布了,但是现场没网我也很绝望呀。

jrotty WeChat Pay

微信打赏

jrotty Alipay

支付宝打赏

文章二维码

扫描二维码,在手机上阅读!

此处评论已关闭

博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
前篇 后篇
雷姆
拉姆