BUUCTF RoarCTF 2019]Easy Calc 1

BUUCTF RoarCTF 2019]Easy Calc 1-刷题个人日记

小白一个,写给自己看。
进去后是这样:
BUUCTF RoarCTF 2019]Easy Calc 1_第1张图片
随便输入几个运算,就是一个普通的计算器。尝试sql注入,输入1'1'#:
BUUCTF RoarCTF 2019]Easy Calc 1_第2张图片BUUCTF RoarCTF 2019]Easy Calc 1_第3张图片
好8,计算器怎么会连接数据库呢,想太多了。(不过实战也是能想到的方法都试试)
ctrl+u看网页代码,发现了一个网页:calc.php
BUUCTF RoarCTF 2019]Easy Calc 1_第4张图片
进去看看:
BUUCTF RoarCTF 2019]Easy Calc 1_第5张图片所以之前的网页只是障眼法。这才是我们要目标。
构造payload

/calc.php? num=2;var_dump(scandir(chr(47)))

找到f1agg。不是l是1
在这里插入图片描述

var_dump()用来打印
scandir()用来获取目录文件
chr(47)是/的ASCII编码,因为/被过滤了,用这个什么都不显示。
搞不懂它为什么会被过滤,被什么过滤。
再就是num前有个空格,用来绕过waf(web防火墙)(为什么是waf?)。
这是php的机制,在传进php代码的url时,一些字符会被忽略或变成_
因为php一般是这样$_GET['num']获取url传进来的参数,当有一些奇怪的字符和参数写在一些时,如%[num%id,它会变成$_GET['num_id']。所以在num前加个空格可以绕过waf并且php会把它当成正常的num使用,此时并不是’ num’而是‘num’。
打开f1agg:

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

chr(47)——/
chr(102)——f
chr(49)——1
chr(97)——a
chr(103)——g
它们之间用.连接,因为是php。
我试过用base64.decode('Lw==')代替chr(47)但:
在这里插入图片描述
它不是只过滤了"没过滤'吗?
BUUCTF RoarCTF 2019]Easy Calc 1_第6张图片
参考
[RoarCTF 2019]Easy Calc

你可能感兴趣的:(ctf,buuctf,刷题日记)