我是靠谱客的博主 阔达黄蜂,最近开发中收集的这篇文章主要介绍ctf php弱类型、松散比较、哈希缺陷、MD5绕过、变量覆盖,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

松散比较

  • 松散比较:==比较时先转数据类型再进行比较
  • 严格比较:=== 比较时先判断两种字符串类型是否相等,再进行比较
    例:
"admin"==0 #ture
"1admin"==1 #ture
"admin1"==1 #false
  • 如果该字符串没有包含’.’ ‘e’ 'E’并且数值在整形范围值内,该字符串被当作int来取值,其他所有情况下被当作float来取值,该字符串的开始部分的值决定了它的值,如果该字符串以合法的数值开始,则使用该字符否则为0(不是字符串的0)。

哈希比较缺陷

  • 如果hash值以0e开头,后面都是数字,再与数字比较时就会被解释为010^n(科学计数法)还是0就会被判断为相等,从而绕过登陆环节。
var_dump(md5(''250610708')==md5('QNKCDZO')) #输出为bool类型true
var_dump('0e12345'=='0e5767')#输出为bool类型true

布尔欺骗

  • 当存在json_decode和unserialize时,部分结构会被解释为bool类型,会造成欺骗

数字转换欺骗

var_dump(intval('2'))#输出为int(2)
var_dump(intval('3bc'))#输出为int(3)
var_dump(intval('abcd'))#输出为int(0)
#intval()用于获取变量的整数值
var_dump(0.9999999999999999999==1)#输出为true

boolean strcmp(str1,str2)

  • str1,str2是两个字符串,如果str1小于str2返回<0的数,如果str1大于str2,返回>0的数,两者相等的话返回0
  • 缺陷字符串与array()数组比较,返回0
var_dump(strcmp('passwd',a[]))#true

md5()函数

  • md5()函数描述的是string md5(string $str[,bool $raw_outpuy=fake])
  • md5()中需要的是一个string函数,但是当你传一个array()数组时,md5不会报错,只是无法求出array的md5值,这样会导致任意两个array的md5值都会相等
var_dump(md5([1,2,3])==md5([4,5,6]))#ture

switch()函数

  • switch()其中()内的值会被弱类型转换

is_numeric()函数

  • ()内的值会被弱类型转换
$id='0x3120616e6420313d31'//hex(1 and 1=1)
if(is_numeric($id))
{
	$sql='select * from admin and where id = $id;//会以十六进制形式执行
	echo $sql
}

in_array()函数

  • 与array_search()相同
  • in_array()函数的解析是bool in_array(mixed $needle,array $haystack [,bool $strict=false]
  • 如果是$strict参数没有提供,那么in_array就会使用松散比较来判断$needle是否存在$haystack中
  • 当strict的值为true时,in_array()会比较needle的类型haystack是否相同

empty(var)函数

  • 当var存在,并且时非空非零的值时返回false,否则返回true
  • isset()函数相同
//下列会被认为为空
" "#空字符串
0#整数零
0.0#浮点数零
"0"#字符串的零
NULL#空
FALSE#
array()#空数组
$var#未赋值的变量

变量覆盖

  1. $$变量覆盖
  2. extract()函数
    该函数使用数组键名作为变量名,使用数组的键值作为变量值
    针对数组的每一个元素,将在当前符号表中创建一个对应的变量
    extract(array,extract_rules,prefix)
    extract flags标记位,默认存在变量覆盖漏洞
<?php
show_source(__FILE__);
$key = "bad";
extract($_POST);
if($key === 'bad'){
    die('badbad!!!');
}
$act = @$_GET['act'];
$arg = @$_GET['arg'];
if(preg_match('/^[a-z0-9_]*$/isD',$act)) {
    echo 'check';
} else {
    $act($arg,'');
}

echo '666';

最后

以上就是阔达黄蜂为你收集整理的ctf php弱类型、松散比较、哈希缺陷、MD5绕过、变量覆盖的全部内容,希望文章能够帮你解决ctf php弱类型、松散比较、哈希缺陷、MD5绕过、变量覆盖所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部