从菜鸡到咸鱼(一)

PHP+代码审计从0到0.1
一道利用$_GET强制类型转换漏洞的题

<?php
show_source(__FILE__);//show_source()函数功能:使得服务端返回括号内指出文件的源码
$flag = "xxxx";//这个就是我们要看的东西啦
if(isset($_GET['time'])){ //isset():指出变量是否存在 $_GET:通过url即地址栏中输入,将参数传给脚本
        if(!is_numeric($_GET['time'])){ //is_numeric():检测变量是否为数字或数字字符串,我们的主人公
                echo 'The time must be number.'; 
        }else if($_GET['time'] < 60 * 60 * 24 * 30 * 2){ 
                        echo 'This time is too short.'; 
        }else if($_GET['time'] > 60 * 60 * 24 * 30 * 3){ 
                        echo 'This time is too long.'; 
        }else{ 
                sleep((int)$_GET['time']); //延迟你输入那么多秒,我们的二号主角
                echo $flag; //目标是把flag输出
        } 
                echo '<hr>'; //输出分隔横线
}
?>

在了解了每个函数的功能后,我们只是知道了要做什么,仍然不能解决任何问题。
作为一个纯纯的小白,经过一段“思考后”可得到:
https://github.com/CHYbeta/Code-Audit-Challenges/blob/master/php/challenge-2.md
即:
is_numeric()支持三种字符串:普通数字型字符串、科学记数法型字符串、部分支持十六进制0x型字符串
然而:
强制类型转换却不能正确转换十六进制型字符串、部分科学计数法型字符串。
所以:
我们可以通过传入十六进制型字符串骗过is_numeric()又不用等很长时间。
在地址栏输入:
http://localhost/1.php/?time=0x76a700
可得到:
这里写图片描述

为避免下次进行类似的“思考”,干脆把PHP中类似漏洞全部了解一遍,地址:
http://blog.csdn.net/qq_31481187/article/details/60968595

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值