云平台渗透之-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错误码含义

本文来自企鹅号 - v2lion媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SnailTyan

非极大值抑制(Non-Maximum Suppression)

1. 什么是非极大值抑制 非极大值抑制,简称为NMS算法,英文为Non-Maximum Suppression。其思想是搜素局部最大值,抑制极大值。NMS算法在...

54100
来自专栏红色石头的机器学习之路

Python机器学习(1)-- 自己设计一个感知机(Perceptron)分类算法

Implementing a perceptron learning algorithm in Python Define a Class import num...

93010
来自专栏SnailTyan

枚举——称硬币

1. 枚举 枚举是基于逐个尝试答案的一种问题求解策略。 2. 称硬币(POJ1013) 问题描述 有12枚硬币。其中有11枚真币和1枚假币。假币和真币重量不...

21400
来自专栏编程

盘点·GitHub最著名的20个Python机器学习项目

摘要 摘要:开源是技术创新和快速发展的核心。这篇文章向你展示Python机器学习开源项目以及在分析过程中发现的非常有趣的见解和趋势。 我们分析了GitHub上的...

30300
来自专栏企鹅号快讯

Python数据结构

所属系列:【Python工程师系列】 所属主题:【Python零基础】 1 ? 编码格式建议 不用Tab缩进,用4倍空格缩进 必要时换行(避免单行超出79个字符...

25200
来自专栏开发与安全

python network programming tutorial

关于网络编程以及socket 等一些概念和函数介绍就不再重复了,这里示例性用python 编写客户端和服务器端。 一、最简单的客户端流程: 1. Create ...

24200
来自专栏开发与安全

《dive into python3》 笔记摘录

0、In Python 2, the / operator usually meant integer division, but you could make...

29600
来自专栏开发与安全

《Learn python the hard way》Exercise 48: Advanced User Input

这几天有点时间,想学点Python基础,今天看到了《learn python the hard way》的 Ex48,这篇文章主要记录一些工具的安装,以及sca...

22500
来自专栏开发与安全

用Python socket 实现一个简单的http服务器(post 与get 的区别)、CGI、WSGI、MVC

预备知识: 关于http 协议的基础请参考这里。 关于socket 基础函数请参考这里。 关于python 网络编程基础请参考这里。 一、python...

2.2K00
来自专栏红色石头的机器学习之路

Python, CPython, Pypy, Jython的简单介绍

简单地说,Python是一门编程语言,任何一种编程语言都需要用另一种语言来实现它,比如C语言就是用机器语言来实现的。所以,Python根据实现方式不同分为了CP...

54800

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励