目录
热身
<?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

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

被折叠的 条评论
为什么被折叠?



