Moctf Web

php黑魔法

emmm传送门只有下图,
在这里插入图片描述
查看源代码,也没有发现什么,于是,查看一下http://119.23.73.3:5001/web5/index.php,还是什么都没有,大佬提示访问http://119.23.73.3:5001/web5/index.php~,然后查看源代码,
在这里插入图片描述大致意思是参数a,b的md5值相等,但a不等于b,就可以输出flag。
两种方法:
1.构造数组,md5加密遇到数组时都返回false,于是相等,但值并不相等。?a[]=1&b[]=2
2.md5加密后0e开头的都相等,例如:240610708 和 QNKCDZO。 ?a=240610708&b=QNKCDZO

unset

题目一开始就放了源码,
在这里插入图片描述
仔细审计一下,首先,waf函数是要求传入的键名中不能有flag字符。之后,就是一个不容易看懂的循环了,
在这里插入图片描述
大致意思是,把_POST,_GET,_COOKIE依次传给$ _R,如果$ $ _R有数据(_POST,_GET)传数据过来了,就执行下一步循环。可是, $ _R怎么变成了$ $_R了呢?
$ $ _R实际上是 $ _R值的值,打个比方,有a=>b; b=>c;那么我 $ $a 就是是取出a的值的值,也就是说取出c。
之后我们进入下一个foreach, $__K为键名, $__V为值。如果键名作为变量所对应的值与 $ $__R的值相等,则unset掉 $ $__K。这里unset经过我查资料理解为就是把这个值在程序中所对应的内存清除掉。简单来说就是销毁了他,他就不存在了。
接着往下,这一段的意思是如果对应的值存在,那么满足if进入waf函数。
在这里插入图片描述
extract函数的功能是从数组中将变量导入到当前的符号表,举个例子:

<?php
/* 假定 $var_array 是 wddx_deserialize 返回的数组*/
$size = "large";
$var_array = array("color" => "blue",
                   "size"  => "medium",
                   "shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");

echo "$color, $size, $shape, $wddx_size\n";
//输出blue, large, sphere, medium
?>

而EXTR_SKIP意思是如果前面存在了此键名,那么我不会覆盖掉前面的。
在这里插入图片描述
wtcl不得不看大佬的wp了,这道题我们的目的是要读取flag.php这个页面的内容,而如果我们不绕过waf,那么我们是不能读取的。
所以我们要通过POST一个特殊的内容来达到绕过的目的。根据代码的逻辑,我们发现如果我们提前把_GET的内容给unset掉,之后顺便的通过waf,然后再通过extract函数给还原回来是不是就达到我们的目的了???
实现
题目需要我们传入三个值,分别为flag,daiker和file,其中file是需要对waf进行绕过的,这里到了解决问题的关键,我们传入http://119.23.73.3:5101/?flag=s878926199a&daiker=s155964671a&file=php://filter/read=convert.base64-encode/resource=flag.php
其中flag和daiker不能相同,但flag和daiker的md5值需要相等,注意到判断md5值时使用了==的方式,可以利用php的弱类型判断。file利用php://filter伪协议进行读取。
然后,我们还需要post一系列数据,payload:_GET[flag]=s878926199a&_GET[daiker]=s155964671a&_GET[file]=php://filter/read=convert.base64-encode/resource=flag.php。此时我们对情况进行分析在进行_POST的foreach时,_k的值为_GET[flag],其值的值为我们在url中get进去的flag的值,这与我们post进去的值相同。unset()起作用,_GET[flag]的值消失,waf失效。
页面最底下出现一串base64编码PD9waHAKJGZsYWcgPSAnbW9jdGZ7ZTIxODFiNW8xNGE2NzE1OWNjMjNvYzhmZW9kNmM1YjZ9JzsKCgo=,解码一下,得到moctf{e2181b5o14a67159cc23oc8feod6c5b6}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值