首页
社区
课程
招聘
[原创]Pragyan CTF 最高分Unbreakable encryption--AES加密的WriteUp
发表于: 2018-3-6 17:59 12603

[原创]Pragyan CTF 最高分Unbreakable encryption--AES加密的WriteUp

2018-3-6 17:59
12603

这是一道pwn aes加密方面的

ECB(Electronic Code Book电子密码本)模式ECB模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。 


因为这道题只涉及CBC模式,重点就讲解这个模式吧!

CBC模式和前面的ECB模式不同,加密过程中多了一个偏移量IV。详解请看下图。

自己画的图 有点丑别介意。



一般涉及AES加密,s盒与逆s盒都是固定的,嘻嘻 如果你有能力去改当我没说。除此之外还有什么轮常量什么的。

所以如果是AES CBC模式,一般我们只关心密钥Key和偏移量IV 。

加密过程中一般输入的

     长度为16(AES-128)、24(AES-192)、或32(AES-256)

     偏移量的长度一般为16.

     数据的长度一般为16的整数倍,如果不满16怎么办?不满16不用负法律责任!哈哈。。。如果不满16后面的一般用0填充。

加密前的长度为16字节加密后一般也是16字节但是由字符串转成hex后长度乘以2就变成了32

这里贴一下实现的代码。

这里可以看出输入的16字节和17字节的区别。

AES告一段落了。


附上参考链接

http://blog.csdn.net/qq_28205153/article/details/55798628

http://blog.csdn.net/xiaowang627/article/details/56270206

https://en.wikipedia.org/wiki/Rijndael_S-box

http://blog.csdn.net/lrwwll/article/details/78069013  比较好的文章是一篇漫画


知识点2:格式化字符串漏洞。

详情可以看下我的另一篇文章https://bbs.pediy.com/thread-224564.htm。或者baidu。

这个格式化漏洞可以说是一个升级版的吧。因为涉及到修改5个字节。具体看题目吧!

题目:Unbreakable encryption


套路一个样 RELRO是partial,所以.got.plt 可写。

拖入IDA一眼就能看到漏洞以为很简单。


但是看了下右边发现了问题


got表只有几个,程序是用的静态编译的像printf,puts,strlen都被编译进了程序

所以不能写只能调用。显然出题者是不想要我们去执行system(“/bin/sh”)的你也可以去尝试一下,过程是相当的艰辛。

接着来来看重头戏。




两个函数read_aes_key和read_aes_IV明显是获取key和iv的

还有记得看下面的EVP_aes_256_cbc很明显这是aes256所以密钥的长度是32

这时我们就思路就很清晰了。可以去尝试打印s和v10吧!估计这是一个坑吧!

点进去一看




恰巧memset在got表中有所以我们将memset改为printf

但是。。。。。。。

为什么说但是呢?




因为程序执行到这里的时候就会报错进入handleError,具体原因笔者也没有去研究,有兴趣的可以去试一下。




以清晰的看到程序运行玩read_aes_iv恢复堆栈后栈中直接暴露了我们的key和iv。

所以只要我们想方设法打印出来即可这时候我们可以想到另外一个printf

里面的参数是ciphertext_msg




[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-3-6 18:23 被大帅锅编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (4)
雪    币: 699
活跃值: (444)
能力值: ( LV9,RANK:240 )
在线值:
发帖
回帖
粉丝
2
今天也在看这道题,不过思路一直是围绕getshell来的…劫持free_hook,跳回main无限写
2018-3-6 18:39
0
雪    币: 16506
活跃值: (6392)
能力值: ( LV13,RANK:923 )
在线值:
发帖
回帖
粉丝
3
sakura零 今天也在看这道题,不过思路一直是围绕getshell来的…劫持free_hook,跳回main无限写
开始我也是,但是printf  puts  strlen已经编译进程序了,阿三不想让我们拿到shell,就换了个想法!
2018-3-6 18:55
0
雪    币: 699
活跃值: (444)
能力值: ( LV9,RANK:240 )
在线值:
发帖
回帖
粉丝
4
大帅锅 开始我也是,但是printf puts strlen已经编译进程序了,阿三不想让我们拿到shell,就换了个想法!
拿得到0.0,在ctftime上面看了其他人提交的wp,是可以的,就是我还没调出来
2018-3-6 18:57
0
雪    币: 16506
活跃值: (6392)
能力值: ( LV13,RANK:923 )
在线值:
发帖
回帖
粉丝
5
sakura零 拿得到0.0,在ctftime上面看了其他人提交的wp,是可以的,就是我还没调出来
看了一下,确实可以,看来每个人想法都不一样!
2018-3-6 19:11
0
游客
登录 | 注册 方可回帖
返回
//