BUUCTF WEB Easy Calc

题目:

 解题:

1:查看源码

         发现提示:I've set up WAF to ensure security.

                           url:"calc.php?num=

2:尝试calc.php页面

        过滤了一些特殊符号:空格、\t、\r等,正确传入num参数后,执行 eval('echo '.$str.';'); 语句。

3:尝试num=phpinfo() 

        输入:http://node4.buuoj.cn:25599/calc.php?num=phpinfo()

         无法访问,说明WAF对num参数做了过滤。

        (WAF对来自Web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予以实时阻断,从而对各类网站站点进行有效防护。)

        输入num=123可以回显123,输入num=abc被拒绝,猜测WAF对num参数过滤了英文字母。

4:查询字符串解析特性

parse_str函数        

        parse_str() 函数把查询字符串解析到变量中。

        语法:parse_str(string,array)

        参数:string:必需。规定要解析的字符串。

                   array:可选。规定存储变量的数组名称。该参数指示变量存储到数组中。如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量。

        具体介绍:https://www.runoob.com/php/func-string-parse-str.html

        parse_str函数通常被自动应用于get、post请求和cookie中。如果你的Web服务器接受带有特殊字符的参数名,parse_str() 函数在解析的过程中会将某些特殊字符删除或用下划线代替。具体情形如下: 

情形问号处特殊字符解析结果
?foo_bar=bla%20  ( )foo_bar
%2b  (+)
foo?bar=bla%20  ( )
%2b  (+)
%2e  (.)
%5b  ([)
%5f  (_)
foo_bar?=bla%00  ()

        可在php交互模式下自行验证:

5:利用查询字符串解析特性绕过WAF

        WAF能够过滤特定Web应用程序的内容,利用查询字符串解析特性,将num参数变形:http://node4.buuoj.cn:25153/calc.php?+num=abc,这样对于WAF来说传入的参数为+num,而WAF并没有对+num参数做限制,而PHP经过parse_str函数解析过后获得的仍然是num参数,这样就绕过了WAF。

6:读根目录

scandir 函数

        scandir(string $directory, int $sorting_order)

        返回指定目录中的文件和目录的数组。

        参数: directory:要被浏览的目录

                    sorting_order:默认的排序顺序是按字母升序排列,如果sorting_order设为 1,则降序排列。

print_r 函数

        print_r ( mixed $expression )

        $expression: 要打印的变量,如果给出的是 string、integer 或 float 类型变量,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。

chr 函数

        chr(int $ascii): string        

        返回相对应于 ascii码 所指定的单个字符。

        因为 “/” 符号被过滤了,所以用chr(47)绕过。

        读取根目录:http://node4.buuoj.cn:25345/calc.php?+num=print_r(scandir(chr(47)))

        右键查看网页源代码得到:文件f1agg

 7:读取文件f1agg

readfile 函数

        readfile(string: $filename, string: $include_path) 

)

        readfile() 函数输出一个文件。该函数读入一个文件并写入到输出缓冲,若成功,则返回从文件中读入的字节数;若失败,则返回 false。

        参数: $filename : 规定要读取的文件。

                    $include_path:可选,在 include_path 中搜索文件。

        http://node4.buuoj.cn:25345/calc.php?+num=readfile(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))

        得到flag:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值