题目:CGfbs
题目描述:菜鸡面对着printf发愁,他不知道printf除了输出还有什么作用。
题目分析:照着题目描述来看,应该是格式化字符串的漏洞。老规矩,照着步骤走:
1.checksec和file
2.ida
由上面的我们用32位的idapro打开。
可以看到结构也十分简单,pwnme等于8的时候,就可以得到flag
那么如何得到宁pwnme为8呢,这里我们可以看到printf(&s)这是一个很明显的漏洞了。在上面那道题,以及上一篇博客中很清楚地提到过。
3.写exp
这里也一样要搞清楚在数据栈中偏移了多少。
我们看一下输入的AAAA在数据栈中是什么位置
发现在第十位
那么下面我们就可以构建我们的exp了
但是这里我一直有个疑问,这个任意写到底是怎样在操作的,对我来说,我还没搞清楚。
4.得到结果
题目:实时数据监测
题目描述:
小A在对某家医药工厂进行扫描的时候,发现了一个大型实时数据库系统。小A意识到实时数据库系统会采集并存储与工业流程相关的上千节点的数据,只要登录进去,就能拿到有价值的数据。小A在尝试登陆实时数据库系统的过程中,一直找不到修改登录系统key的方法,虽然她现在收集到了能够登陆进系统的key的值,但是只能想别的办法来登陆。
解题思路:
本来在上面的题目正愁着还没理解格式化输出漏洞,这里就来了一个题帮助我好好理解。
1.checksec和file查看文件
32位程序,但是这次出现了一种新的保护方式,RWX。
2.ida查看程序
程序的内容和结构一目了然,改变key的值,即可得到flag,改变值用格式化字符串任意写的漏洞。
3.写exp
在写exp之前必须先知道在栈中哪个参数。这里我们用
然后我们发现在第12个参数的位置
这个题帮我多次试验,终于知道了在格式化字符串中填入什么才能得到规定的写入值了,那就是%(对应值-4)c%N$n。
exp如下
4.得到结果