校赛ezzzz_web(intval特性利用)

校赛ezzzz_web(intval特性利用)_第1张图片

首先 是一个大的if判断,意思是以2023开头GUETSEC结尾的字符串才可以返回true

到里面的两个小if

if1就是单纯的判断guet的哈希值是什么,提示已经说了长度为14,已经知道了11个位,剩下3个就明显是要爆破了

使用工具hashcat

hashcat -a 3  --force a26f719b36e667992b03a298ad18b1c7 2023?a?a?aGUETSEC -m 0

 -a 3是用攻击模式的掩码爆破

--force是忽略警告

?a?a?a是指3个所有可见字符

-m是使用的md5爆破方式

具体可以参考:Hashcat 学习记录 | 国光 (sqlsec.com)

校赛ezzzz_web(intval特性利用)_第2张图片

 得到guet的值位:2023webGUETSEC

校赛ezzzz_web(intval特性利用)_第3张图片 得到flag当前的md5值

第二个if

先了解inval()函数 — 获取变量的整数值

inval(var,base)

var:必选,表示要转化的输入值

base:非必选,转化所用的进制不填就任具体数值判断

 该函数在获取的整数上有几个特性:

  1. 0x开头的数字会被当成16进制去转化
  2. 0开头的数值被当成8进制去转化
  3. 当var为被单引号引起来的数值时,如果数值中有字符,则只会转化字符前的数值 
  4. 当数值是含有小数点时会直接舍弃小数点
  5. 科学计数法e 在e的左边为数值,e的右边表示10^n次方
  6. 数组判定 当数组为空时返回false(即0);非空时返回1

 由上面的特性可以知道:

要想满足guet在逆序后的intval值还是相等的很大可能是构造成0了

 从正向来看2023GUETSEC的intval值为2023但逆序后值就为0了

要想让原值也为0就必须利用科学计数法使得2023变为0.2023这样舍弃小数点后就是0就可以相等了

校赛ezzzz_web(intval特性利用)_第4张图片

 知道了flag的长度和md5值

就可以使用hash扩展攻击得到最终的payload

你可能感兴趣的:(ctf,web,php)