作者在上个月圣诞与元旦期间参加了高质量的 35C3 比赛,不得不说做一道题就收获一道题的知识,当事人觉得特别爽 。这道 Web 的 POST 题目差点和队友在比赛期间搞出来,赛后认真看了 writeup 将其解题的思路和每一步的原理做了详细的分析,现在分享给各位。

期待明年的 36C3!

题目描述:

比赛结束之后,题目链接发生了变化,但是仍可以访问,整个题目的描述如下:

Go make some posts.

Hint: flag is in db

Hint2: the lovely XSS is part of the beautiful design and insignificant for the challenge

Hint3: You probably want to get the source code, luckily for you it's rather hard to configure nginx correctly.

解决题目这道题需要七个步骤,后文将按顺序进行详细分析:

  • nginx misconfiguration
  • arbitrary unserialize
  • SoapClient SSRF
  • SoapClient CRLF injection
  • miniProxy URL scheme bypass
  • Connect to MSSQL via gopher
  • Get flag

一、Nginx Misconfiguration

首先我们使用 dirsearch 对网站进行了目录爆破,结果如下:

从结果可以看到 uploads 目录的 HTTP 状态码是 403,也许这个目录是存在的。因为从 Burp 抓包分析回响的 HTTP 头部很容易发现服务器是 nginx,由此我想到了之前读过的一篇 Nginx 不安全配置可能导致的安全漏洞 文章。

在 nginx 的配置中用 alias 设置目录的别名 ,由于 url 没加后缀 /,而 alias 设置了有后缀 / 配置,导致可以利用 ../ 绕过限制访问目录。本题从 /uploads../ 下载源码 ,命令如下:

wget -m http://35.207.83.242/uploads../

下载下来的文件除了源码还有一个 nginx 配置文件,我们查看关键部分果然发现配置的 alias 设置出现上述问题:

二、Arbitrary Unserialize + SoapClient SSRF

1. 绕过正则表达式插入可以反序列化的数据

这部分是找到反序列化利用的点,网上无论是官方 writeup 还是一些 CTFer 的 writeup 对这个部分的讲解很简单,只是找到反序列化的点,然后给出 Payload,但是怎么这个反序列化的点怎么触发的以及完整的攻击链是怎么样并没有还原出来。

这部分我带领读者详细的分析源码内容,让各位清晰地知道本题反序列化的过程(包括漏洞点和触发点的位置)

首先,在 Seay 的系统中搜索 unserialize 很容易发现,此处有一个反序列化操作:

这是 DB 类的方法,进一步查看这个类,可以看到在 DB 的 query (用于查询 SQL 语句的方法)中调用了 retrieve_values 方法。可以看到如果符合这个正则表达式就对查询的每一个字段内容执行反序列化操作:

php

点击收藏 | 1 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖