ctfshow 吃瓜杯 web 部分题

本文详细介绍了ctfshow比赛中的Web部分题目,包括'热身'、'shellme'和'shellme_Revenge'。在'热身'中,通过八进制和intval特性绕过字母限制;'shellme'直接搜索flag获取;'shellme_Revenge'则需要构造特殊payload,利用0/0和1/0来执行命令,最终完成挑战。

目录

热身

shellme

shellme_Revenge


热身

<?php
​
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-18 16:53:59
# @link: https://ctfer.com
​
*/
​
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(preg_match("/[a-z]|\./i", $num)){
        die("no no no!!");
    }
    if(!strpos($num, "0")){
        die("no no no!!!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
} 

源码奉上,这个题在web入门出现过

具体做法如下:

首先看到了字母被禁了

if(!strpos($num, "0"))这个语句告诉我们开头不能为0

很明显我们要用八进制,然后这个地方还要在值前加上一个+或空格

是因为考察了一个intval性质

1.如果字符串包括了 “0x” (或 “0X”) 的前缀,使用 16 进制 (hex);否则,
2.如果字符串以 “0” 开始,使用 8 进制(octal);
3.否则,将使用 10 进制 (decimal)

这个地方字母被禁了,不能16进制,

需要加个+或空格即可绕过

?num=+01
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值