CheckIn
文件是压缩包,打开就是flag压缩包,再打开还是flag压缩包,所以是解压3000个flag压缩包
网上找到的递归解压脚本
import shutil
import zipfile
import os
import win32api
recursive_unzip_file = []
def recursive_unzip(path, zfile):
file_path = path + os.sep + zfile
# 给解压后的文件生成文件名相同的文件夹
des_dir = path + os.sep + zfile[:zfile.index('.zip')]
srcfile = zipfile.ZipFile(file_path)
for file_name in srcfile.namelist():
if file_name.endswith('.zip'):
temp_del_file = os.path.join(des_dir, file_name)
if temp_del_file not in recursive_unzip_file:
recursive_unzip_file.append(temp_del_file)
srcfile.extract(file_name, des_dir)
if file_name.endswith('.zip'):
temp_del_file = os.path.join(des_dir, zfile)
if temp_del_file not in recursive_unzip_file:
recursive_unzip_file.append(temp_del_file)
# if zipfile.is_zipfile(filename):
path = des_dir
zfile = file_name
recursive_unzip(path, zfile)
def del_file(file_path):
"""
删除指定路径下的所有文件和文件夹
:param file_path: 路径
:return:
"""
for del_file_path in file_path:
if os.path.isfile(del_file_path):
os.remove(del_file_path)
elif os.path.isdir(del_file_path):
shutil.rmtree(del_file_path)
if __name__ == '__main__':
path = r'C:\Users\Arctic_Maple\Desktop\2'
path = win32api.GetShortPathName(path)
zfile = r'flag.zip'
recursive_unzip_file.append(os.path.join(path, zfile))
recursive_unzip(path, zfile)
print(recursive_unzip_file)
print(len(recursive_unzip_file))
del_file(recursive_unzip_file)
啊这。。。
那就重复多次解压,运行一次代码能够打开的文件夹名称为
C:\Users\Arctic_Maple\Desktop\2\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag\flag
所以每次提取最终的zip然后清空2文件夹,再把本次最终zip放进2文件夹,循环
自己的脚本正在编写中,试图写出一个能一次性解压到位的脚本
misc
misc-1(未解出)
下载下来是cap文件,应该是流量分析题目
用010editor打开,搜索flag
找到有一条报文含有flag.png,地址是127.0.0.1,端口8888
再用wireshark打开,找到这条信息
导出对象,http,搜索flag
导出图片
不是长度改写,binwalk显示图片内无文件,pngcheck显示没有错位的
用stegsolve直接提取RGB三色0通道,有一个二维码
感觉非常像MD5,但是没办法按照MD5破解,而且其他的32位编码也都试过了
学长给的hint,题目叫reserve,所以把这串字符逆序
但是我反了一下顺序,md5还是解不出来啊,哪里有啥问题吗?
misc-2
压缩包里面也有一个南孚电池.jpeg,应该就是明文攻击了
压缩图片成zip,这里不能用winrar,winrar用的是AES-256算法,这里常规需要的是ZipCrypto
打开AZPR,传入nanfu.zip和新压缩的南孚电池.zip
跑出来得到一个没有密码的压缩包
web
web-1
是2019强网杯随便注原题,个人记录在这里
web-2
有2nd.php,在往上就404了
抓包
如果在1st.php中将admin=0改为admin=1,会得到一段源代码
操作2nd.php没有任何反应,先放着
根据代码,大意是:
admin需要设置为非零,方法为post,flag值不能为空
$post[flag]不完全等于$flag,最终得到
this is your flag:$flag
welcome admin
那么构造语句,得到一半的flag
之后想到的是2nd.php中默认的那句give me your flag,于是把得到的半截flag用GET传上去
得到的又是一段代码
此时抓包显示的啥也没有,那就继续看代码
首先得满足url中有 flag=flag{wHeR3_l5_tH3_0ThRr_haIF? ,否则压根不进入循环。
$this->trick1和$this->trick2的长度都不能大于5
$this->trick1会变成string类型
$this->trick1!==$this->trick2只需要类型或值有一个不相同就行
md5($this->trick1) === md5($this->trick2)md5加密后要全等
$this->trick1 != $this->trick2要求值不同
构造这部分所需的url
?trick=O:5:"trick":2:{s:6:"trick1";d:0.1;s:6:"trick2";d:0.100000000000001;}
这里很明显有个冲突,需要一个url既含有flag的先决条件又需要含有trick这段得出后半段flag
所以最终url:
?flag=flag{wHeR3_l5_tH3_0ThRr_haIF?&trick=O:5:%22trick%22:2:{s:6:%22trick1%22;d:0.1;s:6:%22trick2%22;d:0.100000000000001;}
得到后半段的flag
备注
序列化
能方便储存传输,减轻服务器压力
序列化是将变量和对象转换成字符串的过程
php中用serialize()序列化,用unserialize()反序列化
序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字
对字母大小写和空白(空格、回车、换行等)敏感,字符串是按照字节计算的
序列化会用到魔术函数__construct():构造函数在实体化对象时调用;__destruct():析构函数当删除一个对象或者对象操作终止时被执行,多用于释放空闲内存
O:5:"trick":2:{s:6:"trick1";d:0.1;s:6:"trick2";d:0.100000000000001;}
格式是
O:
O是common object
s是string
d是double
对象是trick类,有trick1和trick2
d这里用的是精度,也能用
NAN 合法数值
INF 无穷大