admin管理员组文章数量:1565277
1、由于Android9 权限变的更加严格,在程序里面使用su拿不到root权限了
Runtime.getRuntime().exec("su"); //返回没有权限的错误
在修改源代码没有成功,也没有任何思路了。想了一些曲线救国的方法
1、使用cred 进行提权 ,参考 https://www.freebuf/articles/system/107829.html
static ssize_t write_handler(struct file * filp, const char __user *buff,
size_t count, loff_t *offp)
{
char *kbuff;
struct cred* cred;
// WARN: Be careful. There is a chance for off-by-one NULL.
kbuff = kmalloc(count + 1, GFP_KERNEL);
if (!kbuff) {
return -ENOMEM;
}
if (copy_from_user(kbuff, buff, count))
{
kfree(kbuff);
return -EFAULT;
}
kbuff[count] = (char)0;
//验证密码
if (strlen(kbuff) == strlen(AUTH) &&
strncmp(AUTH, kbuff, count) == 0) {
printk("%s\n", "Comrade, I will help you.");
/* cred = (struct cred *)current_real_cred(); */
/*根据当前进程的结构体,拿到管理权限的cred结构体*/
cred = (struct cred *)__task_cred(current);
// TODO: We might probably just copy the cred from pid 1.
//修改uid,gid为root
cred->uid = cred->euid = cred->fsuid = GLOBAL_ROOT_UID;
cred->gid = cred->egid = cred->fsgid = GLOBAL_ROOT_GID;
printk("%s\n", "See you!");
} else {
printk("Alien, get out of here: %s.\n", kbuff);
}
kfree(kbuff);
return count;
}
这个不知道为什么,在Android9 上面没有拿到root,但是在Ubuntu16.04 和 18.04 上面是拿到了的
2、反弹shell(修改为root用户和用户组,以root方式执行)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include<netinet/in.h>
#include <sys/socket.h>
int main()
{
//创建一个socket
int listen_fd = socket(AF_INET,SOCK_STREAM,0);
//配置ip port 协议
struct sockaddr_in addrSrc,addrClient;
addrSrc.sin_family=AF_INET;
addrSrc.sin_port=htons(6666);
addrSrc.sin_addr.s_addr=INADDR_ANY;
//绑定
bind(listen_fd,(struct sockaddr*)&addrSrc,sizeof(struct sockaddr_in));
//监听
listen(listen_fd,5);
while(1)
{
int connect_fd=0;
int len=sizeof(struct sockaddr_in);
connect_fd=accept(listen_fd,(struct sockaddr*)&addrClient,&len);
//将标准输入输出指定为 socket连接句柄,这样网络传输数据就是直接流入到 shell
dup2(connect_fd,0);
dup2(connect_fd,1);
dup2(connect_fd,2);
//因为执行了 exec 程序进程就直接被替换了,所以fork一个子进程去执行
pid_t pid = fork();
if (pid < 0)
{
return -1;
}
else if (pid == 0)
{
//调用shell
execl("/system/bin/sh","sh",NULL);
exit(-1);
}
else {
int status=0;
wait(&status);
}
}
return 0;
}
测试
版权声明:本文标题:Android9 开发板获取root权限 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1727092871a1097532.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论