PHP2 (urldecode函数引起的问题)

进入链接后,啥都没有。只有一句话

毕竟题目使PHP2,我尝试用御剑扫了一下

扫到了index.phps

<?php
if("admin"===$_GET[id]) {
  echo("<p>not allowed!</p>");
  exit();
}

$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
  echo "<p>Access granted!</p>";
  echo "<p>Key: xxxxxxx </p>";
}
?>

Can you anthenticate to this website?

代码审计一波

第一个绕过是,传入的id值不能等于admin

第二个弱类型判断是否等于admin

中间有个urldecode    --->>>>>这个可以帮助我们绕过

payload:   ?id=%2561dmin

把a编码两次,在传入

 

(浏览器会对请求的URL中非ASCII码字符进行编码。这里不是指对整个URL进行编码,而是仅仅对非ASCII码字符部分进行编码,并且是编码为16进制带%)

原理:服务器会自动解码一次,然后php中urldecode也会解码一次,呢么利用这个urldecode后再进行第二个判断,呢么第一个判断中式中的id参数值为%61dmin当然与admin 不同了

中间讲过urldecode函数后,解码为再解码admin

 

posted @ 2019-05-10 22:57  yunying  阅读(768)  评论(0)    收藏  举报