你真的会PHP吗?
| Note: 1) PHP中的数据类型 
 2) intval()函数所引发的溢出 
 3)is_numeric()函数所引发的SQL注入以及其它问题 
 | 
考点 :PHP源码审计
进去之后发现就一句话,没什么用,抓包发现返回的数据包头部有一个文本文档,访问之后是一段PHP代码
<?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);  //trim() 函数移除字符串两侧的空白字符或其他预定义字符
        is_string($value) && $req[$key] = addslashes($value); //addslashes() 函数在指定的预定义字符前添加反斜杠。这些字符是单引号(')、双引号(")、反斜线(\)与NUL(NULL字符)
} 
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"]);           //intval()函数将字符串转化为数值
     $value2 = intval(strrev($req["number"]));   //strrev()函数反转字符串
     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;
?>PHP代码审计之后,最后打印flag需要$_POST['number']满足以下条件:
1) 不能为空,且不能传递数值型数据
2)该数所反转的整数值应该和它本身的整数值相等
$value1 = intval($req["number"]);           //intval()函数将字符串转化为数值
$value2 = intval(strrev($req["number"]));   //strrev()函数反转字符串
$value1=$value23) 不能是一个回文数
构造$_POST['number']使其满足条件
不能传递回文数据,又让该数所反转的整数值应该和它本身的整数值相等,前后矛盾,
但可以利用intval()函数溢出进行解决问题,$_POST['number']=%002147483647(通过返回的数据包可知是32的操作系统)即可,intval(strrev(2147483647))发生溢出等于2147483647,即$value1=$value2=2147483647
另一种方法,利用科学计数法进行解决问题,$_POST['number']=%000e-0即可,即$value1=$value2=0
你真的会PHP吗?的更多相关文章
- App你真的需要么
		随着智能手机.移动路联网的普及,APP火的一塌糊涂,APP应用可谓五花八门,街上经常看到各种推广:扫码安装送东西,送优惠券.仿佛一夜之间一个企业没有自己的APP就跟不上时代了. 有时我在想:APP,你 ... 
- [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?
		你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ... 
- 你真的会玩SQL吗?之逻辑查询处理阶段
		你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ... 
- SQL Server中SELECT会真的阻塞SELECT吗?
		在SQL Server中,我们知道一个SELECT语句执行过程中只会申请一些意向共享锁(IS) 与共享锁(S), 例如我使用SQL Profile跟踪会话86执行SELECT * FROM dbo.T ... 
- 您真的理解了SQLSERVER的日志链了吗?
		您真的理解了SQLSERVER的日志链了吗? 先感谢宋沄剑给本人指点迷津,还有郭忠辉童鞋今天在QQ群里抛出的问题 这个问题跟宋沄剑讨论了三天,再次感谢宋沄剑 一直以来,SQLSERVER提供了一个非常 ... 
- 你真的会玩SQL吗?和平大使 内连接、外连接
		你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ... 
- 你真的会玩SQL吗?三范式、数据完整性
		你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ... 
- 你真的会玩SQL吗?让人晕头转向的三值逻辑
		你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ... 
- 你真的会玩SQL吗?EXISTS和IN之间的区别
		你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ... 
- 你真的会玩SQL吗?无处不在的子查询
		你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ... 
随机推荐
- hdu1814 Peaceful Commission
			hdu1814 Peaceful Commission 题意:2-sat裸题,打印字典序最小的 我写了三个 染色做法,正解 scc做法,不管字典序 scc做法,错误的字典序贪心 #include &l ... 
- 201771010126 王燕《面向对象程序设计(Java)》第十二周学习总结
			实验十二 图形程序设计 实验时间 2018-11-14 1.实验目的与要求 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: 创建空框架 . 在Java中,常采用框架(Frame) ... 
- SpringBoot+ Mybatis 搭建
			spring boot+mybatis整合 LZ今天自己搭建了下Spring boot+Mybatis,比原来的Spring+SpringMVC+Mybatis简单好多.其实只用Spring bo ... 
- node01
			---恢复内容开始--- 1.node初体验 安装完成node,写好相应的js代码后,在cmd中node 文件名即可完成编译执行过程. 2.尝试使用node搭建一个简单服务器 //引入http模块 c ... 
- Qt5+MSVC2015编译器编译发布的Release程序运行崩溃,如何查找崩溃的原因??
			除了加log信息,还有什么方法?? ==================================2019/4/26============================= 1 常见的c++内 ... 
- AtiveMQ初次连接的  http error:503 连接错误  Prolem accessing /.Reason  : Service Unavailable
			503错误 说明是服务器内部的错误了 这是 为什么嫩 这是因为你的Linux虚拟机(我用的是centos版本的)的机器名 和 你的 ip地址的映射关系 不一致 导致访问失败 查看机器名的地址:ca ... 
- idea远程打断点
			(1)用如下方式启动jar java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=y -jar durati ... 
- 七种经典排序算法及Java实现
			排序算法稳定性表示两个值相同的元素在排序前后是否有位置变化.如果前后位置变化,则排序算法是不稳定的,否则是稳定的.稳定性的定义符合常理,两个值相同的元素无需再次交换位置,交换位置是做了一次无用功. 下 ... 
- Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
			什么是ui-router ui-router是AngularUI库最有用的组件之一(AngularUI库由AngularJS社区构建).它是一个第三方路由框架,允许通过状态机制组织接口,而不是简单的U ... 
- [Swift]LeetCode239. 滑动窗口最大值 | Sliding Window Maximum
			Given an array nums, there is a sliding window of size k which is moving from the very left of the a ... 
