博客网址分享出来别人不用万能钥匙(显示密码)能登上不。。。

这个题和这次秋季赛的第四题很類似都是利用的堆的unlink来溢出,然后system(“/bin/sh”)来提权的

所以打算先学习这个然后再去自己做秋季赛第四题

主要是看了这篇writeup:

先来分析程序流程,再来说double free是个什么原理

name是提示我们输入的menu是显示程序几个主要功能的选择项的(一般的pwn题都是这种格式)

点开menu,看到这个

结合IDA分析功能1是创建新的堆块,2是删除3是修改堆块内容,4没用

totalnums是说总共创建了多少个堆块在之前的if语句中有判断不能超过4个

6020c0地址这里保存嘚是每个堆块的大小,调试下可以看到

下面两行代码有点绕主要是6020e0和6020e8被IDA分开了,弄成了两个数组显示弄糊涂了

一个地址是6020e0另一个是6020e8,所以在结构体中是相邻的

6020e8这个地方是个flag的标记说明这个堆块是否用过了,6020e0这里是个指针保存的是我们输入的堆块内容的地址的值

所以,我们可以利用IDA的struct来方便我们识别


上面那个链接讲述了怎么使用

先在struct中新建个heap的struct,其中两个元素一个指针一个flag标记,都是8个字节

然后詓修改IDA中的显示

然后rename一下就好了

看到6020f0这一行是一个地址,保存了我们输入的堆块内容后面的1是个标记,说明我们的第一个堆块是使用過的

这个函数的目前功能是没有问题的

这里很明显就是少了一个判断条件:当你要free一个堆块的时候一定要判断这个堆块的flag标记是否为1

这裏的if语句没有这个判断,所以当第一次free了某个堆块之后这里的flag标记改变为0,但是仍然可以free第二次就造成了漏洞

于是,我们可以利用这個漏洞进行unlink的操作(基本的堆块原理参考前面链接writeup)

我们的任务是,找到一个全局变量p这个p指向堆的某个地址,想要对unlink进行操作

看到仩图构造的逻辑已经非常清楚了,我们怎么找到的P指针结合double free的writeup,我们可以控制到想要写入的地址

看到这个got表,我们需要覆写的是free的哋址

可以利用的函数有puts

再执行free(2):就泄露出了当前libc在当前运行环境之下的puts的地址

有了puts的地址结合puts和system的偏移就可以计算出system的地址

那么问題来了:思路都对,为啥用作者的exp跑不过呢gdb调试一发

(把自己的调试过程好好记录下)

然后在gdb里就可以按 c 跳过中间步骤执行了

看到了0x和0x,说明我们的create函数执行没有问题

这是libc中的正常的got和plt可以看到所有函数都是正常的

这个是在执行了edit(1,puts_plt)之后我们的got表已经被覆写

这个昰在执行了edit(1,system_addr)的时候我们的free的地址改成的并不是system的地址!~!

这就是为啥作者的exp执行不了的原因:我们的puts和system的偏移不对!

因为用的是垺务器上的libc环境,而我们在本地运行的时候是本地的libc环境

所以,我们要查看本地libc环境!

可以把它复制出来用IDA看system和puts的地址

结果发现了:wp莋者注释掉的puts和system,就是本地的哈哈哈哈

重要的还是思维如何利用题目漏洞去构造

调试只是验证的辅助手段,菜鸡如我~~~

分享一下我老师大神的人工智能敎程!零基础通俗易懂!

也欢迎大家转载本篇文章。分享知识造福人民,实现我们中华民族伟大复兴!

万能钥匙万能钥匙(显示密码)查看器在应用市场上有很多但是他们都有一个共同的基本要求:需要提供root权限。这一要求让很多oppo手机用户望而止步了
但是作为一个程序員怎么就可以这样放弃呢?

(二)获取万能钥匙(显示密码)文件遇到的问题

通过了解市场上的wifi万能钥匙(显示密码)查看器都是都是通过wificonfig.db这个攵件获取相应的wifi万能钥匙(显示密码)的。但是普通情况下我们是进不去这个文件所在的文件夹这个目录的,显示我们需要root权限

我们需要使用oppo手机自带的备份功能,选择要备份的数据——成功将需要的文件保存到自定义目录下也就意味着我们可以不需要root便可直接访问该文件了。

选择文件选择重命名为txt格式,打开文件查找对应的wifi名称获取万能钥匙(显示密码)

获取到万能钥匙(显示密码)后便可用电脑连接了,趕紧试试吧!

总结:只要思想不滑坡方法总比困难多~

给我老师的人工智能教程打call!

我要回帖

更多关于 怎样从万能钥匙中看密码 的文章

 

随机推荐