前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第二届红帽杯4Re + 1Pwn的writeup

第二届红帽杯4Re + 1Pwn的writeup

作者头像
ChaMd5安全团队
发布2018-07-25 16:49:05
5110
发布2018-07-25 16:49:05
举报
文章被收录于专栏:ChaMd5安全团队ChaMd5安全团队

这次献上我po叔的大作

come on baby~

  • icm

直接静态分析,主流程伪代码如下:

通过加密函数的分组、及具体算法里的swap,mul,add我操作,看出是idea算法。

直接dump伪随机数生成的固定key(hex):18fe9c970a7296f5c2fdeeae147592aa

通过简单异或得到目标加密串。

直接用工具解密得到flag(去除尾部补位): flag{f53fc1db-b7d3-4643-9b48-725f13129d07}

  • ccm

还是直接静态分析,有壳,不过壳比较简单,简单跟下,对照静态分析,发现OEP跳转位置。

去除动态基地直接在40640E下断,f8,dump,利用偏移2000处API地址修复IAT,脱壳完成。

主要伪代码如下:

更多代码就不上了。算法比较简单,除了CRC32 hash,也没有通用加密算法。

先是格式检查,前5字节为:

42bytes输入字串index 为 13 18 23 28 处的字符是_

然后生成三张表,其中一张是通过伪随机数生成。对输入hex并进行简单置换。得到84bytes的字串,最后异或比较79bytes,其余5bytes通过crc32校验,5bytes中其中有1字节是由{的低4位生成,值已确定,众所周知,通过最后4bytes能更改到任何crc32值,所以crc32只能确定唯一的4byte。

虽然以前做gslab把crc32其及4byte逆推都做了查表实现,为了简化代码,crc32部分只能跑一下了。代码如下:

最终flag为:flag{12345678-1234-1234-1234-1234567890ab}

  • explain

同样有壳,简单静态看下就能看到OEP的跳转:

代码语言:javascript
复制
0040817C   .- E9 F398FFFF   jmp Explain.00401A74

还是同样的下断,dump,修复IAT。

此题是简单的VM题。做题过程中,作了简单的记录,记录不全,将就看吧。

VM代码有部分解析没记录,大概流程能看出来

就是先初始化目标校验字串,然后输入35字节,并将其与自身index异或,最后与目标字串比较校验。然后打印结果。

  • wcm

做了icm,ccm,再做到这题也没什么了。大概流程相同。输入为42bytes。然后进行分组加密,最后进行异或并与常量串校验。

至于加密算法,很容易就能看出,国密4,因为算法没有进行过任何更改,所以SBOX,FK等都没有变,直接能对应上加密算法。

异或得到加密串:

密钥为伪随机数生成的固定钥,

dump:DA98F1DA312AB753A5703A0BFD290DD6

直接工具解密得到:flag{e4435341-401a-4bc4-96c1-eadf1951d904}

  • Starcraft RPG

此题是借助堆的格式化漏洞利用题。 在角色建立时,只有2角色是先分配存储name的堆,后分配存储格式化串的堆。而角色1在写格式化串时有个选择,如果不为1或2则不写格式化串。

利用思路就是先创建角色2,name处写上格式化串,删除,再创建角色1,并不写格式化串。这时角色1的格式化串就是角色2时写的name。因为free再分配堆时还有转large bin的过程。所以name的前16字节会被覆盖,格式化串要偏移16字节。

剩下的就是格式化的利用了。不多说,主要是改atoi调用为system调用。因为此函数一直调用,所以需要中转下,最后一步再让其跳转到system。直接看exp代码。

好了 我滚去睡觉了 狗命重要 笔芯

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ChaMd5安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档