• 如果您想对本站表示支持,请随手点击一下广告即可~
  • 本站致力于提供原创、优秀的技术文章~
  • 有任何疑问或建议 均可以在站点右侧栏处 通过各种方式联系站长哦~
  • CTF – RootMe解题报告 [Web-Server : Local File Inclusion – Double encoding]

    渗透测试 EXP 436阅读 0评论

    挑战入口:Root-Me(https://www.root-me.org/en/Challenges/Web-Server/Local-File-Inclusion-Double-encoding)
      分类目录:Link to …(http://exp-blog.com/2019/01/02/pid-2597/12/)

    PHP 的 LFI 漏洞,前置知识参考这篇文章:【Local File Inclusion (LFI) — Web Application Penetration Testing

    这题是 【PHP filters】 的进阶版(未做的建议先做),除了掌握 LFI 之外,还需掌握 双重编码 的知识,相关知识点可查看 这里


    注意到题目有个提示:Find the validation password in the source files of the website.

    翻译过来就是让我们从 源码文件 中找到密码,亦即我们的第一个目标是找到页面源码。


    开启挑战后,发现随着点击 HomeCVContact , 页面 URL 的参数也会随之变化为 index.php?page=homeindex.php?page=cvindex.php?page=contact

    尝试输入不存在的参数值 index.php?page=admin ,从页面提示的 Warning 知道代码使用了 include 特性,而且会自动把输入的参数拼接 .inc.php 后缀作为文件名,再由 include 包含进页面。

    从这种种迹象来看,其实已经满足了 LFI 的条件。

    结合 【PHP filters】 的解题经验,要读取页面源码,可以使用 php://filter 特性。例如要读取 home 页面的源码,可构造这样的 payload :

    index.php?page=php://filter/convert.base64-encode/resource=home

    但是很不幸地,这题应该是对某些字符做了过滤,马上就提示检测到攻击:Attack detected.

    尝试多次发现,在 index.php?page= 后面的内容如果有 ./ 就会触发 Attack detected. ,看样子应该是防止路径穿越。

    于是尝试对 ./ 进行 URL 编码,看看能不能绕过,即重新构造 payload :

    index.php?page=php:%2f%2ffilter%2fconvert%2ebase64-encode%2fresource=home

    但依然会触发 Attack detected.

    此时联想到题目的提示 双重编码,亦即对 ./ 字符进行两次 URL 编码处理(其实第二次编码是针对字符 %) ,于是有这样的编码表:

    原字符 一次 URL 编码 二次 URL 编码
    . %2e %252e
    / %2f %252f

    由此得到新的 payload 如下:

    php:%252f%252ffilter%252fconvert%252ebase64-encode%252fresource=home

    成功绕过检测,得到 Base64 编码后的页面源码。

    解码后得到页面源码:

    虽然 home 的页面源码并无写入了密码,但从第一行的 <?php include("conf.inc.php"); ?> 知道存在一个 conf.inc.php 配置文件,猜测密码很可能就在其中。

    为了读取 conf.inc.php 的源码,可以构造这样的 payload :

    index.php?page=php://filter/convert.base64-encode/resource=conf.inc.php

    但从前面的测试已经知道,代码会自动添加后缀,因此去掉 .inc.php

    index.php?page=php://filter/convert.base64-encode/resource=conf

    最后对其进行双重 URL 编码,得到最终的 payload 为:

    index.php?page=php:%252f%252ffilter%252fconvert%252ebase64-encode%252fresource=conf

    输入 payload 得到 Base64 conf.inc.php 配置文件的编码内容:

    解码后得到真正的源码,其中的 flag 就是密码,完成挑战:


    转载请注明:EXP 技术分享博客 » CTF – RootMe解题报告 [Web-Server : Local File Inclusion – Double encoding]

    喜欢 (1) 分享 (0)
    发表我的评论
    取消评论

    表情

    Hi,您需要填写昵称和邮箱!

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