首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云平台渗透之-python shell获取root权限

云平台渗透之-python shell获取root权限

作者头像
企鹅号小编
发布2018-01-11 16:04:35
2.6K0
发布2018-01-11 16:04:35
举报
文章被收录于专栏:编程编程

2018年的第一天,祝大家365天元气满满!

话不多说,先打响新年第一炮(不好意思,我又污了=.=)

***本系列内容仅用于技术分享,请勿对号入座***

之前有讲过要分享一些云平台渗透的经验,其中最有意思的就属这个python shell了。

首先经过fuzzing发现了这样一个console口:

根据路径判断,这个应该是python的交互式shell,也就是我们平时在cmd命令行敲“python”之后出来的一个console,试了一下,果然是:

但是执行系统命令的时候就返回不正常了,要么是0,要么是256,这里如果为0就是执行成功了,如果是256则对应LINUX的错误码1,其含义是:

这里简单说一下python中的os.system(cmd)的返回值与linux命令返回值的关系:

大家都习惯用os.systemv()函数执行linux命令,该函数的返回值十进制数(分别对应一个16位的二进制数)。

该函数的返回值与linux命令返回值两者的转换关系为:该函数的返回值(十进制)转化成16二进制数,截取其高八位(如果低位数是0的情况下,有关操作系统的错误码共131个,所以低位都是零),然后转乘十进制数即为 linux命令返回值0。

例如:

os.system()返回值为0àlinux命令返回值也为0.

os.system()返回值为256,十六位二进制数示为:00000001,00000000,高八位转乘十进制为 1à对应linux命令返回值 1

os.system()返回值为512,十六位二进制数示为:00000010,00000000,高八位转乘十进制为 2à对应linux命令返回值 2

......

os.system()返回值为32512,十六位二进制数示为:01111111,00000000,高八位转乘十进制为 127à对应linux命令返回值 127

........

或者简单说,linux命令返回码 左移8位,然后转换成十进制就变成了os.system()函数的返回值了。

此外关于linux的错误返回码(不含0,0表示成功)代表的含义,可以参照文末最后的附表。

下面重点来了,能不能通过移位的方式来获取可见的返回值呢,这里大家可以自己去尝试,涉及到进制转换以及移位操作,在此不再赘述。

但是除此之外还有其他办法吗?答案是肯定的。话不多说,直接上:subprocess

关于这个模块,可以参考python2.7官方的说明:

https://docs.python.org/2.7/library/subprocess.html

我们来看下官方对于这模块是怎么说的:

首先,subprocess允许我们新开一个进程,并且是可以替代os.system的!那么就尝试一下:

成功了!由此我们得到了一个带回显的交互式python shell,而且权限是root,省去了不少提权的工作:

细心的朋友会发现,我自己电脑上用os.system执行命令,都是直接回显的哇,确实是:

在这里我想说的是渗透领域的经典逻辑:一切漏洞看场景

我猜测的原因是这样的,云平台的这个系统考虑到了debug接口可能造成的远程命令执行的危害,于是在服务器端限制了该模块的执行权限,所以我们在执行一些敏感命令的时候返回的是不被允许。

当然绝对不止着一种原因,如果你在其他环境中找到了类似的情况,并寻觅到了原因,也可以反馈给我,我们一起探讨。

附表:linux错误码含义

本文来自企鹅号 - v2lion媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - v2lion媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档