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 解题过程
解压题目附件得到两个文件,其中一个是镜像文件,所以使用
Volatility
进行分析可以发现是一个
XP
的镜像,然后我们可以使用filescan
将所有文件信息导出可以发现桌面存在一个叫
secret.png
的图片,同时也发现存在一个叫hint.php
的文件,分别将其导出。另外一个文件
fl4
g通过010 editor
打开我们可以发现是一个压缩包的倒置我们将其倒置回来之后解压只有得到f14g
这个文件。进行分析可以发现该文件是一个opache
文件。#倒置脚本 with open("fl4g", "rb") as f: s1 = f.read() s2 = s1[::-1] with open("fl4g.zip", "wb") as f: s3 = f.write(s2)
查看
PHP
官方对Opcache
的定义,他是将PHP
代码编译成字节码进行的缓存。
这里粗浅的理解为,当访问的php
文件存在opcache
缓存时,直接加载缓存,可以利用欺骗PHP运行这个opcache
查看输出结果。
配置opcache
,opcache
默认情况下不能脱离源码直接运行,默认会验证文件的时间戳,对缓存文件进行一致性检查,如果原始文件不存在或发生了改动,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
PHP Opcache
欺骗,PHP
的版本等必须一致,我们从opcache
内容可以知道是phpstudy
,同时hint.php
文件里面也提示是PHPstudy2018
,我们下载PHPstudy2018
进行逐个版本配置Opcache
配置,并根据上文进行配置。访问index.php
发现在WWW
目录下生成了一个文件夹,文件夹最深处生成了index.php.bin
文件,将f14g
文件重命名为flag.php.bin
存放在与index.php.bin
相同目录访问
flag.php
,发现一段base64
编码字符串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()
这个压缩包需要密码才能解锁,提取出来的
secret.png
图片可能隐写了密码,利用工具zsteg
能够提取出密文password:b651b102
使用密码能够提取出来许多文件,打开里面是坐标文件,使用脚本将坐标还原为图片
脚本如下发现是一组数字信号,观察第一张图的值是
1100110
将其转换为十进制发现为102,其对应的AIISC
码为f
。全部42张图如此,得到flag{b2359a14-0567-11ec-80ba-00163e0620b4}