LCTF 2018 Travel Writeup

栏目: Python · 发布时间: 7年前

内容简介:这道题目的思路来源于两篇有趣的渗透报告:

这道题目的思路来源于两篇有趣的渗透报告:

AWS takeover through SSRF in JavaScript

An interesting Google vulnerability that got me 3133.7 reward.

第一篇渗透报告里作者通过SSRF请求AWS的 Cloud Instances 获得了大量敏感信息,所以好奇的我也查了一下国内的云服务商有没有这样的接口,发现其实都是有的:

腾讯云文档-查看实例元数据

阿里云文档-实例元数据

这样我们就可以通过一些仅支持http/https的SSRF获得服务器的一些敏感信息,这也是我这道题目的第一个考点。我们可以通过请求 http://metadata.tencentyun.com/latest/meta-data/mac 获得服务器的mac地址,转换为十进制后就是 uuid.getnode() 的值。

获得了mac地址后我们按照代码里写的用 PUT 请求向 upload/ 路由发请求,会发现返回405:

LCTF 2018 Travel Writeup

换成GET试试:

LCTF 2018 Travel Writeup

同样是405,但是我hint也也提示了留意 差异性 ,其实说的就是这里。我们可以注意到两个405返回的页面是不同的,仔细看可以发现第一个405是nginx返回的,第二个405是flask返回的,也就是说我们的PUT请求实际上是在代理中被拦截了,没有实际发到后端。我们翻翻 flask文档 可以发现这个问题是可以解决的:

LCTF 2018 Travel Writeup

所以我们只要添加 X-HTTP-Method-Override: PUT 在GET或者POST的请求头中就可以向后端发送一个PUT请求

LCTF 2018 Travel Writeup

此时加上cookie就可以向服务器上写入文件了,注意到代码里

LCTF 2018 Travel Writeup

这里会把filename再次url解码,所以我们可以把文件名二次编码,这样就可以跨目录写入文件。

获得任意文件写之后getshell一般有三种:

  1. 写Webshell。但因为这道题是python web所以无效。
  2. 写crontab。但这道题给的权限不够。

  3. 写ssh公钥到 ~/.ssh/authorized_keys 。这道题其实就是用这个思路,而且我还很贴心的提示大家用户名是lctf免得大家还需要猜测一下

LCTF 2018 Travel Writeup

所以最后写自己的ssh公钥到 /home/lctf/.ssh/authorized_keys 即可:

LCTF 2018 Travel Writeup

LCTF 2018 Travel Writeup


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

21天学通C语言

21天学通C语言

(美国)琼斯(Bradley L.Jones) (美国)埃特肯(Peter Aitken) / 信达工作室 / 人民邮电出版社 / 2012-8 / 69.00元

《21天学通C语言(第6版•修订版)》是初学者学习C语言的经典教程。本版按最新的标准(ISO∕IEC:9899-1999),以循序渐进的方式介绍了C语言编程方面知识,并提供了丰富的实例和大量的练习。通过学习实例,并将所学的知识用于完成练习,读者将逐步了解、熟悉并精通C语言。《21天学通C语言(第6版•修订版)》包括四周的课程。第一周的课程介绍了C语言程序的基本元素,包括变量、常量、语句、表达式、函......一起来看看 《21天学通C语言》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具