这是一道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
被大帅锅编辑
,原因: