zoukankan      html  css  js  c++  java
  • 刷题[HCTF 2018]WarmUp

    解题思路

    进入页面之后,一个大大的滑稽。

    查看源码

    查看源码发现有source.php 。打开

    发现还有一个hint.php。打开发现

    由此可知是代码审计了

    解题

    代码审计


    先看此段代码,大致意思是。如果提交过来的file不是空的,并且是字符串,经过了emmm类中,checkFile函数的过滤。那么就执行包含文件。由此可知可能存在文件包含,目录穿越的漏洞。而要包含的就是ffffllllaaaagggg。
    现在看如何绕过过滤

    主要看这段代码,这段代码的意思是
    获取传入的参数位数,然后截取前该位数的字符。
    举个例子,传入参数是flag.php,首先经过mb_strpos获取位数,为8.然后经过mb_substr截取flag.php的前八位,也就是flag.php。
    然后需要该参数在白名单里,也就是截取第一个?后的值为hint.php或source.php
    然后经过url解码后再进行一次过滤,如果最后返回真,即可包含文件

    文件包含

    payload:?file=source.php%253F../../../../../ffffllllaaaagggg

    确保url解码后能通过白名单。浏览器会解码一次,所以?二次编码,%253F,这里是php的一个特性:

    ?两次编码可以实现跨目录,#二次编码也可以

    $page经过两次解码 $_page=source.php?../../../../../ffffllllaaaagggg
    经过函数截取?前的内容,source.phph可通过白名单检验,然后通过此include $_REQUEST['file']
    实现文件包含,因为source.php也被解析为目录,通过目录穿越即可到达,获得flag

    总结思路

    核心思路:

    • 查看源码得知本题考点为代码审计,文件包含,目录穿越
    • 确定获得flag值通过文件包含,本题共有四个可有true返回的条件,构造一个满足的条件即可
    • php将二次编码的?前的内容视为目录

    知识点

    • 代码审计
    • 目录穿越
    • 文件包含
  • 相关阅读:
    ZT:POI操作PPT
    ADO.NET 2.0 Dataset和Datatable 新功能新特性
    ADO.NET 2.0 大批量数据操作和多个动态的结果集
    浏览.NET Framework 2.0 类型库中新增的常用功能
    ASP.NET程序中常用代码汇总(四)
    保存div与页面滚动条的位置
    在ASP.NET中实现AJAX
    ASP.NET 2.0中隐藏listbox的某一项
    泛型最佳实践C#
    ASP.NET 2.0 验证控件新的功能
  • 原文地址:https://www.cnblogs.com/karsa/p/12690020.html
Copyright © 2011-2022 走看看