CyBRICS CTF 2020 NetWork部分 WP

国内CTF流量分析的题目较少,就想着整理点东西

刚好这会有空把之前打的cybrics ctf 2020 的流量题的WP给写了


XCorp

CyBRICS CTF 2020 NetWork部分 WP_第1张图片


baby难度的题

拿到数据包直接用wireshark打开

根据提示我们将SMB对象导出


CyBRICS CTF 2020 NetWork部分 WP_第2张图片


可以得到几个文件,关键的就是那几个能用的exe(22KB的都是,那个xcorp是改了名的)

CyBRICS CTF 2020 NetWork部分 WP_第3张图片


打开显示需要输入用户名


CyBRICS CTF 2020 NetWork部分 WP_第4张图片


再去流量包里搜索得到用户名即可得到flag


CyBRICS CTF 2020 NetWork部分 WP_第5张图片
得到flag

CyBRICS CTF 2020 NetWork部分 WP_第6张图片




Google Cloud

一打开就是一堆ICMP报文。。
CyBRICS CTF 2020 NetWork部分 WP_第7张图片


随便看看可以在请求体中发现这样一些信息:

这个项目在github上可以找到

https://github.com/yarrick/pingfs

看了看大体意思就是在ICMP报文中携带消息是技术上可行的,除此之外并没有有用的信息。。


CyBRICS CTF 2020 NetWork部分 WP_第8张图片


所以现在当务之急就是讲ICMP报文中的内容提取出来

有MISC经验的同学此时应该想到binwalk了

拖到binwalk -e 里看看


CyBRICS CTF 2020 NetWork部分 WP_第9张图片


可以看出是有些图片文件在里面的

使用foremost提取我们可以得到几张图像,随便挑一张我们已经可以看到flag的轮廓了:


CyBRICS CTF 2020 NetWork部分 WP_第10张图片


但是这个还不是非常清晰,这是foremost本身对数据包的处理问题

现在就是要不猜,要不就去提取拼接真正的图像

对于后一种方法,我们查找文件头(JPG的是啥就不用多说了吧?)


CyBRICS CTF 2020 NetWork部分 WP_第11张图片


一直复制下来到文件尾即可


CyBRICS CTF 2020 NetWork部分 WP_第12张图片


Moneylovers


一开始打开数据包收集信息,无果

只是看到了一个不符合寻常的公网IP,还是HTTPS的,打开

CyBRICS CTF 2020 NetWork部分 WP_第13张图片


那现在就是需要从数据包提取密码了,这里也是题目最不常规的地方。。

因为是HTTPS,我们需要

在尝试了各种扫目录的脚本和软件而无果后,终于通过各种尝试发现TLS密钥在 ftp://95.217.22.76/

下下来后导入:


CyBRICS CTF 2020 NetWork部分 WP_第14张图片


终于我们又看到了熟悉的HTTP


CyBRICS CTF 2020 NetWork部分 WP_第15张图片


此时再回去观察银行主界面,有一个JS代码:

$(document).ready(function() {

    $("#kb").click(function(e){
        var mx = e.offsetX;
        var my = e.offsetY;
        $.ajax({
            type: "POST",
            url : "/key",
            data: JSON.stringify({x : mx, y: my}),
            contentType: "application/json",
            complete: function (a){
                if (a.responseJSON.status == "OK"){
                    $("#pas").val(a.responseJSON.key);
                }
                if (a.responseJSON.status == "FLAG"){
                    $("#bb2").hide();$("#pas").hide();$("#kb").hide();
                    $("#getflag").css("display","block");
                }
            }
        });

    });
    $("#getflag").click(function(){
        $.ajax({
            type: "GET",
            url : "/getflag",
            complete: function (a){
                if (a.responseJSON.status == "OK"){
                    $("#bb5").html(a.responseJSON.flag);
                }
                else{
                    $("#bb5").html("Forbidden");
                }
            }
        });
    });
});

分析代码可知,我们点击鼠标时,都会在/ key端点向服务器发出POST请求,请求体为JSON格式的鼠标坐标位置, 服务器与客户端通过这种方式进行数据的交换。

了解这个后,我们只需要提取数据包中的数据(导出为JSON格式)

并发送即可


from requests import session
import json

inputs = [
  {"x":383,"y":28},
  {"x":333,"y":101},
  {"x":113,"y":58},
  {"x":653,"y":50},
  {"x":588,"y":27},
  {"x":355,"y":141},
  {"x":385,"y":59},
  {"x":290,"y":185},
  {"x":111,"y":63},
  {"x":448,"y":20},
  {"x":141,"y":103},
  {"x":342,"y":105},
  {"x":92,"y":59},
  {"x":92,"y":59},
  {"x":168,"y":17},
  {"x":248,"y":179},
  {"x":206,"y":149},
  {"x":324,"y":13},
  {"x":421,"y":139},
  {"x":143,"y":106},
  {"x":639,"y":10},
  {"x":288,"y":100},
  {"x":318,"y":64},
  {"x":331,"y":186},
  {"x":409,"y":153},
  {"x":483,"y":110},
  {"x":43,"y":22},
  {"x":459,"y":57},
  {"x":108,"y":53},
  {"x":285,"y":104},
  {"x":248,"y":15},
  {"x":301,"y":185},
  {"x":648,"y":56},
  {"x":253,"y":27},
  {"x":258,"y":63},
  {"x":552,"y":108},
  {"x":106,"y":20},
  {"x":557,"y":145},
  {"x":584,"y":54}
]

s = session()
s.get("https://95.217.22.76/", verify=False)
URL = "https://95.217.22.76/key"
for inp in inputs:
    r = s.post(URL, json=inp, verify=False)
    print(r.text)

print(s.get("https://95.217.22.76/getflag", verify=False).text)

flag
cybrics{B4NK_S4V35_U_M0N3Y}

你可能感兴趣的:(比赛&刷题,WP)