Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >is_numeric和trim导致的判断绕过

is_numeric和trim导致的判断绕过

作者头像
LoRexxar
发布于 2023-02-21 06:06:35
发布于 2023-02-21 06:06:35
81600
代码可运行
举报
文章被收录于专栏:LoRexxar's BlogLoRexxar's Blog
运行总次数:0
代码可运行

前两天做了一道前段时间的三个白帽,遇到了一个有趣的php黑魔法…

题目的writeup是从这里看到的 http://drops.wooyun.org/tips/10564

题目的源码首先是这样的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
if(isset($_GET['source'])){
    highlight_file(__FILE__);
    exit;
}
include_once("flag.php");
 /*
    shougong check if the $number is a palindrome number(hui wen shu)
 */
function is_palindrome_number($number) {
    $number = strval($number);
    $i = 0;
    $j = strlen($number) - 1;
    while($i < $j) {
        if($number[$i] !== $number[$j]) {
            return false;
        }
        $i++;
        $j--;
    }
    return true;
}
ini_set("display_error", false);
error_reporting(0);
$info = "";
$req = [];
foreach([$_GET, $_POST] as $global_var) {
    foreach($global_var as $key => $value) {
        $value = trim($value);
        is_string($value) && is_numeric($value) && $req[$key] = addslashes($value);
    }
}    
 
$n1 = intval($req["number"]);
$n2 = intval(strrev($req["number"]));
if($n1 && $n2) {
    if ($req["number"] != intval($req["number"])) {
        $info = "number must be integer!";
    } elseif ($req["number"][0] == "+" || $req["number"][0] == "-") {
        $info = "no symbol";
    } elseif ($n1 != $n2) { //first check
        $info = "no, this is not a palindrome number!";
    } else { //second check
        if(is_palindrome_number($req["number"])) {
            $info = "nice! {$n1} is a palindrome number!";
        } else {
            if(strpos($req["number"], ".") === false && $n1 < 2147483646) {
                $info = "find another strange dongxi: " . FLAG2;
            } else {
                $info = "find a strange dongxi: " . FLAG;
            }
        }
    }
} else {
    $info = "no number input~";
}
?>

简单分析下逻辑,flag需要满足三个条件 1、number = intval(number) 2、intval(number) = intval(strrev(number)) 3、not a palindorme number

还有一个很重要的判断是区别于falg1和2的

if(strpos($req[“number”], “.”) === false && $n1 < 2147483646)

这一句让我知道flag1的做法很清楚了就是上溢或者下溢,一种是2147483647,还有一种是number=2147483647.00000000001,这样在intval下,0.0000000000001会变成2147483647,满足条件。

有些系统下可能用了64位,那么溢出的数字要是9223372036854775807,这种情况下的payload是:number=09223372036854775807.

当然上面这种不是主要目的,问题在flag2,这里禁止使用.且数字必须小于2147483646,那么就不能使用溢出的方式了。

让我们来看看is_numeric的源码。

从画框的地方,我们可以看到,在is_numeric开始判断之前,首先要跳过所有的空白字符,也就是说即使前面我们传入一些空格什么的也是可以过判断的。

但是我们会发现前面不是有trim吗,这里我们看看trim的源码

我们发现过滤的空白字符少了一个\f,那么就很清楚了,我们可以用%0c过这里的判断了

number=%0c121

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/04/04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[PHP] PHP调用IMAP协议读取邮件类库
socket.php 为连接socket的类库 imap.php 基于socket的imap协议封装 test.php 进行测试 require_once 'socket.php'; require_once 'imap.php'; $imap=new Sina_Mail_Net_Imap("imap.sina.net:143",30,30); $imap->capability(); $imap->id(array( 'name' => 'SinaMail OtherMail C
唯一Chat
2019/09/29
2.5K0
封神台一月靶场通关笔记
num参数通过is_numeric函数的检测,并且不等于36,去空后依然不等于36,经过filter后等于36
曈曈too
2024/01/22
4390
CTFshow之web入门---PHP特性上
这里考察的是 preg_match — 执行匹配正则表达式 这个表达式的匹配。我们可以参考官方文档
十二惊惶
2024/02/28
3280
CTFSHOW刷题之旅--PHP特性[89-150](未完)
字符 ^ 和 $ 同时使用时,说明我们需要匹配以php开头和以php结尾的字符 /m 是多行匹配.这里我们可以用%0a也就是换行符来绕过第二个if。
YanXia
2023/04/07
1.3K0
CTFSHOW刷题之旅--PHP特性[89-150](未完)
PHP在CTF中的应用场景
php中所有用户自定义的函数类和关键词(if else echo)不区分大小写但是变量大小写敏感
用户11062199
2024/04/16
2350
PHP常见函数和过滤函数的深入探究
32 位系统最大带符号的 integer 范围是 -2147483648 到 2147483647。举例,在这样的系统上, intval(‘1000000000000’) 会返回 2147483647。64 位系统上,最大带符号的 integer 值是 9223372036854775807。
V站CEO-西顾
2018/06/25
3K3
WriteUp分享 | CTF-web
题目 各种绕过哦 TXT? 文件上传测试 本地包含 考细心 正则? PHP很烦人? 一道签到题 抽抽奖 never give up I have a jpg,i upload a txt lo
安恒网络空间安全讲武堂
2018/02/06
6.7K0
WriteUp分享 | CTF-web
PHP代码审计要点
随着代码安全的普及,越来越多的开发人员知道了如何防御sqli、xss等与语言无关的漏洞,但是对于和开发语言本身相关的一些漏洞和缺陷却知之甚少,于是这些点也就是我们在Code audit的时候的重点关注点。本文旨在总结一些在PHP代码中经常造成问题的点,也是我们在审计的时候的关注重点。(PS:本文也只是简单的列出问题,至于造成问题的底层原因未做详细解释,有兴趣的看官可以自行GOOGLE或者看看底层C代码。知其然,且知其所以然)
HACK学习
2021/04/09
1.5K0
JDCTF-web writeup
偶然看到的刷一刷 签到题~ 进入题目 既然签到题F12一下 真的发现了,有提示打开那个js 跑一下就有flag了 你知道正则么? 源码审计 <?php highlight_file(__FI
安恒网络空间安全讲武堂
2019/09/29
6660
JDCTF-web writeup
攻防世界刷题笔记 - wuuconix's blog
最近博客好久没更新了。CTFHUB web基础部分刷完很久了,提高部分的题目太难了,而且量也少。看了一眼阮行止学长提供的刷题顺序。打算开始做攻防世界。攻防世界在很久以前刚接触CTF的时候做了一些题目。当时每道题几乎都是看的wp,基础知识太薄弱了。现在做应该会好些。
wuuconix
2023/03/16
4930
攻防世界刷题笔记 - wuuconix's blog
【愚公系列】2021年12月 攻防世界-简单题-WEB-007(simple_php)
文章目录 一、simple_php 二、使用步骤 1.点击获取在线场景 2.源码分析 总结 ---- 一、simple_php 题目链接:https://adworld.xctf.org.cn/tas
愚公搬代码
2021/12/27
4050
【愚公系列】2021年12月 攻防世界-简单题-WEB-007(simple_php)
CVE-2020-8813:Cacti v1.2.8 中经过身份验证的RCE漏洞分析
Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。Cacti通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善。界面友好。软件 Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量跟系统资讯监控外,Cacti 也可外挂 Scripts 及加上 Templates 来作出各式各样的监控图。
FB客服
2020/03/16
1.6K0
CVE-2020-8813:Cacti v1.2.8 中经过身份验证的RCE漏洞分析
Bugku Web 部分WP
1.web2 听说聪明的人都能找到答案 http://123.206.87.240:8002/web2/ CTRL + u 查看源代码 2.计算器 http://12
wywwzjj
2023/05/09
6120
江苏工匠杯 easyphp
a只有这一小段戏码。intval(a)将a转化成整数然后要满足大于6000000同时长度小于等于3。怎么办?可以想到使用科学计数法。
Andromeda
2022/10/27
1.7K0
江苏工匠杯 easyphp
PHP漏洞函数总结
1.MD5 compare漏洞 PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。 常见的payload有 0x01 md5(str) QNKCDZO 240610708 s878926199a s155964671a s214587387a s214587387a sha1(str) sha1('aaroZmOk') sha1('aaK1ST
企鹅号小编
2018/02/02
2K0
[极客大挑战 2019]BuyFlag 1(两种解法)
传参并使用burpsuite进行抓包 password=404a&money=100000000
用户8909609
2023/11/11
1.6K1
[极客大挑战 2019]BuyFlag 1(两种解法)
74CMS后台RCE分析
当笔者第一次看到这个漏洞时,感觉这个漏洞挺鸡肋的,因为需要登录后台管理账户才可以实现RCE,但后期发现这个漏洞的思路挺不错,该漏洞从一个简简单单的网站域名设置到写入恶意代码到url文件,之后再到访问url文件导致恶意代码被执行,最后实现getshell,整个漏洞挖掘思路很是别出心裁,同时也算是给自己了一个警醒——"小功能点"不容小视,下面对该漏洞进行一个简易分析
Al1ex
2021/07/21
2K0
74CMS后台RCE分析
南邮CTF - Writeup
QNKCDZO的md5(32)加密后:0e830400451993494058024219903391
Mirror王宇阳
2020/11/13
1.9K0
南邮CTF - Writeup
PHP46 个非常有用的代码片段
在编写代码的时候有个神奇的工具总是好的!下面这里收集了 40+ PHP 代码片段,可以帮助你开发 PHP 项目。
用户7657330
2020/08/14
1.5K0
X-NUCA2018线上赛 Writeup
据说变成了PWN专场,不过在CRYPTO大佬和RE大佬的发挥下,最后拿到密码三血排名12,拿到决赛的入场券,希望我队的pwn师傅能早日成长起来。
安恒网络空间安全讲武堂
2018/12/24
1.1K0
相关推荐
[PHP] PHP调用IMAP协议读取邮件类库
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档