我们是强网先锋!!!(超大声)
仰望星空派战队WRITEUP
Misc
签到
复制粘贴 flag{we1come_t0_qwb_s6}
问卷调查
做问卷结束截图OCR识别
flag{W31c0me_70_QWB2022_Se3_You_N3x7 _time}(应该是这个 记不清了)
web
babyweb
1.注册一个用户,通过该用户进入后台页面
2.进入后有一个bot,可以执行修改密码和bug报告指令
3.查看源码,发现自定义的js中存在csrf漏洞,结合bot的功能,判断可以通过csrf修改admin密码
4.在VPS上构造如下exp,然后bugreport给bot
1 | <!DOCTYPE html> |
5.这个时候我们已经成功修改了admin的密码,按修改后的密码登录到后台
6.选择购买一个flag,然后抓个包
7.发现传入的参数是嵌套的字典列表,这里根据积累与特征,尝试一波ctfshow学来的骚姿势,发现成功购买,而页面上也得到了flag
crash
1.进入环境,发现是flask源码
代码的大致思路是,用admin登陆后,先进行pickle序列化,然后base64编码,之后放到cookie里
这边有一个点是admin的密码是本地变量secret,而这个变量我们是不知道的,这边可以通过pickle反序列化实现变量覆盖,而pickle_data也进行了过滤,采用双写exec进行绕过
2.先访问/login?username=admin&password=migooli,然后抓包
3.构造出pickle_data,采用双写exec绕过,然后进行base64编码
pickle_data:(S’exec(‘admin.se’+’cret=”migooli”‘)’ibuiltinexec.
4.将编码后的payload写入到cookie中的userdata,然后访问/balancer?username=admin&password=migooli
5.此时页面跳转到服务器负载均衡设置
6.查看源码,发现nginx配置文件,并且提示flag在504页面中
7.查看nginx配置文件,发现lua_package_path配置,结合上个月b站宕机事件,可以确定将权重设置为0即可跳转到504页面
8.提交完参数后等待一分钟即可拿到flag
easyweb
1.在showfile.php处发现目录穿越任意文件读取漏洞
2.联想到之前在ctfshow的大赛原题里做过类似的,但是是简化版的,思路都是构造phar包上传,然后unlink触发phar反序列化,从而执行恶意代码,构造的exp如下:
1 | <?php |
3.将构造好的恶意phar包改好名字和文件类型后在首页上传,这里为了绕过验证,还需要开启PHP_SESSION_UPLOAD_PROGRESS,并且需要添加cookie为admin
4.上传成功后在showfile.php利用phar协议进行读取,右键查看图片即可找到flag
强网先锋
rcefile
1.访问/www.zip,下载源码
2.在upload.php中发现黑名单列表
3.直接上传图片马,后缀名改为phar,直接解析拿到flag
WP_UM
1.开环境后一路安装,发现wordpress版本是6.0,User-Meta版本是2.4.3
2.搜索相关漏洞,发现了CVE-2022-0779
3.先注册个用户,然后在上传页面抓包,然后进行目录穿越,目录存在会显示remove,不存在则不会
4.利用这个漏洞,结合一开始说的猫哥把用户名放在了/username下面,密码放在了/password下面,逐位进行爆破,最后得到用户名MaoGePaMao和密码MaoGeYaoQiFeiLa(强烈谴责出题人,给孩子爆破麻了)
5.拿到用户名密码之后,成功登录进后台,修改UserMeta的上传白名单
6.返回首页,在upload上传一句话,成功RCE
7.flag不在根目录也不在当前目录,正则匹配也找不到flag,情况不对,连上蚁剑
8.最终在/usr/local/This_1s_secert中找到flag(出题人你玩得好啊)
polydiv
1 | from hashlib import * |
首先通过sha256碰撞得到需要与系统交互的四位字符,得到r,a,c的式子
需要求解b(x),笨办法直接通过附件给的poly2.py脚本进行运算,将rac分别改为01的字符串,令m(x)=r(x)-c(x);令a(x)*b(x)=s(x),已知b(x)的位数为固定8位后可以通过假设b(x)初值为’11111111’进行修改0,1运算后得到正确的b(x),与系统进行交互
通过比对s和m相同后就得到正确的b,将b复制与系统交互
若干次交互后得到flag
ASR
给了n,e,c的rsa,且e=3刚开始考虑低指数加密,直接将c开e次方与通过爆破脚本发现若干小时后无法得到flag,发现n为四个数相乘的结果(假设为pqr*t)
通过yafu来分解n
得到 2872432989693854281918578458293603200587306199407874717707522587993136874097838265650829958344702997782980206004276973399784460125581362617464018665640001
继续分解20分钟左右在yafu的日志中发现四个数
得到四个数后,感觉是有限域开方的题,通过比对ctfshow类型题可发现直接上脚本用sagemath进行求解
1 | from Crypto.Util.number import * |
得到flag
Crypto
myJWT
1.下载源码,发现是ECDSA以及JWT相关的算法,并且是基于java语言的
2.搜索相关相关漏洞,发现了CVE-2022-21449
3.根据cve的描述,java的ECDSA算法中在取出sig中的r和s之后,并没有对r和s的范围进行校验,而且在拿到点p1之后也没有校验是否为无穷远点,从而可以利用(0,0)签名来绕过签名的验证
4.分析完之后,开始操作,连接靶机,输入自己的id,拿到token,拿到之后对token进行伪造,先把第二部分的jwt中的admin值改为true,然后用\x00填满第三部分
Reverse
GameMaster
拿到附件后发现是C#逆向
大致步骤如下:
逆向exe -> 找到解密过程 -> 解密gamemessage -> 分离出dll -> 找到check
使用dnSPY打开 进行反编译
代码审计
结合附件中的gamemessage,说明了此操作是针对内存的,将内存数据转储下来后处理导出
在goldfunc中找到相关逻辑
由此可知,可以将gamemessage先进行xor34后,再以Brainstorming!!!作为秘钥进行解密,从而获得内存数据,将内存数据使用010 查看
提取出来后,foremost分析分离出一个dll,再次使用dnspy分析,发现为ExploitClass.dll
由此可见,对三个数进行校验,校验通过的话便可得到flag
函数抄过去,使用python的z3库进行约束求解,
1 | from z3 import * |
反丢进计算过程中代入xyz求出flag
1 | def check(x, y, z, ArrayList) -> list: |