首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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错误码含义

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180101G0G35F00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券