打开靶机,还不懂什么是calc,直接百度
calc()从字面我们可以把他理解为一个函数function。其实calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,用来指定元素的长度。
就像是页面展示的一样,一个简单的计算机,
01
查看元素,发现waf(不允许传递字母,就是不能使用num做变量,但是在num前面加上一个空格的话就可以了,php在解析的时候会先把空格去掉)
这个的话对题目没有什么影响,之后就没有什么有价值的线索了,然后查看一下网页的源代码
发现原来是有一个calc.php的文件,然后直接在URL访问
代码审计:
首先是isset()函数,检查变量是否设置,而且是使用get方式传参
下面是黑名单和正则表达式过滤掉一些输入
构造payload:
calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
参考博客:
https://blog.csdn.net/weixin_44077544/article/details/102630714
https://blog.csdn.net/a3320315/article/details/102937797
——————————————————————————————————————————————————————————————————————————
02
首先查看到界面是 尝试找出源文件,,,,题目提示了是备份文件
所以直接在URL后面加上 index.php.bak (bak是备份文件的后缀)
用记事本打开源代码文件,接下来就是代码审计
isset()函数,首先是要构造key的变量,使用get的方式传参
isnumberic()函数判断是不是只是数字,如果字符串中只包含数字字符,则返回 True,否则返回 False
所以题目传的参数要全为数字,绕过。
intval()函数
intval() 函数用于获取变量的整数值。
intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。
成功时返回 var 的 integer 值,失败时返回 0。 空的 array 返回 0,非空的 array 返回 1
所以最后的话传出来的参数都会变成数字,在最后与字符串的比较的时候被过滤得不到flag
好在他们在比较的时候使用的是==弱比较,这样我们才有可乘之机
直接构造?key=123就好了。
————————————————————————————————————————————————————————————
原文:https://www.cnblogs.com/ctfliar/p/14331666.html