freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CTFWP(小明的电脑)
2023-12-28 14:05:06

0x00 题目概述

  • 题目名称:小明的电脑

  • 题目类型:misc

  • 难度系数:中等

  • 题目附件:小明的电脑

0x01 题目考点

  • 镜像取证

  • 010 editor的使用及文件头的判断

  • PHP Opcache欺骗

  • Steganography

  • 坐标与图片转换

  • 曼彻斯特编码

0x02 解题工具

  • volatity(https://www.volatilityfoundation.org/releases)

  • PHPstudy2018(http://public.xp.cn/upgrades/PhpStudy2018.zip)

  • zsteg(kali中安装命令gem install zsteg)

0x03 解题过程

  1. 解压题目附件得到两个文件,其中一个是镜像文件,所以使用Volatility进行分析
    image

  2. 可以发现是一个XP的镜像,然后我们可以使用filescan将所有文件信息导出
    image

  3. 可以发现桌面存在一个叫secret.png的图片,同时也发现存在一个叫hint.php的文件,分别将其导出。
    image

  4. 另外一个文件fl4g通过010 editor打开我们可以发现是一个压缩包的倒置我们将其倒置回来之后解压只有得到f14g这个文件。进行分析可以发现该文件是一个opache文件。
    image

    #倒置脚本
    with open("fl4g", "rb") as f:
        s1 = f.read()
        s2 = s1[::-1]
    with open("fl4g.zip", "wb") as f:
        s3 = f.write(s2)
    

    image

  5. 查看PHP官方对Opcache的定义,他是将PHP代码编译成字节码进行的缓存。
    这里粗浅的理解为,当访问的php文件存在opcache缓存时,直接加载缓存,可以利用欺骗PHP运行这个opcache查看输出结果。
    配置opcacheopcache默认情况下不能脱离源码直接运行,默认会验证文件的时间戳,对缓存文件进行一致性检查,如果原始文件不存在或发生了改动,opcache也会重新编译或者直接出错。我们可以通过下面选项开启opcache缓存,选择目录并关闭时间戳和一致性的检查:

    //php.ini中修改(注意需要将开头注释";"删除)
        zend_extension=C:/phpStudy/PHPTutorial/php/php-7.0.12-nts/ext/php_opcache.dll
    
        opcache.enable=1
    
        opcache.validate_timestamps=0
    
        opcache.file_cache=C:\phpStudy\PHPTutorial\WWW\
    
        opcache.file_cache_consistency_checks = 0
    
  6. PHP Opcache欺骗,PHP的版本等必须一致,我们从opcache内容可以知道是phpstudy,同时hint.php文件里面也提示是PHPstudy2018,我们下载PHPstudy2018进行逐个版本配置Opcache配置,并根据上文进行配置。访问index.php发现在WWW目录下生成了一个文件夹,文件夹最深处生成了index.php.bin文件,将f14g文件重命名为flag.php.bin存放在与index.php.bin相同目录
    image

  7. 访问flag.php,发现一段base64编码字符串
    image

  8. base64解码并报存为文件发现是一个7z压缩包
    脚本如下

    import base64
    
    def main():
        with open("7z.txt", encoding='utf-8') as f:
            content = base64.b64decode(f.read())
            print(content)
        with open("7z.7z", "wb") as f:
            hex = f.write(content)
    
    if __name__ == "__main__":
        main()
    

    image

  9. 这个压缩包需要密码才能解锁,提取出来的secret.png图片可能隐写了密码,利用工具zsteg能够提取出密文password:b651b102
    image

  10. 使用密码能够提取出来许多文件,打开里面是坐标文件,使用脚本将坐标还原为图片
    脚本如下
    image

  11. 发现是一组数字信号,观察第一张图的值是1100110将其转换为十进制发现为102,其对应的AIISC码为f。全部42张图如此,得到flag{b2359a14-0567-11ec-80ba-00163e0620b4}
    image

# CTF # 内存取证 # OPcache # 隐写 # python脚本
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录