专属链接

题目:

现在,你拿到了滴滴平台为你同学生成的专属登录链接,但是你能进一步拿到专属他的秘密flag么 提示1:虽然原网站跟本次CTF没有关系,原网站是www.xiaojukeji.com 注:题目采用springmvc+mybatis编写,链接至其他域名的链接与本次CTF无关,请不要攻击 http://116.85.48.102:5050/welcom/3fca5965sd7b7s4a71s88c7se658165a791e

解答:

首先打开网站,发现是滴滴的官网。。

此时发现所有连接几乎全部重定向到了滴滴官网。

无奈下查看元素。发现hint

<!--/flag/testflag/yourflag-->

尝试访问,http://116.85.48.102:5050/flag/testflag/yourflag发现报错500,好像是数组越界?

此时尝试将yourflag替换为DDCTF{1321},返回failed!!!。

猜测爆破flag么?完全没戏啊。看样子应该有其他地方可以入手。

然而又发现了主页js的一句神奇的话。一个ajax语句。

然并卵,404。。。。。

此时只好继续分析题目,发现了令人眼前一亮的东西。对,就是下面这个icon

专属链接

http://116.85.48.102:5050/image/banner/ZmF2aWNvbi5pY28=

访问后,发现下载了favicon.ico

此时发现图标好像图片很奇怪。后来果然验证了这是个hint。

此时可以愉快地玩耍了,这样一来,题目源码有了,还愁拿不下来么。

美滋滋。此时也知道了题目中hint的用意。题目采用springmvc+mybatis编写

百度搜索springmvc+mybatis文件结构,美滋滋读文件。

首先,大概知道了资源文件都是在WEB-INF文件夹下,所以猜测这个icon也在这里,此时我们要先确定文件夹。

WEB-INF下有一个web.xml,此时尝试读取,最终确定目录../../WEB-INF/web.xml
然后拖文件。这里说几点注意事项。

  • 通过../../WEB-INF/web.xml确认位置。
  • 继续根据web.xml中的内容进行文件读取。classpath是WEB-INF/classes
  • 读class文件时根据包名判断文件目录com.didichuxing.ctf.listener.InitListener 即为WEB-INF/com/didichuxing/ctf/listener/InitListener.class
  • 制造网站报错,进一步找到更多的文件

差不多,注意一上四点,就可以拿到尽量多的源码了。

拖到源码后,就不美滋滋了。。。还好去年在DDCTF学过2017第二题的安卓逆向,会逆向了。

(此时坑点:jd-jui仅可逆jar,需要将class打成压缩包改为jar再逆向)

此时开始苦逼的分析源码。

分析后发现,存在接口,用当前用户的邮箱去生成一个flag。

但是flag是加密的。此时加密流程代码里都有,是一个RSA加密。密钥在服务器中的

此时又一次明白了,为什么读文件允许ks文件。

来吧,首先先拿邮箱申请一个flag

然而此时申请flag,邮箱也得先加密。自己提取出来的加密脚本如下。

public static String byte2hex(byte[] b)
  {
    StringBuilder hs = new StringBuilder();
    for (int n = 0; (b != null) && (n < b.length); n++)
    {
      String stmp = Integer.toHexString(b[n] & 0xFF);
      if (stmp.length() == 1) {
        hs.append('0');
      }
      hs.append(stmp);
    }
    return hs.toString().toUpperCase();
  }
  public static void getEmail() throws NoSuchAlgorithmException, InvalidKeyException{
      SecretKeySpec signingKey = new SecretKeySpec("sdl welcome you !".getBytes(), "HmacSHA256");
      Mac mac = Mac.getInstance("HmacSHA256");
      mac.init(signingKey);
      String email="3113936212117314317@didichuxing.com";
      byte[] e = mac.doFinal(String.valueOf(email.trim()).getBytes());
      System.out.println(byte2hex(e));
  }
//0DFEE0968F44107479B6CF5784641060DB42952C197C7E8560C2B5F58925FAF4

坑:但是此时后端仅允许post方式。且参数是以get传递的。

成功获取到flag

Encrypted flag : 506920534F89FA62C1125AABE3462F49073AB9F5C2254895534600A9242B8F18D4E420419534118D8CF9C20D07825C4797AF1A169CA83F934EF508F617C300B04242BEEA14AA4BB0F4887494703F6F50E1873708A0FE4C87AC99153DD02EEF7F9906DE120F5895DA7AD134745E032F15D253F1E4DDD6E4BC67CD0CD2314BA32660AB873B3FF067D1F3FF219C21A8B5A67246D9AE5E9437DBDD4E7FAACBA748F58FC059F662D2554AB6377D581F03E4C85BBD8D67AC6626065E2C950B9E7FBE2AEA3071DC0904455375C66A2A3F8FF4691D0C4D76347083A1E596265080FEB30816C522C6BFEA41262240A71CDBA4C02DB4AFD46C7380E2A19B08231397D099FE

然后,解密吧。。

只能百度了,java又不熟,RSA更不熟,尤其还是这种hex的。逆源码都失败了。一个劲报错。(查百度,好像是因为啥空格之类的。打不过打不过)

最终发现一个好玩的,可以从keystore提取RSA私钥。这样一来,又继续美滋滋。

https://blog.csdn.net/zbuger/article/details/51690900

然后照猫画虎,提出私钥。此时祭出自己的一个无敌大件。之前从某次CTF安卓题提出的RSA解密脚本。(当时题目简单,加解密都给了,改个函数名就ok了。)

(╯°□°)╯︵ ┻━┻

要不是在线的解不了。才不会想起这个大招(已放到附件,记得将 密文to ascii 再 to base64。)。。。。。

通过在线工具,提取出公私钥,然后跑脚本。最终拿到flag。

DDCTF{1797193649441981961}

本文章首发在 网安wangan.com 网站上。

上一篇 下一篇
讨论数量: 0
只看当前版本


暂无话题~