0x01 阅读须知
鸡哥安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
0x02 函数/特性说明
1.ord()函数
返回字符的 ASCII 码值
2.strlen()函数
获取字符串的长度
0x03 数字十六进制绕过1-9的判断
1.当我们传入payload:?password=0xdeadc0de,路由过程如下
代码第1-22行:通过$_GET传入password,再将password的值代理noother_says_correct函数中。该函数首先定义了1和9的ASCII码,再用for遍历循环判断传入的值每一位是否大于1小于9,如果是,则返回flase,不是则判断$number和传入的值是否相等,相等则返回flag。当我们传入的值为0xdeadc0de时,由于0xdeadc0de为3735929054的十六进制编码,而php语言默认在转码时遇到十六进制会转为十进制,所以在php中0xdeadc0de是等于3735929054的(如第二张图),故而pass。DEBUG:$number: "3735929054" $temp: "0xdeadc0de"
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);
原文始发于微信公众号(鲲哥的Bypass之旅):奇淫巧计 数字十六进制绕过1-9的判断
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论