JarvisOJ-MISC-WP

流量分析

远程登录协议

解法一:

过滤分组字节流搜索flag追踪到数据包

解法二:

题目是:远程登录协议。所以过滤talnet协议定位,追踪流找到flag

简单网管协议

直接过滤分组字节流,找到flag。也可以过滤网管协议(SNMP)定位在追踪流找到。

struts2漏洞

直接分组字节流过滤flag得俩:

根据题目提示是大写MD5,得flag。

但是感觉这个题目也太简单了吧。。。搜了下struts2,原来是一个apache框架。而且存在不少高危漏洞。(CVE-2012-0838、CVE-2013-2251,2248、CVE-2016-3081)大多数是属于远程命令、代码执行漏洞。

shell流量分析

发现主要是57370端口(控制端)和2333端口(被控端)间的通信。通过“$”不难猜到是shell交互。

过滤分组字节流定位flag发现一段有flag{xxxxxxxxx}:

追踪TCP流:

分析shell交互找到以下几段可疑点:

把function.py运行发现输出:

审计代码发现import base64结合可疑点cat flag猜测应该是对mbZoEMrhAO0WWeugNjqNw3U6Tt2C+rwpgpbdWRZgfQI3MAh0sZ9qjnziUKkV90XhAOkIs/OXoYVw5uQDjVvgNA==用fuction的decode函数进行了加密。

然后在py脚本里面添加一段代码即可:

运行脚本得到flag:

Webshell分析

过滤分组字节流,分别过滤shell和flag定位追踪流,发现只是变量或名字并没有内容。

题目要求分析webshell先过滤出http流。最后找到base64字符串(有点脑洞啊)aHR0cHM6Ly9kbi5qYXJ2aXNvai5jb20vY2hhbGxlbmdlZmlsZXMvQWJUekEyWXRlRmpHaFBXQ2Z0cmFvdVZEM0I2ODRhOUEuanBn

解密发现网址:访问的二维码扫描得flag

SCAN

是个log日志,notepad打开发现是个二进制文件。用wireshark打开(竟然可以….)。第一个包就是一个ICMP协议的Ping包,是192.168.0.9->192.168.0.99的大量访问。

过滤ICMP协议,包并不多。(可以一个个尝试)

可以根据时间段划分为四部分:0、1200、1400、1600。

第一次是192.168.0.9->192.168.0.99然后中间一部分交互。

第二次是192.168.0.1->192.168.0.99

第三次是192.168.0.254->192.168.0.99

第四次是192.168.0.199->192.168.0.99

所以第四次的包名字sha256加密后的flag。

隐写术

教练,我想打CTF

用StegSolve打开图片,LSB最低位通道分析,发现文件头为PK(压缩包文件头)

把二进制导出修改文件后缀为zip:

发现压缩文件损坏,这时候可以用WinRAR修复功能。(扯一句,WinRAR确实比Bandzip、7z什么的好用…省赛就是没用WinRAR损失一道题目。不过WinRAR有广告,大家可以去52破解下载去广告版。dalao也可以自己去壳破解改入口)

成功修复解压后,打开文件发现是ELF文件(Linux中类似Windows的exe文件,可以直接执行)

直接Linux运行得flag:

Class10

拿到一个没有后缀不知名文件。在kali里面用file命令检查一下:是个二进制文件

binwalk分析一下:

有两段zlib压缩后的数据,第二段为default compression。

然后strings命令分析:

发现IHDR,RGB,IDAT等和图像相关的字符。

用binwalk分理处class10中的压缩数据:

用python打开zlib:

发现二进制的长度为841,正好是29^2。联系上面得到的信息,猜测应该是二进制转成图像。

写个python脚本:

# -*- coding: utf-8 -*-

from PIL import Image

SIZE = 29
img = Image.new("RGB",(SIZE,SIZE))
with open("./F4289") as f:
   str = f.read()

i = 0
for y in xrange(SIZE):
   for x in xrange(SIZE):
       if str[i] == '0':
           img.putpixel([x,y],(0,0,0))
       else:
           img.putpixel([x,y],(255,255,255))
       i = i + 1
img.save("ima.png")

得到一张二维码图片:扫描得到flag。

炫酷的战队logo

下载后发现是一个打不开的BMP文件。

010打开后发现BMP文件头被抹掉。

查阅信息后发现BMP位图信息头为一个结构体长40。大体固定为:

修复后可以打开,用binwalk分析发现有zlib提取后无果。用nodepad++打开发现文件后面有一堆数据,而且有IHDR字样,猜测应该隐藏一了张png图片,但是这张图片的文件头也被损坏了,所以binwalk分析不出来。

修改文件头无果仍然打不开

看别人写的wp是有一个crc校验值,然后可以反推高度宽度。但是由于Windows系统无视crc校验值(即crc校验值不对也可以显示,但是Linux就不可以)所以利用Window的特点可以达到修改图片高、宽度来隐藏信息的目的。

python爆破:

for i in range(16,256):
   print hex(i)[2:]
   b=hex(i)[2:]
   a=('89504E470D0A1A0A0000000D49484452000001'+b+'000001000802000000F37A5E12000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000072549444154785EEDDAB996DD380E0050E70E2B745491B3F9FFCF1B2D04454214A537AF8EDB5D736F262E00A807CAEEE507000000000000000000DFDCC7E77F569F1FE5F9EFF2F3D7EFADBCC54D85B1F2F7AF9F6564E0EF3E2CFC059A3B77185EAB729D0ECBC51AEE0E5B94E18AE64A96F9947194EBDEF5AE54458E76339DD53C75E129F35D90B2A13FF670F045FD516E4E128B6719F3618F0439F85794FF3FC5AF255665EB3EF16641702B7D410E6DF39DFB74B5F4EAE5EED51661B8A25E903A7B64BBCC3535DF35983D020E2B9C5FBDB2E57C8CC6BCE252519F6638F89AA8E4598C47ABD361DBB3F667FC82F217AFC51FFCB2ABB2A6CECE7F0C78D3E9261D6D5C7AAFE9EBB61B3F3E874D9E3B36760F1BB94C1E17E361AEE47657BBFF54E7B27B50407759EF945DD3227BA34FC278F03551FFB35262F52B19EB1BDAB479BEA0FCC50BF1E3A73CBFC7BCE6CD9A606E7093A23BB7A1DAD5779D18BBD2058EFDC37B5D2663EE3E57BD491FFBD275E1E30A8B1263585053C3C5FCA6965112A6733C90236CCE8365A468266A998B18EE17AF3E3F2E2A2DA5C6535F469242943DBF7F97028E439FCB3F6B3336F5366FEE71FC08D56E3EDB574D6B8277B57D5D447BAF43CF7A7515BBD2C20830DC5F26CBDC835CCDCDDB2C253EAF7033AD67D11EFE52BAD0A3B2F6894B39C2260DE6A831514FDC588F735ABF8CE63CFDF1E3695A6F0A7144887CF12A73AE919A31BE925544791AFF51EDB1EC6611BCE7D48DD1BCFB483CDDF7616EFA22E2B7EA92BEC71FE4EA8BEB86E615F665A41A0F83F82365595D54B7352E736C72844D3F385CB228E311BF9CAC2C8B73C66C0ED2CFC7D329472B85682394A912EDAAE056EC3EC78B81A7F1FBB936F2A61F9ED604EF4ADD57A566BDEFC3DCD6C5287EEAFC787C90ABBF499B6715E63206AB23D0229DE164504655C34C830C23F4834D3D8BBAB21F3EECE9E29CE99DD6DDFD7C3C0D0F1252883E4254B33EE55C23A38C6D8CE7F1FB5DC7BE2286CBBA6951F0A6D47D9BA6E7EA746DCB2BB9AD8BFE5634CA4433FE20577F9336CF2BDC0DD747F18B2761066534E6B3BBE19A3CD854B559276AF9D95E774CC72972C87E3E9E5E29F522C3F29C738D8C321E11D6A7A7F1633CA5CBDB57FBD8B42E78C7A8AF5BD1ADB75DD85F866AD4D6D5BEA74EDDE72A2BBAF9C715861C244ABC28726054C6613EBBBBBEEDB98AA3BAC532358F9E635C9D759F8FA769A929C4B9CAAEC287E76E16D5ED7D4DB7F14B5DEDCAC569FBBE6C5A14BC69D0D7BDA689BB355FF73F3C1D616F73E5AFC2E66ED732DF668F42CBDABA7B58E1582AE3E357933685BF12CBF27D1FD711452E73837A7FFEFA8C64CDC24DAA26658DD5D35ACB9E589333AC6A4DAB69B06365AE30069EC76F468FC579FBFE3CAD09DE156D376BB4DAE9BDB6D18F45FDE8A9AD3B65B29D9BE74A57BA9AEE8A123A35C4C5D671C1452A631462B67D374E7C1CED3C5FE6061BEBAED3EB4E8BE3BF90F76FE6483A5022C49AF10FDABCE369B0E16FB1BA3EC1E622FEF81DAE62FBBE715A13BC2BFAF3AED1CEFDDFF779EDE8343CBE154599CC73D7B9D295EE5CEFCA33EDF6F3AE625870712AA38F32DBDA49C9FB63A54F4417346D3CE662A2597DAC5DE2F7F3F1347C9F211D76906153D34C8335199BF3B5B15E8E5F27AA76C53E3BAD09FED5CA0DC837866F2BBE797FECBBB67FAC7D46F9C62EFF8AC1F7F4673FA3F52FBCFEA0E65B2BF7CA67F4FFC33FF119D55BF0CF69FEEDDDE1A54BF97E843FE66B4BBD8AF6C7FFA11E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080A11F3FFE0B3B73B0698B976EA80000000049454E44AE426082').decode("hex")
   f=open(b+'.png',"wb")
   f.write(a)
   f.close()

挨个查看得到flag(眼力要好才能发现….):

上帝之音

根据提示用MATLAB查看时域波形(不太懂…通信内容..):几乎全看(chao)别人wp

[x,fs] = wavread('godwave.wav');

N = lenthg(x);

可以看出来这是OOK信号,因此可以先全波整流,然后低通滤波解调出基带信号。(dalaoshuo)

fc = fs / 100;

lpf = fir1(30,fc / (fs / 2) );

x = abs(x);

xs = filter(lpf, 1, x);

绘制基带信号:

通过观察,以64个点作为抽样判决周期,提取出基带数据,即线路码。

然后根据第二个提示:是曼彻斯特码,将其解码。查看16进制:8950 4e47 0d0a是个gif格式的图像,改后缀得到二维码,扫描得flag。

基带解调MATLAB代码:

close all; clear; clc;

[x, fs] = wavread('godwave.wav');
N = length(x);

fc = fs / 100;
lpf = fir1(30, fc / (fs / 2));

x = abs(x);
xs = filter(lpf, 1, x);
figure;
plot(xs(1:1000));
ts = [48:64:N];

xb = int8(xs(ts) > 0.3);

fp = fopen('demod.txt', 'w');
for i = xb
fprintf(fp, '%d', i);
end
fclose(fp);

曼彻斯特解码Python:

with open('demod.txt') as fp:
s = fp.read()

m = ''
for i in range(0, len(s), 2):
if (s[i] == '1') and (s[i+1] == '0'):
 m += '1'
elif (s[i] == '0') and (s[i+1] == '1'):
 m += '0'
else:
 print('wrong with index %d' % i)
 exit()

with open('demod.bin', 'wb') as fp:
for i in range(0, len(m), 8):
 byte = bytes([int(m[i:i+8], 2)])
 fp.write(byte)

内存取证

取证2

用到取证神器:volatility。解压缩到的一个vmem文件(VMware的虚拟机内存快照文件)和一个不知名的文件。

用volatility分析mem.vmem:

可以得到profile类型

查看一下进程:

发现:

这是一个加密工具。对于TureCrypt专门破解工具:Elcomsoft Forensic Disk Decryptor

dumpTrueCrypt进程:

然后用TurCrypt专门破解工具:Elcomsoft Forensic Disk Decryptor

破解suspicion。

挂载得到flag:

Other

You-Nedd-Python

运行给的flag.py提示输入key:(flag.py的运行逻辑是把数据base64解码,然后zlib解压,marshal.loads函数将数据流转换成code object。而code object是可以转化为pyc的)

我们还有一个文件没用到,文件名字是:key_is_here_but_do_you_know_rfc4042推测应该是用这个文件来获取key。

我们打开发现乱码:

根据提示:cfc4042(rfc4042中定义了utf-9和utf-18两种Unicode转换编码格式)。然后用utf-9模块,把utf-9转换成utf-8编码:

#coding utf-8
import utf9

utf9_file = open('key_is_here_but_do_you_know_rfc4042','rb')
utf9_data = utf9_file.read()
decoded_data = utf9.utf9decode(utf9_data)

print decoded_data

decoded_file = open('decoded','w')
decoded_file = write(decode_data)
decoded_file.close()

得到:

看别人wp是仔细观察法,发现除了“”外其他符号都是Python中的算术运算符,括号表示优先级。然后脑洞下划线的个数为对应数字。(给脑洞大佬掉头..)

然后把数字转为16进制然后转化为ASCII字符就是key。我修改的脚本如下:

#coding = utf-8

import binascii

_ = 1
__ = 2
___ = 3
____ = 4
_____ = 5
______ = 6
_______ = 7
________ = 8
_________ = 9
n = _____*((__//__+___+______-____%____)**((___%(___-_))+________+(___%___+_____+_______%__+______-(______//(_____%___)))))+__*(((________/__)+___%__+_______-(________//____))**(_*(_____+_____)+_______+_________%___))+________*(((_________//__+________%__)+(_______-_))**((___+_______)+_________-(______//__)))+_______*((___+_________-(______//___-_______%__%_))**(_____+_____+_____))+__*(__+_________-(___//___-_________%_____%__))**(_________-____+_______)+(___+_______)**(________%___%__+_____+______)+(_____-__)*((____//____-_____%____%_)+_________)**(_____-(_______//_______+_________%___)+______)+(_____+(_________%_______)*__+_)**_________+_______*(((_________%_______)*__+_______-(________//________))**_______)+(________/__)*(((____-_+_______)*(______+____))**___)+___*((__+_________-_)**_____)+___*(((___+_______-______/___+__-_________%_____%__)*(___-_+________/__+_________%_____))**__)+(_//_)*(((________%___%__+_____+_____)%______)+_______-_)**___+_____*((______/(_____%___))+_______)*((_________%_______)*__+_____+_)+___//___+_________+_________/___

print n
hexn = hex(n)[2:]
print hexn

key = ''

for i in range(len(hexn)/2):
key += chr(eval('0x'+hexn[2*i:2*i+2]))

print key

输入key:

再回到出发点flag.py输入key发现又让输入flag

根据一开始提到的,编写代码将code这个Python代码对象加上相应pyc文件头信息提取出来写入磁盘生成pyc文件(关于pyc文件类似于java编译后的.class;运行机制类比java的JVM)。然后反编译得到源码。

在线python反编译:

#!/usr/bin/env python
# encoding: utf-8

import hashlib

def sha1(string):
   return hashlib.sha1(string).hexdigest()


def calc(strSHA1):
   r = 0
   for i in strSHA1:
       r += int('0x%s' % i, 16)
   
   return r


def encrypt(plain, key):
   keySHA1 = sha1(key)
   intSHA1 = calc(keySHA1)
   r = []
   for i in range(len(plain)):
       r.append(ord(plain[i]) + int('0x%s' % keySHA1[i % 40], 16) - intSHA1)
       intSHA1 = calc(sha1(plain[:i + 1])[:20] + sha1(str(intSHA1))[:20])
   
   return ''.join(map((lambda x: str(x)), r))

if __name__ == '__main__':
   key = raw_input('[*] Please input key:')
   plain = raw_input('[*] Please input flag:')
   encryptText = encrypt(plain, key)
   cipherText = '-185-147-211-221-164-217-188-169-205-174-211-225-191-234-148-199-198-253-175-157-222-135-240-229-201-154-178-187-244-183-212-222-164'
   if encryptText == cipherText:
       print '[>] Congratulations! Flag is: %s' % plain
       exit()
   else:
       print '[!] Key or flag is wrong, try again:)'
       exit()

分析加密函数:def encrypt(plain, key)

在for语句,可以知道到明文长度和密文长度相同,核心加密语句为第6,7行,算法使用ord函数取得明文每个字符的ASCII整型值,int函数内容为明文每个字符位置模40访问由调用sha1函数返回的40位16进制keySHA1字符串中的16进制数并转化为10进制数与由调用calc函数返回的整型值相减,然后将ord函数和int计算所得值作为密文添加到r列表,第7行更新intSHA1值,第9行转换为“-185-147-211…”格式并返回。 这里我们知道了密文cipherText,密钥key,加密算法encrypt,从而能逆推出解密算法,只要把密文值减去int函数中的值并对结果使用chr函数取得明文plain。

贴别人的解密脚本:

#coding:utf-8
#decrypt.py

import hashlib

def sha1(string):
return hashlib.sha1(string).hexdigest()

def calc(strSHA1):
r = 0
for i in strSHA1:
r += int("0x%s" % i, 16)
return r

def decrypt(strCipher,strKey):
listCipher = map(lambda x: int(x),strCipher.replace('-',' -')[1:].split(' '))
strKeySHA1 = sha1(strKey)
intSHA1 = calc(strKeySHA1)
strPlain = ''
for i in range(len(listCipher)):
strPlain += chr(listCipher[i] + intSHA1 - int("0x%s" % strKeySHA1[i%40],16))
intSHA1 = calc(sha1(strPlain[:(i + 1)])[:20] + sha1(str(intSHA1))[:20])
return strPlain

if __name__ == '__main__':
strCipher= '-185-147-211-221-164-217-188-169-205-174-211-225-191-234-148-199-198-253-175-157-222-135-240-229-201-154-178-187-244-183-212-222-164'
strKey = 'I_4m-k3y'
strPlain = decrypt(strCipher, strKey)
print strPlain

这题还算是MISC吗…..真麻烦,要是不参考别人文章还真是搞不出来。

参考:

https://blog.csdn.net/Magic1an/article/details/77418275
https://hackfun.org/2017/01/02/%E4%BA%BA%E7%94%9F%E8%8B%A6%E7%9F%AD%EF%BC%8C%E4%BD%A0%E9%9C%80%E8%A6%81%E7%94%A8Python%E6%9D%A5%E5%81%9ACTF/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部