标签:10 digit 进制 challenge number 字符串 类型 POST true
目录
题目
<?php
require __DIR__.'/flag.php';
if (isset($_POST['answer'])){
$number = $_POST['answer'];
if (noother_says_correct($number)){
echo $flag;
} else {
echo "Sorry";
}
}
function noother_says_correct($number)
{
$one = ord('1'); //49
$nine = ord('9'); //57
# Check all the input characters!
for ($i = 0; $i < strlen($number); $i++)
{
# Disallow all the digits!
$digit = ord($number{$i});
if ( ($digit >= $one) && ($digit <= $nine) )
{
# Aha, digit not allowed!
return false;
}
}
# Allow the magic number ...
return ($number == "3735929054"); //此处原题无括号包裹
}
highlight_file(__FILE__);
?>
分析
if (isset($_POST['answer']))
POST一发answer
if (noother_says_correct($number)){
echo $flag;
打印flag的条件是noother_says_correct函数返回true
function noother_says_correct($number)
{
$one = ord('1'); //49
$nine = ord('9'); //57
# Check all the input characters!
for ($i = 0; $i < strlen($number); $i++)
{
# Disallow all the digits!
$digit = ord($number{$i});
if ( ($digit >= $one) && ($digit <= $nine) )
{
# Aha, digit not allowed!
return false;
}
}
# Allow the magic number ...
return ($number == "3735929054"); //此处原题无括号包裹
}
该函数对POST的字符串每个字符做检测,如果有一个字符的ASCII码在[49,57]内则返回false,即输入的字符串不能含有1-9数字
返回true的条件是POST的字符串与3735929054
等值比较返回true
综合起来后,思路为输入一个不含1-9数字的,与3735929054
等值比较返回true的字符串
可以利用弱类型比较和进制转换,找到这么个字符串
知识点
进制
3735929054
可以转化为不含1-9的16进制即0xdeadc0de
弱类型比较
challenge2做过介绍,不多说
解法
answer=0xdeadc0de
标签:10,digit,进制,challenge,number,字符串,类型,POST,true 来源: https://www.cnblogs.com/Rain99-/p/12653442.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。