type
status
date
slug
summary
tags
category
icon
password
比赛的时候和灿神
(S1nk)
一起做的0x00 参考
0x01 题目说明
首先是
service1.cc
实现了一个简单的Android Binder
服务,主要功能是处理用户信息并进行简单的认证。能够通过Binder
通信接收用户信息并进行处理。通过add
方法添加用户信息到队列中,并在消费者线程中处理这些信息,计算密码的哈希值并存储。通过give
方法进行简单的认证,但是认证不认证密码,但是如果当前用户UID=0
的情况下认证成功,将FlagImpl
对象的强引用写入Parcel
对象中返回给调用者。然后是
flag.h
就是实际上主要内容就是下面的部分,如果拿到FlagImp
强引用对象,即可通过binder
调用获取flag
0x02 漏洞利用
1. binder通信过程中pid
和uid
变化
在
Binder IPC
调用过程中每个线程都有自己独一无二的IPCThreadState
对象,记录当前线程的pid
和uid
,可通过方法getCallingPid()
和getCallingUid()
获取。而在A与B通信的过程中(A的binder线程通过IPC调用到B的binder线程),在B执行binder_thread_read
过程中保存发送者(sender
) 的uid和pid。然后在
IPCThreadState
的transact
收到BR_TRANSACION
则会修改mCallingPid
、mCallingUid
。在Binder
被调用端执行完后,最后将其恢复到之前的调用进程的pid和uid。这里需要注意的是,当oneway(异步通信)的的情况下mCallingPid=0,不过mCallingUid可以拿到正确值 (虽然这个点和题目并没有关系)
在BBinder执行期间,它可以通过
Binder
的getCallingPid
和getCallingUid
来取到调用者的pid和uid,也就是mCallingPid
和mCallingUid
,以此完成可能需要的权限检查。如果此时B的binder线程要使用Binder访问本线程中的其他组件或者对象,如果这些组件或者对象需要检查访问者的IPC标记(即pid和uid),那么此时需要将B线程保存的Binder IPC标记修改为自身进程的IPC标记,这样组件或对象针对的是B进行权限检查,这时候就需要通过clearCallingIdentity
将Binder线程的IPC标记设置为当前进程的pid和uid,并将调用者A的pid和uid暂时保存起来,当B调用完后再通过restoreCallingIdentity
恢复即可。2. 题目漏洞说明
由于服务端一开始并无用户,需要通过
add
方法添加uid=0
的用户,主要关注下面的方法,可以发现其逻辑就是直接创建一个新用户并添加,然后在后面判断IPCThreadState::self()->getCallingPid()
是否为0。但是这里的返回值显然不会是0,因为此处的
getCallingPid
由于处在一个新的线程std::thread consumer(consumerThread);
中,而不是处理Binder通信的那个线程,因此这里的getCallingPid
返回的一定是service1
这个服务的PID。如果在add用户时
service->transact(0x69, add_payload, nullptr, IBinder::FLAG_ONEWAY);
设置异步标志。并且在题目的onTransact
的return add(username, password, uid);
前加上打印PID的信息就会发现打印出来的PID是0,也就是前面提到的oneway
异步通信时将会返回0,如果不使用异步标志则会返回客户端(通信发起者)的pid。所以这里的利用方式不是通过异步通信实现绕过的。关注上面的实现可以发现,在收到添加用户的请求后首先直接通过push_back添加新用户,而后续没有通过鉴权时才修改已添加用户的UID,那么就可以想到竞争的方式来利用。即在添加用户的同时循环登录,以寻找一个时机:已经添加好了用户,但是还没有来得及修改UID为-1
3. 漏洞利用
首先利用
Android Studio
中的模拟器(API34 X86_64)
进行本地测试,编写exploit
代码编译并启动服务
上传
exploit
并执行,本地利用成功远程成功拿到
flag
- 作者:LLeaves
- 链接:https://lleavesg.top//article/LakeCTF%20At%20your%20Service
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章