2021WMCTF的Re1题wp

2024-01-09 11:08
文章标签 wp re1 2021wmctf

本文主要是介绍2021WMCTF的Re1题wp,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

感觉比赛难度太高了,这题做了1天多才做出来,不过不得不感慨年纪大了,智商也下降的厉害。
附件解压是个exe程序,放到IDA里分析咋一看也没啥特别的:
在这里插入图片描述
前面是常规的flag头部和{}的格式判断,然后是字符串处理,后面再看。
在这里插入图片描述
刚开始是用输入的4个字符生成字符串,然后对4个字符串进行类似CRC32的校验码
在这里插入图片描述
这里我分别对4个校验值命名为a,b,c,d,然后发现有个4个等式需要为真,也就是说可以通过方程求出a,b,c,d

from z3 import *s=Solver()
a=BitVec('a',32)
b=BitVec('b',32)
c=BitVec('c',32)
d=BitVec('d',32)s.add((b + a)&0xffffffff == 296450682)
s.add((b - c)&0xffffffff == 483717666)
s.add((d + c)&0xffffffff == 0xC940F021)
s.add((c + a - d)&0xffffffff == 2088593617)
if s.check() == sat:print(s.model())

然后计算出
c = 1357369498
a = 2750330814
d = 2019106695
b = 1841087164
再看下后面的一个函数:sub_7FF7319F3840

在这里插入图片描述
这里明显是个XTEA算法,修改了delta而已
还需要注意的是,主函数的419-422行使用之前赋值的0xdead对c和d进行了修改,导致key发生变化,然后利用最终的结果我们解密,发现解密后居然是乱码!
然后经过一段时间验证,回顾了下,判断操作应该是没有问题,那就应该是key还是不对,因此对可能修改的地方进行了爆破,发现0xdead应该是0xb7ad,解密后的文本是:

_D0_yOu_L1kE_It!

嗯,感觉看起来接近了,但其实还早~(我得反思下,后面的十几个小时是咋耗费掉的)
这样我们就有了flag{}中的16个字符了,再看下前面4个,用来生成字符串做CRC的。
采用如下的脚本爆破下,就可以得到能够生成a,b,c,d分别的字符

for i in range(0x20,0x7f):buf=[]for j in range(256):buf.append((i+j)&0xff)if crc(0x0FFFFFFFE,buf,256)==a:print(chr(i))break
else:print('failed')

这样得到最前面的4个字符,和之前解密的字符串拼起来就是:

Hah4_D0_yOu_L1kE_It!

然后再看最关键的修改密钥部分,看0xb7ad的位置在Block偏移0x222的位置,就需要把0x223的0xde改成0xb7才可以成功。
但是如何能修改这部分Block校验块的内存数据呢,答案就在前面代码的第二步循环处理,这里程序会持续读入一个字符和4个HEX数字,然后调用对应的函数进行修改内存的操作。
这里我把整个这段解析处理的逻辑画成表格展示出来:
在这里插入图片描述
需要注意的是,同一组的操作只能做一次,而且flag长度限制总共只能做3次。
可以看到,如果需要修改0x223的字节,看起来有3个方案:
1、前导字符“+”,但是需要修改0x204,但由于flag长度限制,只能修改3次内存,所以还需要改回原值,再加上同组操作只能做一次,不可能。
2、前导字符”$“,但需要修改0x21b,原理同上,也不可能
3、前导字符“-”,但是修改的范围只能是16个字节以内,也就是从0x210-0x21f,也没用
到这里就陷入困境了,其实上面的每一步都花了很久,反复思考有没有漏过什么细节,后来灵机一动,发现第三个方案里0x210也可以被修改,如果改成0x20,就可以修改0x210-0x22f的内容
然后再看,如何修改0x210的值:
搜索满足条件的操作,只有“+”,“#”两个方案,但“+”由于和“-”同组,所以只能是“#”。
这里如果需要用“#”操作,还需要满足一个前提:*0x100==0xfe
这里看似没有解决办法,因为所有的操作都覆盖不到这个范围,但是通过仔细检查汇编代码,发现“@”操作这里a2实际是可以为负值的,比如输入0xff就表示-1
这样得到flag:

WMCTF{Hah4_D0_yOu_L1kE_It!@FFFE#0F20-11B7}

那么这样的flag是不是唯一的呢,因为flag长度限制是45个字符,而上面的长度才42。
如果你在后面}前加上任意字符,程序就会有一个特殊处理,根据你的输入修改了内存里的数据,导致前面CRC的结果出错。
其实我在找到正确的flag前,还找到了一个非预期的解法,也发现这题是多解的。这个非预期的解法是由于0x21b这里可以被输入控制,比如正确flag里的这个L1kE中的1这个字节直接改成0xce,这样就可以直接进行“$”操作,然后用“-”操作改回0x31即可,这样仅用两个操作就修改了key,后面还有很多字符可以随意组合,造成多解,验证看下图。
在这里插入图片描述
总结一下,对我来说题目难度很高,感觉年纪大了,只能靠多刷题来提升技能。

这篇关于2021WMCTF的Re1题wp的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/586904

相关文章

BUUCTF PWN wp--bjdctf_2020_babystack

第一步   checksec一下,该题是64位的,该题目大概率是一道栈溢出(因为题目里面提到了stack) 分析一下这个二进制保护机制: Arch: amd64-64-little 这表示二进制文件是为64位AMD处理器设计的,使用的是小端序(little-endian)格式。RELRO: Partial RELRO RELRO(Relocation Read-Only)是一种安全特性,旨

WordPress 后台缓存插件:WP Admin Cache提高缓存页面

使用WordPress建站会安装一些静态缓存插件,比如:WP Rocket、Cache Enabler、Comet Cache、W3 Total Cache、WP Super Cache、WP Fastest Cache、Hyper Cache等等,这些都用于缓存前端。 今天介绍一款专门用于缓存后台的插件:WP Admin Cache。 启用后,提速效果还是很明显,比如后台所有文章页面秒开

玄机——第九章-Where-1S-tHe-Hacker wp

文章目录 一、前言二、概览三、参考文章四、步骤(解析)准备步骤#1.0步骤#1通过本地 PC RDP到服务器并且找到黑客ID 为多少,将黑客ID 作为 FLAG 提交; 步骤#2通过本地 PC RDP到服务器并且找到黑客在什么时间修改了网站主页,将黑客修改了网站主页的时间 作为 FLAG 提交(y-m-d-4:22:33); 步骤#3通过本地 PC RDP到服务器并且找到黑客第一个websh

wp-autopost-pro 3.7.8最新完美版

插件简介: 插件是wp-autopost-pro 3.7.8最新版本。 采集插件适用对象 1、刚建的wordpress站点内容比较少,希望尽快有比较丰富的内容; 2、热点内容自动采集并自动发布; 3、定时采集,手动采集发布或保存到草稿; 4、css样式规则,能更精确的采集需要的内容。 5、伪原创与翻译、代理IP进行采集、保存Cookie记录; 6、可采集内容到自定义栏目 代码下载

玄机——第九章-Where-1S-tHe-Hacker-part2 wp

文章目录 一、前言二、概览三、参考文章四、步骤准备步骤#1.0步骤#11.最早的WebShell落地时间是(时间格式统一为:2022/12/12/2:22:22); 步骤#22.黑客最早的WebShell密码是多少,将WebShell密码作为Flag值提交; 步骤#33.CobaltStrike木马被添加进计划任务的时间是 步骤#44.黑客启用并添加进管理员组的用户与时间是 答案格式:Use

攻防世界-web题型-7星难度汇总-个人wp

Web_php_wrong_nginx_config 这个题目nginx配置错误 随便输入显示网站还没建设好。。。 先信息收集一下 换了个无敌好看的终端 没想到7星了还玩这些。。。 看了admin的页面需要先登录 现在的问题是如果读取到这个文件 这个hack的文件也没有东西 到此就不知道了,看wp 没想到在hack的cookie里,我看了cookie我当时看到l

攻防世界-web题型-8星难度汇总-个人wp

Triangle 2024/02/21 15:19 粗略看了一下应该是一个前端的is验证的情况 这几个函数都在secret.js里面 要js逆向废了 相当麻烦我先看一看wp 看了wp确定是js逆向还有涉及一个unicorn,看了介绍的文章是用来仿真CPU架构的,可以加快资源的加载吧好像是。 看代码if(test_pw(enc, pw) == 1){         alert('

攻防世界-web题型-2星难度汇总-个人wp

command_execution 典型的SSRF,先用命令找一下flag在哪里 xff_referer 修改一下xff和refere就可以了 php_rce 经典的thinkphp框架,闭着眼睛拿工具梭 这款工具无法直接getshell换一个 拿蚁剑直接连 Web_php_include 先分析代码 while (strstr($page,

2024年网络安全最新CTF_WP-攻防世界web题解

给大家的福利 零基础入门 对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。 同时每个成长路线对应的板块都有配套的视频提供: 因篇幅有限,仅展示部分资料 网络安全面试题 绿盟护网行动 还有大家最喜欢的黑客技术 网络安全源码合集+工具包 所有资料共282G,朋友们如果有

BaseCTF2024 WP (主要为Rev)

Rev Rev视频解析:[Rev0:从零开始的逆向生活]BaseCTF2024 Week1 Rev 讲解_哔哩哔哩_bilibili [Week1] You are good at IDA [Week1] UPX mini 脱UPX标准壳,解base64 [Week1] Ez Xor 简单的反向异或,数据动调取一下 #base_xorenc