By ipv6 from ZSTU
1-1万能密码
根据题目,POST注入
尝试后,发现时间盲注可行,贴一个脚本参考下
1 | import sys |
得到用户名:admin密码:yvjCa41RYO6Dkzyo
题目是万能密码,那么当然直接双引号闭合也可:admin”#
总之,登陆得到flag

1-2逆转思维
(题目已添加至ZSTUCTF平台)
考点:文件包含 反序列化
题目如下
1 |
|
#1满足if语句
1 | if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")) |
函数file_get_contents()可以使用data://直接绕过,将“welcome to the zjctf”url编码后,将如下值赋给text
1 | data://text/plain,welcome%20to%20the%20zjctf |
由于preg_match(“/flag/“,$file),对flag进行了正则匹配,所以不能直接包含flag.php
#2按照提示,包含useless.php
1 | text=data://text/plain,welcome%20to%20the%20zjctf |

base64解码 得到useless.php源码如下(这里是赛后复原的题目,可能源码与真正比赛有所出入)
1 |
|
#3构造序列化对象
password为Flag类,字符串变量file=flag.php(可以直接写个php文件本地跑一下serialize函数)
1 | password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";} |
得到最终Payload:
1 | http://xxx/?text=data://text/plain,welcome%20to%20the%20zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";} |

2-1加载页面
下载得到loading.png
进度条为一维码

利用ps简单伸缩变换,扫描得:
may6e_us3ful
binwalk分析png得到压缩包25667.zip
输入刚刚得到的密码解压得到encode.py
代码如下,为加密过程
分析加密方法,编写解密脚本
读入png文件,输出如下:
取前面一段二进制数据,转十进制后对应ASCII码

01011010010010100100001101010100010001100111101101110011011101000011001101100111011000010110111000110000010111110011000101110011010111110110010101100001001101010111100101111101000000000000000……
得到flag
2-2唯一真相
下载
binwalk扫出
DECIMAL HEXADECIMAL DESCRIPTION
-——————————————————————————-
0 0x0 JPEG image data, JFIF standard 1.01
30 0x1E TIFF image data, little-endian offset of first image directory: 8
262 0x106 JPEG image data, JFIF standard 1.01
33791 0x83FF JPEG image data, JFIF standard 1.01
33821 0x841D TIFF image data, big-endian, offset of first image directory: 8
34127 0x854F JPEG image data, JFIF standard 1.01
可以知道里面有多个jpg
将jpg丢进010分析
搜索jpg文件头FFD8FF、文件尾FF D9
得到kn_106h_82F9h.jpg、kn_854Fh_36486h.jpg
打开图片kn_854Fh_36486h.jpg
镜像翻转,得到flag
3-1贰零肆捌
走正常游戏流程,结束游戏时进行数据交换
查看数据包
Score为base64编码 解码修改分数段 得到如下
1 | *999999|+_#|8|&_zjctf** |
将其base64编码后post
得到flag

4-1 登录系统
IDA pro打开,发现是64位的,然后看到,admin:: shell(),同时没发现代码里有mallic,就有思路知道这是一个rop利用,只要跳转到0x00400E88地址就可以,跳转的方法是栈溢出,但是通过checksec发现,开启了canary保护
所以思路是先泄露canary地址然后使用pop rdi|ret 的gadget来做即可。
通过ROPgadget得到login的gadget地址位0x400f13,直接利用即可。
5-1简单逆向
首先把apk文件用7z解压,然后把里面的class.dex拖入到dex2jar,得到class.jar,然后使用jd-gui打开class.jar,在里面找到jni调用请求。
然后找到之前解包的lib里面的libGetFlag.so,使用ida pro打开得到flag
5-2 魔力圈圈
通过7z解包apk,得到class.dex,,讲class.dex拖到dex2jar,再用jd-gui打开jar得到如下:
可见该app是加密assets里面的magic.bmp文件然后输出一个bmp文件,然后在之前的apk解包里面发现了assets里面有zipped.bmp,说明这个是加密的结果,flag就是要反推回去,再仔细观察加密函数,可以看到调用了nativeZip.so动态链接库
在lib里面找到nativeZip.so动态链接库,可以看到图像的加密过程,反加密即可。
附加题6清廉校园
文件末尾发现凯撒加密
根据zjctf开头分析得flag
welc ometohdu seclab