【Write up】bugku--科学计数法

一道web题,题目名称叫做:科学计算法,实际考察的是对PHP代码的审计:

【Write up】bugku--科学计数法

打开题目链接,得到如下代码:

【Write up】bugku--科学计数法

接下来就是代码审计了,根据关键字flag,可以看到关键代码是在if语句里面,按顺序看吧,首先,要进入if($forgive==="green")而不进入else语句的话,就要满足条件:变量forgive值为green,而forgive值是由cookie获得:

【Write up】bugku--科学计数法

因此,增加名为cookie key=green

【Write up】bugku--科学计数法

根据response的内容可知,程序已经进入if($forgive==="green")内部:

【Write up】bugku--科学计数法

接下来,要实现的目标是,打印出flag,根据代码,需要满足条件: $forgive等于"GETFLAG"且$tmp不等于$txt,才能进入输出flag的语句,那么就和前面要求forgive值为green出现了矛盾,再看代码:

【Write up】bugku--科学计数法

可以通过POST重新获取变量的值,那么我们采用post方法重新获取forgive的值即可

【Write up】bugku--科学计数法

这样就进入了输出flag所在的else语句,输出了little:

【Write up】bugku--科学计数法

要想输出flag,就必须满足条件:

【Write up】bugku--科学计数法

那么继续往前看,txt变量值为已知固定值:

【Write up】bugku--科学计数法

即s1665632922a

【Write up】bugku--科学计数法

$pmt=md5($txt)=md5(s1665632922a)=0e731198061491163073197128363787

根据md5以哈希值做比较,那么只需要md5($tmp)=0e***,根据题目提示科学计算法也可知道。这里可以参考前面的文章:

继续看前面,tmp值等于forgive的值:

【Write up】bugku--科学计数法

既然,前面可以通过post重新修改forgive的值,同样道理,可以直接修改tmp值,为 QNKCDZO,这样就可以获取flag

【Write up】bugku--科学计数法

总结:本题考查PHP代码审计,及md5值比较,所以代码是基础,基础知识要牢固,在最后一步憋了很久,开始没想起既然可以直接修改forgive,同样可以修改tmp,经验不足,还要继续积累呀。

 

更多精彩内容欢迎关注微信公众号:红蓝攻防

可直接扫描二维关注

【Write up】bugku--科学计数法