周末好!今天无聊小编抽空抄袭了篇关于LINUX相关文章!,讲述的是linux提权的。 其实今天,我不应该讲linux的,应该说说,黄鳝与一个寂寞的女孩子的故事的!但是,本号是黑客与网络安全相关的公众号,小编就露个视频截图就好,证明小编我也是时刻关注着这个社会最新潮流的,哈哈。 说道这里,小编去年搞得工作是Linux运维,不幸的是,linux运维工作没做好,没能成为一位工程师,现在也基本把系统学习的linux知识给忘光了;当然基本的命令还是会的;比如:cp、cd、vim、cd、vi、tail、等等简单的命令; 日站就要日个彻底。往往我们能拿下服务器的web服务,却被更新地比西方记者还快的管理员把内网渗透的种子扼杀在提权的萌芽里面。Linux系统的提权过程不止涉及到了漏洞,也涉及了很多系统配置。一下是我总结的一些提权方法。 几点前提已经拿到低权shell 被入侵的机器上面有nc,python,perl等linux非常常见的工具 有权限上传文件和下载文件 内核漏洞提权提到脏牛,运维流下两行眼泪,我们留下两行鼻血。内核漏洞是我们几乎最先想到的提权方法。通杀的内核漏洞是十分少见的,因而我们应该先对系统相关的信息进行收集。 查看发行版 cat /etc/issue cat /etc/*-release 查看内核版本 uname -a 这里我找了台机器测试: #uname -a Linux xxxxx 2.6.32-21-generic-pae #32-Ubuntu SMP Fri Apr 16 09:39:35 UTC 2010 i686 GNU/Linux#cat /etc/*-release DISTRIB_ID=UbuntuDISTRIB_RELEASE=10.04 DISTRIB_CODENAME=lucid DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS" 这样,我们就得到了系统的内核版本(2.6.32-21 pae),cpu架构(i686),和发行版(ubuntu 10.04) 可以开始搜索了 大多内核漏洞通过内核版本能很快查到 用kali自带的searchsploit来搜索exploitdb中的漏洞利用代码 searchspoit linux 2.6 ubuntu priv esc 结果:
这么多,我们加入系统信息缩小范围 searchsploit linux priv esc 2.6 ubuntu 10
这样可选的exp就少多了,很无奈,我们需要漫长的点开exp看具体要求的筛选过程,大部分exp都会写清生效条件。因此我们能够虽然很气,但也很快地去掉一些不具备利用条件的exp。比如第三个exp针对一个特别的磁盘格式,排除。 经过艰难的寻找,发现15704,c很顺眼,于是把源代码上传,然后: #gcc exp.c #lsexp.c a.out#./a.out id uid=0(root) gid=0(root) 我们先编译exp再执行。可以看到exp执行以后没输出,但是我们其实已经得到rootshell了(exp执行以后一定敲个命令,不然都不知道是成功了还是卡了) exploitdb的搜索过程虽然繁琐,但是能基本保证不会遗漏漏洞。如果想先偷懒图个快的话,我们可以试试https://www.kernel-exploits.com/,这里的exp已经按照内核版本分类了,而且有很多已经完成了编译。 比如我们搜索2.6.32:
这个rds的binary刚巧能用。“我收集信息了,我上传exp了,我就root了。“ 当然,以上只是非常理想的情况,我们经常会遇到没有gcc的坑爹服务器。这时我们就需要在本地编译。本地编译时不止要看exp源码注释的编译参数,也需要手动调整一下编译的参数,比如给gcc 加-m 32来编译32位。编译问题繁多,有困难找谷歌,不再赘述。 当内核版本没有好用的exp对应的时候,可以检查磁盘格式: cat /etc/fstab 和已经安装的程序: dpkg -l rpm -qa 然后进行刚刚繁琐的搜索,没准就找到个bug 最后强调利用内核漏洞的几个注意点: 1.读源码,不然可能连编译都不会 2.读源码,不然费劲编译完才发现不适用 3.读源码,不然遇到一个删全盘的”exp“怎么办 明文root密码提权passwd和shadow虽然遇到的概率很小,但还是提一下 大多linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件息息相关。passwd里面储存了用户,shadow里面是密码的hash。出于安全考虑passwd是全用户可读,root可写的。shadow是仅root可读写的。 这里是一个典型的passwd文件 root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh ibuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:103::/home/syslog:/bin/false sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin passwd由冒号分割,第一列是用户名,第二列是密码,x代表密码hash被放在shadow里面了(这样非root就看不到了)。而shadow里面最重要的就是密码的hash root:$6$URgq7sJf$4x8e9ntqTwAPIubi9YLxLQ2mZTTZKnGz0g/wWzOdPB5eGuz.S5iRtFdvfFd9VIVEWouiodB/hh9BYOLgAD8u5/:16902:0:99999:7::: daemon:*:15730:0:99999:7::: bin:*:15730:0:99999:7::: sys:*:15730:0:99999:7::: sync:*:15730:0:99999:7::: games:*:15730:0:99999:7::: man:*:15730:0:99999:7::: lp:*:15730:0:99999:7::: mail:*:15730:0:99999:7::: news:*:15730:0:99999:7::: uucp:*:15730:0:99999:7::: proxy:*:15730:0:99999:7::: www-data:*:15730:0:99999:7::: backup:*:15730:0:99999:7::: list:*:15730:0:99999:7::: irc:*:15730:0:99999:7::: gnats:*:15730:0:99999:7::: nobody:*:15730:0:99999:7::: libuuid:!:15730:0:99999:7::: syslog:*:15730:0:99999:7::: mysql:!:15730:0:99999:7::: dovecot:*:15730:0:99999:7::: sshd:*:15730:0:99999:7::: postfix:*:15730:0:99999:7::: shell命令来检查权限 cd /etc ls -l passwd shadow 如果passwd可写,我们就可以把root的密码字段(x)替换成一个已知密码的hash(比如本机shadow里面的root密码hash),这样系统在验证密码时以passwd的为准,密码就已知了。如果shadow可读,我们可以读走root的hash,然后用hashcat或者john暴力破解之。 密码复用很多管理员会重复使用密码,因此数据库或者web后台的密码也许就是root密码。 and then?有了(疑似)root密码怎么办?你一定想ssh登陆。然而ssh很可能禁止root登陆,或是防火墙规则将你排除在外了。返回来想,我们不是有一个低权shell了吗?找个办法再上面“输入”密码就好了。显然,直接在低权shell里面用sudo是不奏效的。这是因为出于安全考虑,linux要求用户必须从终端设备(tty)中输入密码,而不是标准输入(stdin)。换句话说,sudo在你输入密码的时候本质上是读取了键盘,而不是bash里面输入的字符。因此为了能够输入密码,我们必须模拟一个终端设备。python就有这样的功能。在shell里面输入: python -c 'import pty;pty.spawn("/bin/sh")'
就用python简历了一个虚拟终端,然后就可以使用sudo等等命令了。 python -c 'import pty;pty.spawn("/bin/sh")' $ sudo su
sudo su
[sudo] password for www-data: 123456 Sorry, try again.
[sudo] password for www-data:
计划任务系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出 ls -l /etc/cron*
默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写的管理员,我们就可以修改脚本等回连rootshell了。 SUIDSUID是一种特殊的文件属性,它允许用户执行的文件以该文件的拥有者的身份运行。比如passwd命令,就是以root权限运行来修改shadow的。 这里我们做个实验(环境为ubuntu 16.04): c源代码 #include |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|