暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

20 十六进制与数字比较

digo8wx安全 2021-01-29
497

源码:

 

<?php

 

error_reporting(0);

functionnoother_says_correct($temp)

{

$flag='flag{test}';

$one=ord('1');//ord—返回字符的ASCII码值

$nine=ord('9');//ord—返回字符的ASCII码值

$number='3735929054';

//Checkalltheinputcharacters!

for($i=0;$i<strlen($number);$i++)

{

//Disallowallthedigits!

$digit=ord($temp{$i});

if(($digit>=$one)&&($digit<=$nine))

{

//Aha,digitnotallowed!

return"flase";

}

}

if($number==$temp)

return$flag;

}

$temp=$_GET['password'];

echonoother_says_correct($temp);

 

?>

 

函数释义:

ord()函数返回字符串的首个字符的 ASCII 值。

代码分析:

获取flag条件

 

if($number==$temp)

 

$number='3735929054';

 

$temp=$_GET['password'];

 

temp不允许输入1-9的数字

 

计算机中进制可以用来比较,0x开头表示16进制,将3735929054转换为16进制为deadc0de

使用如下语句进行进制转换:

echo  dechex(3735929054);

 

 

解题过程:

 

直接输入3735929054进行尝试,发现不可以获取到flag值

http://localhost:63342/php_bugs-master/20%20%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E4%B8%8E%E6%95%B0%E5%AD%97%E6%AF%94%E8%BE%83.php?password=3735929054

 

password为0时无法获取到flag值:

http://localhost:63342/php_bugs-master/20%20%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E4%B8%8E%E6%95%B0%E5%AD%97%E6%AF%94%E8%BE%83.php?password=0

 

 

password为1时无法获取到flag值:

 

http://localhost:63342/php_bugs-master/20%20%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E4%B8%8E%E6%95%B0%E5%AD%97%E6%AF%94%E8%BE%83.php?password=1

 

 

 

成功获取到flag值:

http://localhost:63342/php_bugs-master/20%20%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E4%B8%8E%E6%95%B0%E5%AD%97%E6%AF%94%E8%BE%83.php?password=0xdeadc0de

 

 

 


 

 

 

参考链接:

https://github.com/bowu678/php_bugs

 

 


文章转载自digo8wx安全,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论