buu web [RoarCTF 2019]Easy Calc1

记录一下不会的题目。

网页刚开始的样子

查看源码,发现了calc.php

打开文件,看见代码,一个黑名单过滤。输入数字就回数字,不知道要输入什么才能知道flag

输入数字就回显数字

输入命令就没什么反应

去看别人的wp才明白,这题考察的php知识

知识点:

PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

所以,我们只要加一个空格就可以绕过

知识点:

  • scandir() 函数:返回指定目录中的文件和目录的数组。
  • var_dump() 函数会输出变量的详细信息,包括类型和值。它通常用于调试目的。

$var = "Hello, World!"; var_dump($var);

通过这个,我们就可以查看目录var_dump(scandir(/)),斜杠被过滤了 ,ascii码是47

最终命令:/calc.php?%20num=1;var_dump(scandir(chr(47)))

这是一个目录结构

知识点:

URL 参数中将 PHP 代码字符串与查询字符串连接起来,您可以使用字符串连接运算符(.)将它们组合在一起

看来要全部改变

把f1agg变成chr(102).chr(49).chr(97).chr(103).chr(103)

不对

知识点:

  • file_get_contents() 函数:把整个文件读入一个字符串中。该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。

要读取文件,需要改变方法(忘记了还是看出目录的方法)

最终payload:

/calc.php?%20num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

总结:

这道题考察的是php的知识

1.PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。

2. URL 参数中将 PHP 代码字符串与查询字符串连接起来,您可以使用字符串连接运算符(.)将它们组合在一起

3.

  • scandir() 函数:返回指定目录中的文件和目录的数组。
  • var_dump() 函数会输出变量的详细信息,包括类型和值。它通常用于调试目的。

        例 $var = "Hello, World!"; var_dump($var);

  • file_get_contents() 函数:把整个文件读入一个字符串中。

参考文章:【CTF】buuctf web 详解(持续更新)-CSDN博客

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值