Halo

很无聊的一道题,

aWdxNDs6NDFSOzFpa1I1MWliT09w

正常base64解出来是

igq4;:41R;1ikR51ibOOp

我还以为是凯撒什么的,后来找到类似的题目,base64异或,思路应该是在某比赛出现过。

解密脚本如下

from base64 import *
b=b64decode("aWdxNDs6NDFSOzFpa1I1MWliT09w")

data=list(b)

for k in range(0,200):
    
    key=""

    for i in range(len(data)):

        key+=chr(data[i]^k)

    if 'flag' in key:
        print (key+"\n")

参考资料:
知乎

baby_forensic

接触的第一道内存取证,开头很有意思,学到了很多,最后一步卡死,非常自闭了。仅作思路分享,wp待更新。

首先我们需要用到取证工具Volatility

Volatility是一款开源的,基于Python开发的内存取证工具集,可以分析内存中的各种数据。Volatility支持对32位或64位Wnidows、Linux、Mac、Android操作系统的RAM数据进行提取与分析。

volatility 使用:

volatility -f <文件名> –profile=<配置文件> <插件> [插件参数]

获取–profile的参数

常用的命令如下:

命令 功能
cmdline/cmdscan 列出历史cmd命令
filescan 扫描文件,可配合grep使用
netscan 扫描建立的连接和套接字,类似于netstat
pslist/psscan 列出进程列表
svcscan 扫描windows服务列表
screenshot 显示GDI样式的截屏
memdump 从内存dump进程的内存
dumpfiles 从内存dump文件

先使用imageinfo插件先来猜测dump文件的profile值

volatility -f data.vmem imageinfo

1

根据上图可知系统为32位的windows xp sp2,所以指定系统属性命令为“–profile=WinXPSP2x86”

列举进程

volatility -f data.vmem --profile=WinXPSP2x86 pslist

2

可以看到这里有cmd.exe、wordpad.exe等与文字处理有关的进程。

先来查看cmd内容

volatility -f data.vmem --profile=WinXPSP2x86 cmdscan

3

似乎是得到一些线索,不过不是很明确,简单搜索了一下没得到思路。

hill_matrix 3,2,2,9,7,7,6,4,9

再使用notepad插件查看下是否有文本内容

结果是没有

查看可疑文件

#搜索文档
volatility -f data.data --profile=Win7SP1x64 filescan | grep "doc\|docx\|rtf"
#搜索图片
volatility -f data.vmem --profile=WinXPSP2x86 filescan | grep -E 'jpg|png|jpeg|bmp|gif'
#搜索桌面
volatility -f data.data --profile=Win7SP1x64 filescan | grep "Desktop"

4

搜索桌面时未找到Desktop的路径,猜测是名字不对。查询后知道Windows XP的桌面地址应该是桌面

再次搜索

volatility -f data.vmem -profile=WinXPSP2x86 filescan | grep "桌面"

5
桌面上有东西,disk.zip

这个名字和格式都很让人敏感。

如果没有考虑到这一步的话,如果直接通过命令

volatility -f data.vmem --profile=WinXPSP2x86 cmdline

也可以看出来通过cmdline看到有一个在桌面生成disk.zip的操作
kali
提取出来看看

volatility -f data.vmem -profile=WinXPSP2x86 dumpfiles -Q 0x00000000016a8718 -n --dump-dir=./

6

得到文件file.None.0x81367a30.disk.zip.dat

更改后缀为zip,解压

得到disk.img

从这里开始这个思路就非常艹了

使用工具diskgenius装载disk.img

磁盘→打开虚拟磁盘文件→主分区→浏览文件

发现usb.pcapng

7

套娃题开始了

明显是usb流量分析

8

tshark提取

tshark -r usb.pcapng -T fields -e usb.capdata > usbdata.txt

9

键盘数据包的数据长度为8个字节,击键信息集中在第3个字节

鼠标的有空再研究

#python脚本
#自动识别大小写+删除
normalKeys = {"04":"a", "05":"b", "06":"c", "07":"d", "08":"e", "09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j", "0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o", "13":"p", "14":"q", "15":"r", "16":"s", "17":"t", "18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y", "1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4", "22":"5", "23":"6","24":"7","25":"8","26":"9","27":"0","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\\","32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".","38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
shiftKeys = {"04":"A", "05":"B", "06":"C", "07":"D", "08":"E", "09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J", "0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O", "13":"P", "14":"Q", "15":"R", "16":"S", "17":"T", "18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y", "1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$", "22":"%", "23":"^","24":"&","25":"*","26":"(","27":")","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"<NON>","33":"\"","34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
output = []
keys = open('usbdata.txt')
for line in keys:
    try:
        if line[0]!='0' or (line[1]!='0' and line[1]!='2') or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0' or line[6:8]=="00":
             continue
        if line[6:8] in normalKeys.keys():
            output += [[normalKeys[line[6:8]]],[shiftKeys[line[6:8]]]][line[1]=='2']
        else:
            output += ['[]']
    except:
        pass
keys.close()

flag=0
print("".join(output))
for i in range(len(output)):
    try:
        a=output.index('<DEL>')
        del output[a]
        del output[a-1]
    except:
        pass
for i in range(len(output)):
    try:
        if output[i]=="<CAP>":
            flag+=1
            output.pop(i)
            if flag==2:
                flag=0
        if flag!=0:
            output[i]=output[i].upper()
    except:
        pass
print ('output :' + "".join(output))

10

提取出字符串

'ygbtsemjfpaj'.hill_decode()

很明显了,就是希尔加密

之前cmd中得到的应该是它的矩阵

写脚本求解**(从以下内容开始,不确定正误,等待官方wp)**

from numpy import *
#strs = 'ygbtsemjfpaj'
res1 = [24,6,1]
res2 = [19,18,4]
res3 = [12,9,5]
res4 = [15,0,9]
a =[[3,2,2],[9,7,7],[6,4,9]]

print(dot(mat(res1),mat(a))%26)
print(dot(mat(res2),mat(a))%26)
print(dot(mat(res3),mat(a))%26)
print(dot(mat(res4),mat(a))%26)

'''
[[ 2 16 21]]
[[ 9 24 18]]
[[17  3  2]]
[[21 14  7]]

'''
r1 = [2,16,21,9,24,18,17,3,2,21,14,7]
for i in r1:
    print(chr(ord('a')+i),end='')

11

FLAG为

FLAG{cqvjysrdcvoh}

参考资料:

关于usb流量分析

CTF内存取证入坑指南!稳! - FreeBuf专栏·潜心学习的小白帽
最近,斗哥在刷CTF题目。突然刷到了内存取证类,了解到了一款牛逼的工具——Volatility,在kali linux也默认安装好了这个工具,正好可以好好学习一波。 Volatility 简介: Volatility是一款开源的,基于Python开发的…
内存取证三项CTF赛题详解 - FreeBuf互联网安全新媒体平台
0×00 题目下载 链接:https://pan.baidu.com/s/1hskpW48 密码: ph2d 0×01 题目说明 描述:一天下午小白出去吃饭,临走之前还不忘锁了电脑,这时同寝室的小黑想搞点事情,懂点黑客和社工…
浅谈内存取证 - FreeBuf专栏·i春秋学院
i春秋作家:lem0n 原文来自:浅谈内存取证 0×00 前言 网络攻击内存化和网络犯罪隐遁化,使部分关键数字证据只存在于物理内存或暂存于页面交换文件中,这使得传统的基于文件系统的计算机取证不能有效应对.内存取…