bugku 十六进制与数字比较

  • 时间:
  • 来源:互联网
<?php
error_reporting(0);
function noother_says_correct($temp)
{
$flag = 'flag{test}';
$one = ord('1'); //ord — 返回字符的 ASCII 码值
$nine = ord('9'); //ord — 返回字符的 ASCII 码值
$number = '3735929054';
// Check all the input characters!
for ($i = 0; $i < strlen($number); $i++)
{
// Disallow all the digits!
$digit = ord($temp{$i});
if ( ($digit >= $one) && ($digit <= $nine) )
{
// Aha, digit not allowed!
return "flase";
}
}
if($number == $temp)
return $flag;
}
$temp = $_GET['password'];
echo noother_says_correct($temp);
?>

看下代码的大致意思

函数要求变量$temp不能存在1~9之间的数字,

最后,又要求$temp=3735929054;

这本来是自相矛盾的,但php在转码时会把16进制转化为十进制.

那么在线转换试试

于是把3735929054转换成16进制为deadc0de

前面加上 0x

?password=0xdeadc0de

flag{Bugku-admin-ctfdaimash}

本文链接http://element-ui.cn/news/show-670646.aspx