记一次CTF解题过程
记一次CTF解题过程
最近参加了一场CTF比赛,侥幸做出了几道题,想着记录一下于是就有了这篇博客
MISC
Pngenius
解题思路
下载完发现是一个png后缀的文件,猜测可能是png图片隐写,于是使用Stegsolve打开文件
一顿操作并没有什么收获,应该是思路跑偏了,此时使用WinHex查看文件信息
发现了flag.txt字段,猜测应该是png文件内隐藏了其他类型的文件
打开kali使用binwalk发现存在一个压缩包文件,使用-e参数做文件分离
切到分离文件的内部发现flag.txt,使用cat命令查看文件内容为空,尝试解压压缩包发现需要输入密码
应该是还有其他的信息藏在png文件中没获取到,继续使用kali zsteg工具获取png文件中的隐写信息
发现了一个zip文件的password,将密码复制过去解压先前提取出来的zip提示重写flag.txt文件,成功获取到flag
EasyEncode
解题思路
下载完文件发现是一个压缩包,尝试解压文件提示输入密码
这里使用在线爆破zip网站对压缩包文件进行解压,得到密码
将密码复制过去解压得到了一个txt文件,查看文件内容发现是一串摩斯密码
把摩斯密码拿去解密得到一串字符,经高人指点每隔两位添加一个%即为URL编码
对编辑后的URL内容进行解码后得到Unicode编码的字符串,再次进行Unicode解码得到Base64编码的数据
%3D对应的是Base64中的=符号,经过Base64解码后得到flag
WEB
phpdest
源代码
1 | <?php |
此题为PHP代码审计,第一想法是使用伪协议去读flag文件但是失败了,解题过程为百度搜索的结果
解题payload
1 | php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php |
EasyPHP
源代码
1 | <?php |
个人思路是通过传递ctf参数拼接$fl4g变量后影响服务器时间判断从而获取flag,经过多次尝试失败后经高人指点思路有误,正确做法应该是通过传递ctf参数去执行预先设定好的异常处理函数,本题payload采用的是传递一个字符串转列表出错从而执行set_error_handler函数,$_POST在接收参数后面有[]时代表参数为列表
解题payload
1 | ctf[]=aaa |
REVERSE
simpleXOR
下载后发现是个二进制文件,拿到kali中尝试运行,运行需要输入flag,随手试了一下发现不行
先查一下壳,然后准备使用IDA进行静态分析
发现就是一个普通的二进制文件,直接用IDA打开,打开后按F5快捷键转换成伪代码
分析代码得知是将输入的信息与v7进行异或运算,result_0应该是一串硬编码的数据,双击跟进到result_0内部
将result_0转换为16进制的数据,将改串数据拿去与v7进行异或运算
Python编写的逆向算法
1 | v7 = 247 |
运行脚本后得到最终的flag
总结
越是参加比赛,越是感觉到自身能力的不足,永远不能停止学习