MENU

2021DASCTF Web复现

August 11, 2021 • Read: 824 • Web

2021DASCTF

1.ezrce

打开网站发现就是一个yapi的接口,滑到底部发现版本号

1.png
搜索相关的漏洞复现即可

漏洞名称:YAPI远程代码执行漏洞

组件名称:YAPI

影响范围:YAPI<=1.9.2,

漏洞类型:远程代码执行

利用条件:

  1. 需要用户已登录
  2. 触发方式远程

YApi 提供了编写JS 脚本方式来提供自定义mock功能,JS脚本运行在NodeJs沙盒上,由于官方的沙盒只是为了隔离上下文,并不提供任何安全保证;mock脚本自定义服务未对JS脚本加以命令过滤,用户可以添加任何请求处理脚本,攻击者可利用该漏洞在受影响的服务器上执行任意javascript代码,通过精心构造的Javascript代码可以绕过沙盒并用于执行任意系统命令,从而导致远程代码执行漏洞,最终导致接管并控制服务器。

利用过程:

  1. 在首页下方找到登录/注册功能接口,或直接访问 /login 路径进行登录和注册。
  2. 登录之后进入个人空间,在右侧点击添加项目;
  3. 添加成功后进入项目,点击右侧同一位置有个“添加接口”
  4. 添加完之后,打开接口,进入“高级Mock”功能,点击脚本,输入Poc,点击保存即可。
  5. 点击“预览”,访问Mock地址,即可触发漏洞POC。
  6. poc
const process = this.constructor.constructor('return process')()
mockJson = process.mainModule.require("child_process").execSync("whoami").toString()

2.png
3.png

可以看到成功获取到了当前的用户名为app,主要就是利用execSync这个函数可以执行系统命令

4.png

2. cat flag

源码: 提示:管理员曾访问过flag

<?php

if (isset($_GET['cmd'])) {
    $cmd = $_GET['cmd'];
    if (!preg_match('/flag/i',$cmd))
    {
        $cmd = escapeshellarg($cmd);
        system('cat ' . $cmd);
    }
} else {
    highlight_file(__FILE__);
}
?>

比赛时曾一度在绕过正则表达式和escapeshellarg函数,但是都没有效果,当时可以看到的内容就是
/etc/passwd。

write up出来后才明白了这个提示是什么意思。flag是在网页端被访问的,应该查网站相关的日志,而不是去看Linux下的日志。
5.png

由插件可以看到用的是Nginx服务。Nginx 是一个 Web服务器,也可以用作反向代理、负载均衡器、邮件代理和 HTTP 缓存。

Nginx的Linux日志路径:/var/log/nginx/xxx.log 常见的日志有访问日志access,错误日志error

6.png

然后我们就看到了flag所在的文件。this_is_final_flag_e2a457126032b42d.php

但是这里就要绕过flag正则了。采用ascii编码绕过
this_is_final_fl%aaag_e2a457126032b42d.php

编码原理请见: php正则绕过

然后右键查看源码得到flag
7.png

Last Modified: August 20, 2021
Leave a Comment

本站总访问量 32676 次