简介(Gamma实验室核心成员:一灯老和尚所写)

在日常渗透过程中我们经常遇到信息泄露出ALIYUN_ACCESSKEYID与ALIYUN_ACCESSKEYSECRET(阿里云API key),特别是laravel框架得debug信息。APP中也会泄露这些信息,那么我们如何直接利用这些泄露的api key去拿到别人的阿里云主机shell勒?

!!!下载链接在文末!!!

概述

我们说下阿里API有什么用吧,以下是官方说明:

云服务器(Elastic Compute Service,ECS),可以调用API管理您的云上资源和开发自己的应用程序。

ECS API支持HTTP或者HTTPS网络请求协议,允许GET和POST方法。您可以通过以下方式调用ECS API

详情参考阿里云官方API文档:https://help.aliyun.com/document_detail/25484.html?spm=a2c4g.11186623.6.1276.12244f88jytZ8c

开发思路

1、通过阿里云SDK使用

SDK下载地址:https://github.com/aliyun/aliyun-openapi-python-sdk

pip安装

# Install the core library pip install aliyun-python-sdk-core # Install the ECS management library pip install aliyun-python-sdk-ecs # Install the RDS management library pip install aliyun-python-sdk-rds

调用查询ecs主机

#!/usr/bin/env python#coding=utf-8 from aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.acs_exception.exceptions import ClientExceptionfrom aliyunsdkcore.acs_exception.exceptions import ServerExceptionfrom aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-hangzhou') request = DescribeInstancesRequest()request.set_accept_format('json') response = client.do_action_with_exception(request)# python2: print(response) print(str(response, encoding='utf-8'))

创建命令

#!/usr/bin/env python#coding=utf-8 from aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.acs_exception.exceptions import ClientExceptionfrom aliyunsdkcore.acs_exception.exceptions import ServerExceptionfrom aliyunsdkecs.request.v20140526.CreateCommandRequest import CreateCommandRequest client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-hangzhou') request = CreateCommandRequest()request.set_accept_format('json') response = client.do_action_with_exception(request)# python2: print(response) print(str(response, encoding='utf-8'))

这里会返回一个云助手命令id,返回结果:

{ "RequestId": "E69EF3CC-94CD-42E7-8926-F133B86387C0", "CommandId": "c-7d2a745b412b4601b2d47f6a768d3a14"}

执行命令

#!/usr/bin/env python#coding=utf-8 from aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.acs_exception.exceptions import ClientExceptionfrom aliyunsdkcore.acs_exception.exceptions import ServerExceptionfrom aliyunsdkecs.request.v20140526.InvokeCommandRequest import InvokeCommandRequest client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-hangzhou') request = InvokeCommandRequest()request.set_accept_format('json') response = client.do_action_with_exception(request)# python2: print(response) print(str(response, encoding='utf-8'))

返回结果

{ "RequestId": "E69EF3CC-94CD-42E7-8926-F133B86387C0", "InvokeId": "t-7d2a745b412b4601b2d47f6a768d3a14"}

安全组部分就省略了,根据API文档

2、通过GET/POST 使用

这里先说下公共请求参数

名称 类型 是否必需 描述
Action String API的名称。取值请参见API概览。
AccessKeyId String 访问密钥ID。AccessKey用于调用API,而用户密码用于登录 ECS管理控制台。
Signature String 您的签名。取值请参见签名机制。
SignatureMethod String 签名方式。取值:HMAC-SHA1
SignatureVersion String 签名算法版本。取值:1.0
SignatureNonce String 签名唯一随机数。用于防止网络重放攻击,建议您每一次请求都使用不同的随机数。
Timestamp String 请求的时间戳。按照ISO8601标准表示,并需要使用UTC时间,格式为yyyy-MM-ddTHH:mm:ssZ。示例:2018-01-01T12:00:00Z 表示北京时间2018年01月01日20点00分00秒。
Version String API版本号,格式为YYYY-MM-DD。取值:2014-05-26
Format String 返回参数的语言类型。取值范围: · json· xml默认值:xml

2.1 GET请求

https://ecs.aliyuncs.com/?Action=DescribeInstanceStatus&RegionId=cn-hangzhou&PageSize=1&PageNumber=1&InstanceId.1=i-bp1j4i2jdf3owlhe****&<公共请求参数>

XML返回格式:

<DescribeInstanceStatusResponse> <PageNumber>1</PageNumber> <InstanceStatuses> <InstanceStatus> <Status>Running</Status> <InstanceId>i-bp1j4i2jdf3owlhe****</InstanceId> </InstanceStatus> </InstanceStatuses> <TotalCount>58</TotalCount> <PageSize>1</PageSize> <RequestId>746C3444-9A24-4D7D-B8A8-DCBF7AC8BD66</RequestId></DescribeInstanceStatusResponse>

JSON返回格式

{ "PageNumber": 1, "InstanceStatuses": { "InstanceStatus": [ { "Status": "Running", "InstanceId": "i-bp1j4i2jdf3owlhe****" } ] }, "TotalCount": 58, "PageSize": 1, "RequestId": "746C3444-9A24-4D7D-B8A8-DCBF7AC8BD66"}

2.2 POST请求

POST / HTTP/1.1Host: ecs.aliyuncs.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateContent-Type: application/x-www-form-urlencodedContent-Length: 0 Action=DescribeInstanceStatus&RegionId=cn-hangzhou&PageSize=1&PageNumber=1&InstanceId.1=i-bp1j4i2jdf3owlhe****&<公共请求参数>

返回跟GET方式一样

工具使用

图形化界面,没什么说的。附一张截图相信大家都明白了。

结束

阿里云为运维人员与开发人员提供了方便,但同时自身也要加强安全意识,注意自己的key不要泄露,不然直接接管阿里云所有esc主机,风险比一般高危漏洞都还要高。

下载链接及漏洞文章

项目链接:https://github.com/mrknow001/aliyun-accesskey-Tools

工具下载链接:https://github.com/mrknow001/aliyun-accesskey-Tools/releases/download/1.0/Aliyun-.AK.Tools.exe

欢迎大家关注微信公众号Gamma安全实验室,会不定期发表技术文章和安全工具

python 程序运行在阿里云主机_阿里云主机Access key利用工具相关推荐

  1. 如果python程序运行时进入了死循环_碰到python死循环后要怎么退出结束?

    每当编写代码行云流水,却突然碰到代码无限循环,这是非常让人头疼的,难道直接退出程序运行嘛?答案肯定是不行,怎么跳出呢?一起来看下吧~ 案例: 遇到的问题是这样的:如果我定义了一个死循环线程我该如何终止 ...

  2. 下列快捷键中能够中断python程序运行的是_例题学习

    105.关于Python循环结构,以下选项中描述错误的是 ( C ) A: Python通过for.while等保留字提供遍历循环和无限循环结构 B: break用来跳出最内层for或者while循环 ...

  3. python程序运行的遇到的问题(一)

    python程序运行的遇到的问题(一) 绘制词云发生了报错问题 文章目录 python程序运行的遇到的问题(一) 绘制词云发生了报错问题 Python报错:OSError: cannot open r ...

  4. 下列快捷键中能中断python程序运行的是_What is very important

    What is very important 答:all of the above 下列符合"中和"精神的是() 答:风调雨顺 宠辱不惊 为了解某高校大学生体育锻炼情况,在该学校随 ...

  5. python 直接退出程序_python 退出程序 Python程序运行后直接退出

    python中exit(0)和exit(1)的用法和区别, exit(0):表示程序正常退出. exit(1):表示程序异常退出. 二.特点不同 exit(0):把exit用在main内的时候无论ma ...

  6. python程序运行按什么键_太惨!学Python方法用错,直接从入门到放弃!

    原标题:太惨!学Python方法用错,直接从入门到放弃! 从你开始学习编程的那一刻起,就注定了以后所要走的路-从编程学习者开始,依次经历实习生.程序员.软件工程师.架构师.CTO等职位的磨砺:当你站在 ...

  7. python只能运行一次怎么改_是否可以修改和运行部分Python程序而无需一次又一次地运行所有这些程序?...

    我编写了一个Python代码,用于从NLTK库中训练Brill Tagger大约8000个英语句子并标记大约2000个句子. Brill Tagger需要花费很多时间来训练,最后当它完成训练时,程序的 ...

  8. python程序运行原理_谈谈 Python 程序的运行原理

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,谈谈 Python 程序的运行原理 这篇文章准确说是『Python 源码剖析』的 ...

  9. python程序运行结果不停_关于python:在进程运行时不断打印Subprocess输出

    要从我的python脚本启动程序,我使用以下方法: def execute(command): process = subprocess.Popen(command, shell=True, stdo ...

最新文章

  1. 一高校公示拟聘用人员信息,多为大龄“双非”土博,好像也没那么卷……
  2. win10只有c盘怎么分区_电脑技巧分享:安装win10系统时系统盘C盘分区多大空间适合?...
  3. Android绘制自定义控件,Android自定义控件绘制基本图形基础入门
  4. SAP CRM One order appointment duration table
  5. leetcode 766. 托普利茨矩阵
  6. java nashorn maven_使用mvn创建java工程的极简教程
  7. 重写equals方法(未完)
  8. JS常用函数(方法)
  9. 【快速高斯模糊的实现】
  10. c语言编程伤心代码,C语言恶作剧代码:慎用,被打了不负责
  11. 客户管理系统代码项目_低代码案例:快速交付包含门店销售终端的SCM供应链管理系统...
  12. Qt:Exception at 0xeefde9, code:0x0000005: read access violation at: 0x0, flags = 0x0(first chance)
  13. 发送速率(传输速率)和传播速率
  14. 计算机第三课细心小编辑教案,教案-第6课小小编辑师
  15. Vulcan 基于Meteor的APollO框架 , grapesjs 用于可视化生成Html 页面
  16. iOS安全防护---越狱检测、二次打包检测、反调试
  17. RoboMaster机甲大师——视觉组——摄像头的选型与应用
  18. monkey稳定性测试详细介绍
  19. Authorization
  20. archmanjaro添加black arch及cn源

热门文章

  1. vip会员管理系统c语言,路西牌会员管理系统。
  2. @data注解不生效_你说啥什么?注解你还不会?
  3. 贝塞尔曲线 java_贝塞尔曲线理论及实现——Java篇
  4. qq浏览器翻译功能启用划词插件教程
  5. 搜狐视频如何上传原创视频
  6. win7打不开qq文件怎么办
  7. Python排序算法(二) 快速排序、希尔排序、归并排序
  8. Dubbo是如何进行远程服务调用的?(源码流程跟踪)
  9. spring boot中打包插件spring-boot-maven-plugin和maven-jar-plugin的关联
  10. linux 所有命令无法使用