php writeup,writeup---你真的会PHP吗?

实验吧的一道题php审计题.

http://ctf5.shiyanbar.com/web/PHP/index.php

36eed10f1862d592382a2cddec0bae12.png

抓包发现:hint:......txt

b5b01c1b5488a45970bc186df5c7f3b7.png

是这样的,根据response反馈的信息,我们可以看见 hint(提示)

那就打开它看看吧

d76f2c67d1b522f19d4cc0fccd23c2fa.png

代码审计

//条件1:判断是否为数值型

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

$info="sorry, you cann't input a number!";

}elseif($req['number']!=strval(intval($req['number']))){ //条件二:判断intval(number)是否等于原来number的值

$info = "number must be equal to it's integer!! ";

}else{

$value1 = intval($req["number"]);

$value2 = intval(strrev($req["number"]));

if($value1!=$value2){ //条件三:判断翻转后number的值是否相等

$info="no, this is not a palindrome number!";

}else{

if(is_palindrome_number($req["number"])){ //条件四,判断number是否为回文字符串

$info = "nice! {$value1} is a palindrome number!";

}else{

$info=$flag;

}

}

}

echo $info;

分析:

number 不能是数字

number2 = trim(number)

intval(number2) = number2

intval(number2) = intval(strrev(number2))

trim(number) 不是回文

解:

第一个条件(1):很好解决,末尾加一个空白字符

第二个条件(3):只要是一个在表示范围内的数字字符串都行

第三,第四个条件(4,5):正常思维下,是相互矛盾,不能共存的,

但是我们可以利intval(string)函数特点------当string太大,或者格式错误(不是数字串)时返回  0

+   数字 有正数负数, 正数翻转后还是数,负数(-12)翻转后(12-)就不是一个数了, + intval(-0) = 0

所以 构造字符串 ‘-0      ‘ 就可以满足所有条件了

b6ae7d4df66275e8cee1a3f6f032d379.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值