CVE-2016-5195 (Dirty COW), Linux内核竞争条件漏洞,可导致非授权用户向任意可读文件写入任意内容,从而进行本地权限提升。影响范围为2.6.22-4.8.3,可以用于至今为止Android任意版本的root。
这个漏洞涉及不少内存管理的具体实现,所以分析学习起来很多东西对于我来说还是很不清晰,看来之后要把关键的内核代码多看一看。
CVE-2016-5195 (Dirty COW), Linux内核竞争条件漏洞,可导致非授权用户向任意可读文件写入任意内容,从而进行本地权限提升。影响范围为2.6.22-4.8.3,可以用于至今为止Android任意版本的root。
这个漏洞涉及不少内存管理的具体实现,所以分析学习起来很多东西对于我来说还是很不清晰,看来之后要把关键的内核代码多看一看。
CVE-2015-3636,由Keen Team发现的Linux内核UAF漏洞(Keen Team的paper:Own your Android! Yet Another Universal Root),可以用来提权,但是在x86_64上只能导致内核panic。影响范围为4.0.3以下的Linux内核,可用于Android 6.0以下的系统Root。
CVE-2015-7547,由google安全团队披露的glibc中getaddrinfo()函数产生的stack overflow漏洞,影响glibc版本2.9-2.22,产生漏洞的原因在于getaddrinfo在进行DNS查询的过程中,调用到send_dg()或者send_vc()的时候,由于逻辑错误导致标识buffer大小的变量和buffer的实际大小出现了不统一,进一步导致stack-overflow的发生。
又是一番坎坷的折腾,Android之路刚开始就这么折腾,但好在最后终于能够解决并能给自己一个满意的答案。也是有一次见识到了国内的资料都是转转转的可怕,只是这次也并没有找到相关的英文资料可以解惑,记录在这里算是一点补充,让需要的朋友少走点弯路。
300分的pwn
程序是一个简单的游戏,在你输入名字后,将名字存入malloc出的chunk中,然后会生成一个结构体,大概长这样:
200分的Pwn
同样也是拿到手简单跑一下就扔进IDA里静态看。
程序主体不多,一个服务端程序,用第一个参数作为监听端口,然后就是常规的bind,listen,fork来处理。nc连上去会有三个选项,一个减法运算过的puts函数在libc中的地址,第二个接受输入然后造成栈溢出,第三个退出。
100分的Reverse
由于是C++的程序,所以一开始看起来很杂乱,经过分析之后程序的主要逻辑是这样:
这道题最终还是本地成功远程失败,这次的原因还是too young……还是再记录一下吧。
可能是上一题折腾太久了,拿到这一题直接file看一眼strings一下就直接拖进IDA静态分析了,就是忘了例行看一下checksec和vmmap,也可能是因为这么长一段时间接触的就没有不开NX的吧,突然来个都没开NX的完全就不记得还有这茬了,看来还是修为不够。
现在才知道原来system(“sh”)也可以拿shell……一直以为只能用system(“/bin/sh”)……
题目是挺简单的,not stripped,PLT中直接有system入口,程序从main函数直接进initarray函数然后就没了,在initarray里有一个循环10次读一个字节到数组中,但是index可以越界,所以可以改写栈内存(同时又能把计循环次数的变量也给改了,所以可以无限循环):
一道堆中的null byte溢出题
程序用连续两个8 bytes变量分别存储分配的堆指针和其size,然后将这样的结构体以数组的形式存储在全局变量区0x6020C0。主要逻辑就是每次新建一个message的时候,从0x6020C0开始找size为0的地方,之后调用malloc分配目标大小存储堆指针,删除的时候会先清size为0再调用free()释放内存