题目地址:http://ctf5.shiyanbar.com/web/PHP/index.php

抓包在header中发现提示

访问得到源码

 <?php

 $info = "";
$req = [];
$flag="xxxxxxxxxx"; ini_set("display_error", false);
error_reporting(0); if(!isset($_POST['number'])){
header("hint:6c525af4059b4fe7d8c33a.txt"); die("have a fun!!");
} foreach([$_POST] as $global_var) {
foreach($global_var as $key => $value) {
$value = trim($value);
is_string($value) && $req[$key] = addslashes($value);
}
} 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;
} if(is_numeric($_REQUEST['number'])){ $info="sorry, you cann't input a number!"; }elseif($req['number']!=strval(intval($req['number']))){ $info = "number must be equal to it's integer!! "; }else{ $value1 = intval($req["number"]);
$value2 = intval(strrev($req["number"])); if($value1!=$value2){
$info="no, this is not a palindrome number!";
}else{ if(is_palindrome_number($req["number"])){
$info = "nice! {$value1} is a palindrome number!";
}else{
$info=$flag;
}
} } echo $info;

通读源码,总结出flag需要以下条件

1.POST提交一个number值

2.number不能提交纯数字,包括16进制(0x22aa)和科学计数法形式(2e11)

(   if(is_numeric($_REQUEST['number']))   )

3.对number取整再转化为字符串后要和原提交的字符串相等

(   $req['number']   要等于  strval(intval($req['number'])    )

4.对number取整要等于 对number逆序 后取整的值

(   $value1 = intval($req["number"]);    要等于   $value2 = intval(strrev($req["number"]));   )

5.原number字符串不能是回文数

if(is_palindrome_number($req["number"])){
   $info = "nice! {$value1} is a palindrome number!";
}else{
  $info=$flag;
}
 
回文就是正序和逆序的字符串相等
不是回文,$info才会等于$flag;,后面会输出$info。
 
 
2,3似乎矛盾,但可以用00字节绕过,对123\00取整后是123,而把 "123\00" 和 "123" 比较的话,两者会相等。
 
4,5看起来也是矛盾的,但是intval()函数有最大值的,不同系统下不同,我在本地测试范围是-2147483648 到 2147483647,所以intval(999999999999)=2147483647,那么以下等式成立:intval(2147483647)=intval(7463847412)=2147483647,而7463847412便是2147483647的逆序文本,而且2147483647不是回文数。
 
综上,

实验吧——你真的会PHP吗?(intval范围 php中\00的利用)的更多相关文章

  1. 实验吧--web--你真的会php吗

    ---恢复内容开始--- 实验吧的一道题php审计题.拉下来写一写. http://ctf5.shiyanbar.com/web/PHP/index.php 打开之后说have fun 那就抓包来看看 ...

  2. CTF-代码审计(3)..实验吧——你真的会PHP吗

    连接:http://ctf5.shiyanbar.com/web/PHP/index.php 根据题目应该就是代码审计得题,进去就是 日常工具扫一下,御剑和dirsearch.py 无果 抓包,发现返 ...

  3. 20145233韩昊辰 《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)

    20145233 <Java程序设计>实验报告一:Java开发环境的熟悉 实验要求 使用JDK编译.运行简单的Java程序: 使用IDEA 编辑.编译.运行.调试Java程序. 实验内容 ...

  4. 20145207《Java程序设计》实验四( Android程序设计)实验报告

    <Java 程序设计>实验四( Android程序设计)实验报告 目录 改变 Android开发基础实验要求 实验成果 课后思考 改变 修改了之前仅仅是贴了图片,连代码都没粘的状态.增加了 ...

  5. 20172329 2018-2019-2 《Java软件结构与数据结构》实验二报告

    20172329 2018-2019-2 <Java软件结构与数据结构>实验二报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 王文彬 学号:2017232 ...

  6. 20184302 2019-2020-2 《Python程序设计》实验四报告

    20184302 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1843 姓名: 李新锐 学号:184302 实验教师:王 ...

  7. 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...

  8. 动手学TCP——CS144实验感想

    在Stanford CS144的课程实验Lab0~Lab4中,我们动手实现了一个自己的TCP协议,并且能够真的与互联网通信!此外,感谢Stanford开源本实验并提供了大量的优质测试用例,使得我们仅仅 ...

  9. Android中Activity的四大启动模式实验简述

    作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握.今天我们就来通过实验演示,来帮助大家理解Activ ...

随机推荐

  1. c# 第9节 数据类型之引用类型

    本节内容: 1:数据类型之引用类型 2:字符串要注意的两点: 1:数据类型之引用类型 实例: 2:字符串要注意的两点: 对变量进行重新赋值:其原本的字符串并没有销毁

  2. day22_7.26面向对象之封装(接口与抽象)

    一.封装. 封装就是将丑陋复杂的隐式的细节隐藏到内部,对外提供简单的使用接口. 对外隐藏内部实现细节,并提供访问的接口.对内使用self操作. 二.为什么要封装? 对于一个计算机来说,不可能不使用机箱 ...

  3. http中get,post,put,delete方法的用法以及区别

    http协议是一种在网络中进行文件传送遵循的协议.一种无状态的协议.http协议服务器端不跟浏览器端建立长久的通信连接. 建立http通信之后,服务端将文件内容传送给浏览器端接收就完成一次请求.当然一 ...

  4. SysML——AI-Sys Spring 2019

    AI-Sys Syllabus Projects Grading AI-Sys Spring 2019 When: Mondays and Wednesdays from 9:30 to 11:00 ...

  5. 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)

    找环 考虑每次洗牌其实是一次置换的过程,而这样必然就会有循环出现. 因此我们直接通过枚举找出每一个循环,询问时只要找到环上对应的位置就可以了. 貌似比我比赛时被卡成\(30\)分的倍增简单多了? 代码 ...

  6. CF932F Escape Through Leaf(DP,斜率优化)

    SB 题. 写出 DP 方程:\(f_i\) 表示从 \(i\) 跳的最小值. \(i\) 是叶子就是 \(0\),否则就是选个子树中的 \(v\),\(f_i=\min(f_v+a_ib_v)\). ...

  7. 说清楚,5G SA和NSA到底有啥区别?

    原文: https://tech.sina.com.cn/5g/i/2019-06-25/doc-ihytcitk7540907.shtml 与4G不同,5G时代有了NSA和SA两个组网选项,这让整个 ...

  8. Elasticsearch由浅入深(七)搜索引擎:_search含义、_multi-index搜索模式、分页搜索以及深分页性能问题、query string search语法以及_all metadata原理

    _search含义 _search查询返回结果数据含义分析 GET _search { , "timed_out": false, "_shards": { , ...

  9. Navicat的安装和pymysql模块的使用

    内容回顾 select distinct 字段1,字段2,... from 表名 where 分组之前的过滤条件 group by 分组条件 having 分组之后过滤条件 order by 排序字段 ...

  10. (98)address already in use: ah00072: make_sock: could not bind to address 0.0.0.0:80

    (98)address already in use: ah00072: make_sock: could not bind to address 0.0.0.0:80 问题描述: 80端口已经被占用 ...