欢迎光临
我们一直在努力

攻防世界-Warmup-胎教版wp

前言

  • 考点:PHP代码审计,白名单绕过,路径遍历目录跳转

解题步骤

  • 1.进入靶场,是一张滑稽的照片,我们查看源码,源码注释中存在一个文件 source.php文件,我们对其进行访问,发现一段php代码,进行代码审计
  • 2.首先其定义了一个类emmm,我们分段看这个类中的内容 在这里插入图片描述 定义了一个公共的静态方法checkFile,static表示这个函数可以通过类名直接调用,无需进行实例化,&表示按引用传递参数,意味着在方法内部对 $page 的修改会影响到方法外部的变量;定义了一个关联数组$whitelist作为白名单,里面指定了允许包含的文件 在这里插入图片描述 检查变量$page是否为空和$page是否为字符串,如果不是则输出“you can’t see it”,并且返回false; 在这里插入图片描述in_array()函数用于检查$page是否在数组$whitelist中,如果是,返回true 在这里插入图片描述 给出$page的识别方法,mb_substr是多字节的安全的字符串截取函数,这里的作用是截取$page中从开头(位置0),到第一个?字符之前的部分 。mb_strpos($page . ‘?’,’?’) 是先给$page后拼接一个?,然后找到第一个?,截取两个?之间的字符,赋值给$page 在这里插入图片描述 再次判断$page的值是否在白名单内 在这里插入图片描述 对$page进行URL解码,再次使用mb_substr()和mb_strpos()进行字符串截取和拼接,赋值给$_page 在这里插入图片描述 再次对$page进行判断 在这里插入图片描述 文件包含逻辑:判断条件有三个,通过&&连接,即同时满足,第一个条件,满足file为非空,即存在名为file的请求且它的值不是空的($_REQUSE是PHP中的超全局变量,用于获取通过GET,POST传递的参数);第二个条件,判断file是否为字符串类型;第三个条件,调用上面emmm定义的静态方法checkFile,并将$_REQUST[‘file’]作为参数传入,检验file参数是否满足白名单规则; 如果满足以上三个条件,则对file的参数进行文件包含,如file=source.php,则对source.php进行包含并执行
  • 3.我们构造payload,首先保证file可以绕过白名单检测,我们令file=source.php或file=hint.php,然后根据第一个?截取条件,对?进行两次URL编码,结果为%253f,接下来我们插入我们想要包含且执行的文件ffffllllaaaagggg(在之前访问了hint.php,里面告诉我们flag在ffffllllaaaagggg中)
  • 4.最终payload为file=source.php%253f /../../../../ffffllllaaaagggg,传参运行得到flag

补充:

../../../../起到路径遍历作用,../表示向上一级目录(即返回上一级文件夹),../../../../表示连续四次向上跳转目录,这种语法通常用来路径遍历,在一些场景下可以用来访问上级目录中的文件,如../../../../ffffllllaaaagggg即表示跳转到存储ffffllllaaaagggg文件的目录来读取该文件(可以从1个../开始尝试,逐渐累加,直至访问成功)

赞(0)
未经允许不得转载:171主机测评 » 攻防世界-Warmup-胎教版wp
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址