经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 网络安全 » 查看文章
CTF中文件包含的一些技巧
来源:cnblogs  作者:i春秋学院  时间:2018/10/17 8:59:48  对本文有异议

i春秋作家:lem0n

原文来自:浅谈内存取证

0x00 前言

网络攻击内存化和网络犯罪隐遁化,使部分关键数字证据只存在于物理内存或暂存于页面交换文件中,这使得传统的基于文件系统的计算机取证不能有效应对.内存取证作为传统文件系统取证的重要补充,是计算机取证科学的重要组成部分,通过全面获取内存数据、详尽分析内存数据,并在此基础上提取与网络攻击或网络犯罪相关的数字证据,近年来,内存取证已赢得安全社区的持续关注,获得了长足的发展与广泛应用,在网络应急响应和网络犯罪调查中发挥着不可替代的作用.首先回顾了内存取证研究的起源和发展演化过程;其次介绍了操作系统内存管理关键机制;然后探讨了内存取证的数据获取和分析方法,归纳总结目前内存取证研究的最新技术;最后讨论了内存取证存在的问题、发展趋势和进一步的研究方向.

?                                                                  ——《内存取证研究与进展[J].软件学报,2015, 26(5): 1151-1172》

0x01 实验材料

kali 渗透测试系统

easy_dump.img 内存镜像

Volatility Framework 内存取证工具

TestDisk 文件恢复工具

0x02 Volatility Framework

volatility 框架是一款用于易失性内存取证的重量级框架。在该框架下我们可以完成许多取证的操作,获取我们想取得的信息。其支持的操作系统也非常广泛,同时支持 windows , linux, Mac OSX,甚至也支持 Android 手机使用ARM处理器的取证。因此,它也是所有网络取证爱好者的必学框架。

  1. volatility 使用:
  2.         volatility -f <文件名> -–profile=<配置文件> <插件> [插件参数]
  3. 通过volatility --info获取工具所支持的profileAddress SpacesScanner ChecksPlugins
  4. 常用插件:
  5. imageinfo:显示目标镜像的摘要信息,知道镜像的操作系统后,就可以在 profile 中带上对应的操作系统
  6. pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以
  7. psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程
  8. pstree:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程
  9. mendump:提取出指定进程,常用foremost 来分离里面的文件
  10. filescan:扫描所有的文件列表
  11. hashdump:查看当前操作系统中的 password hash,例如 Windows SAM 文件内容
  12. svcscan:扫描 Windows 的服务
  13. connscan:查看网络连接

0x03 实验过程

利用 volatility -f easy_dump.img imageinfo查看镜像信息

  1. root@kali:~/Desktop# volatility -f easy_dump.img imageinfo
  2. Volatility Foundation Volatility Framework 2.6
  3. INFO    : volatility.debug    : Determining profile based on KDBG search...
  4.           Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418
  5.                      AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
  6.                      AS Layer2 : FileAddressSpace (/root/Desktop/easy_dump.img)
  7.                       PAE type : No PAE
  8.                            DTB : 0x187000L
  9.                           KDBG : 0xf8000403f070L
  10.           Number of Processors : 1
  11.      Image Type (Service Pack) : 0
  12.                 KPCR for CPU 0 : 0xfffff80004040d00L
  13.              KUSER_SHARED_DATA : 0xfffff78000000000L
  14.            Image date and time : 2018-09-28 09:02:19 UTC+0000
  15.      Image local date and time : 2018-09-28 17:02:19 +0800

根据Suggested Profile(s)值猜测他是Win7SP1x64,所以利用--profile=Win7SP1x64

利用volatility -f easy_dump.img --profile=Win7SP1x64 hashdump 查看当前操作系统中的 password hash

  1. root@kali:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 hashdump
  2. Volatility Foundation Volatility Framework 2.6
  3. Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
  4. Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
  5. n3k0:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

将hash复制到文档中,用john FileName --format=nt进行密码破解(本次破解为空密码)

注:john破解的密码会保存在本地目录.john中的john.pot文件,如需再次破解相同密码需要使用--show或者将john.pot文件删除。

  1. root@kali:~/Desktop# john hashdump.txt  --format=NT
  2. Using default input encoding: UTF-8
  3. Rules/masks using ISO-8859-1
  4. Loaded 3 password hashes with no different salts (NT [MD4 128/128 AVX 4x3])
  5. Press 'q' or Ctrl-C to abort, almost any other key for status
  6.                  (Administrator)
  7.                  (Guest)
  8.                  (n3k0)
  9. 3g 0:00:00:00 DONE 2/3 (2018-10-15 00:17) 150.0g/s 130550p/s 130550c/s 391650C/s money..hello
  10. Use the "--show" option to display all of the cracked passwords reliably
  11. Session completed

利用volatility -f easy_dump.img --profile=Win7SP1x64 psscan查看所有进程,通过所有进程来查看是否有可疑进程出现,进行进一步取证。

  1. root@kali:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 psscan
  2. Volatility Foundation Volatility Framework 2.6
  3. Offset(P)          Name                PID   PPID PDB                Time created                   Time exited                  
  4.  
  5. ------
  6.  
  7. 0x000000001a453a70 WmiApSrv.exe       2760    492 0x000000001a9ab000 2018-09-28 09:01:58 UTC+0000                                 
  8. 0x0000000022e4e060 VSSVC.exe          2168    492 0x0000000002a44000 2018-09-28 09:01:39 UTC+0000                                 
  9. ···            
  10. 0x0000000022fd1b30 notepad.exe        2616   1312 0x000000000221c000 2018-09-28 09:01:51 UTC+0000                                 
  11. ···                  
  12. 0x0000000023963b30 DumpIt.exe         2500   1312 0x000000000788b000 2018-09-28 09:02:18 UTC+0000                                 
  13. 0x00000000239712a0 svchost.exe         716    492 0x000000000b836000 2018-09-28 09:01:34 UTC+0000                                 
  14. ···                              
  15. 0x00000000250a3b30 dllhost.exe        2900    600 0x00000000226ab000 2018-09-28 09:02:14 UTC+0000                                 
  16. 0x0000000025101930 dllhost.exe        2932    600 0x000000000d0c2000 2018-09-28 09:02:15 UTC+0000                                 
  17. 0x0000000025131b30 smss.exe            248      4 0x000000001a0a6000 2018-09-28 09:01:33 UTC+0000                                 
  18. 0x0000000025749b30 System                4      0 0x0000000000187000 2018-09-28 09:01:33 UTC+0000

通过观察进程可以看到 DumpIt.exe此项进程,这个便是dump内存时的进程。

进程中有notepad.exe进程PID为2616我们提取一下,看看有无线索.

利用volatility -f easy_dump.img --profile=Win7SP1x64 memdump -p 2616 -D ./文件将以进程号命名

  1. root@kali:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 memdump -p 2616 -D ./
  2. Volatility Foundation Volatility Framework 2.6
  3. ************************************************************************
  4. Writing notepad.exe [  2616] to 2616.dmp

通过strings命令查看进程中有无关于flag的文字提示

  1. root@kali:~/Desktop# strings -e l 2616.dmp | grep flag
  2. flag{flag is not here,but I put an strange jpg for you,hope you like it :)}
  3. flag{flag is not here,but I put an strange jpg for you,hope you like it :)}
  4. flag{flag is not here,but I put an strange jpg for you,hope you like it :)}
  5. ···
  6. flag{flag is not here,but I put an strange jpg for you,hope you like it :)}
  7. ···
  8. usbflags\0E0F00020100
  9. usbflags\0E0F00030102
  10. usbflags\0E0F00080100

根据他的提示可以了解到flag并不在其中,应该在一个奇怪的图片里。

利用volatility -f easy_dump.img --profile=Win7SP1x64 filescan | grep -E 'jpg|png|jpeg|bmp|gif'查看内存镜像中的文件,观察有无提示中所说的图片。

  1. root@kali:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 filescan | grep -E 'jpg|png|jpeg|bmp|gif'
  2. Volatility Foundation Volatility Framework 2.6
  3. 0x000000002408c460     32      0 RW---- \Device\HarddiskVolume1\phos.jpg

内存镜像中只有phos.jpg这一张图片,下面尝试提取出来

利用volatility -f easy_dump.img --profile=Win7SP1x64 dumpfiles -Q 0x000000002408c460 -n --dump-dir=./插件进行文件提取

-Q参数使用物理偏移量进行转储

-n以文件名保存

--dump-dir=目标存储位置

  1. root@kali:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 dumpfiles -Q 0x000000002408c460 -n --dump-dir=./
  2. Volatility Foundation Volatility Framework 2.6
  3. DataSectionObject 0x2408c460   None   \Device\HarddiskVolume1\phos.jpg
  4. SharedCacheMap 0x2408c460   None   \Device\HarddiskVolume1\phos.jpg

image.png

图片中并没有需要的内容,

因为文字提示是在2616.bmp中给出的,因此将之前提取出来的2616.dmp进行文件提取看看会不会有线索。

利用foremost 2616.dmp提取文件

  1. root@kali:~/Desktop# foremost 2616.dmp
  2. Processing: 2616.dmp
  3. |***|
  4. root@kali:~/Desktop# cat output/audit.txt
  5. Foremost version 1.5.7 by Jesse Kornblum, Kris Kendall, and Nick Mikus
  6. Audit File
  7. Foremost started at Mon Oct 15 04:14:57 2018
  8. Invocation: foremost 2616.dmp
  9. Output directory: /root/Desktop/output
  10. Configuration file: /etc/foremost.conf
  11. ------------------------------------------------------------------
  12. File: 2616.dmp
  13. Start: Mon Oct 15 04:14:57 2018
  14. Length: 298 MB (312721408 bytes)
  15. Num  Name (bs=512)         Size  File Offset     Comment
  16. 0:  00097439.htm          257 B        49889147     
  17. ···
  18. 27: 00097458.htm          163 B        49898571      
  19. 28: 00001838.dll           8 KB          941352      07/14/2009 00:07:09
  20. 29: 00500704.jpg           1 MB       256360448      
  21. 30: 00491298.htm          231 B       251544976      
  22. 31: 00491300.htm          231 B       251546000      
  23. 32: 00490508.zip          48 KB       251140554      
  24. Finish: Mon Oct 15 04:15:11 2018
  25. 33 FILES EXTRACTED
  26. jpg:= 1
  27. htm:= 30
  28. zip:= 1
  29. exe:= 1
  30. ------------------------------------------------------------------
  31. Foremost finished at Mon Oct 15 04:15:11 2018

对提取的文件进行分析,发现其中zip文件中包含一个img镜像利用binwalk message.img 分析其包含的数据。

  1. root@kali:~/Desktop/output/zip# binwalk message.img
  2.  
  3. DECIMAL       HEXADECIMAL     DESCRIPTION
  4. --------------------------------------------------------------------------------
  5. 0             0x0             Linux EXT filesystem, rev 1.0, ext2 filesystem data, UUID=c12b8ec9-5ef5-4b91-8b4d-f827e81fe81f
  6. 67697         0x10871         Unix path: /work/HuWangBei/1/message

里面包含一个ext2的文件系统用binwalk -e message.img 分离出来

  1. root@kali:~/Desktop# binwalk -e message.img
  2.  
  3. DECIMAL       HEXADECIMAL     DESCRIPTION
  4. --------------------------------------------------------------------------------
  5. 0             0x0             Linux EXT filesystem, rev 1.0, ext2 filesystem data, UUID=c12b8ec9-5ef5-4b91-8b4d-f827e81fe81f
  6. 67697         0x10871         Unix path: /work/HuWangBei/1/message

挂载文件系统

  1. root@kali:~/Desktop# cd _message.img.extracted/
  2. root@kali:~/Desktop/_message.img.extracted# ls
  3. 0.ext  ext-root
  4. root@kali:~/Desktop/_message.img.extracted# mount 0.ext /mnt/
  5. root@kali:~/Desktop/_message.img.extracted# cd /mnt/
  6. root@kali:/mnt# ls
  7. hint.txt  lost+found

里面只有一个txt文件打开后发现里面是类似坐标的数字,由之前的提示说一张奇怪的图片联想这可能是图片的坐标点,所以编写python脚本尝试将图片提取出来。

  1. root@kali:/mnt# cat hint.txt
  2. 10 10
  3. 10 11
  4. 10 12
  5. 10 13
  6. ···
  7. 269 265
  8. 269 266
  9. 269 267
  10. 269 268
  11. 269 269

python脚本:

  1. import Image
  2. flag_image = Image.new('RGB',(300,300),(0,0,0))
  3. f = open('hint.txt')
  4. for line in f.readlines():
  5.     point = line.split()
  6.     flag_image.putpixel([int(point[0]),int(point[1])],(255,255,255))
  7. f.close()
  8. flag_image.save('flag_image.jpg')

image.png

识别结果:Here is the vigenere key: aeolus, but i deleted the encrypted message。

根据提示说用了vigenere并且key为aeolus,但是他删除了信息...

那么接下来就要用到testdisk /dev/loop0来进行文件恢复。

image.png

将此文件复制到桌面提取其中信息

  1. root@kali:~/Desktop/_message.img.extracted/.Trash-0/files# strings .message.swp
  2. b0VIM 8.0
  3. n3k0
  4. shiki.lan
  5. ~n3k0/work/HuWangBei/1/message
  6. U3210
  7. #"!
  8. yise!dmsx_tthv_arr_didvi

最下面的字符串应该就是flag了,根据之前提示的vigenere加密并且key为aeolus进行解密

结果:yeetjustfindandsolve

———————————————自此护网杯easy_dump的取证工作完毕——————————————

0x04 知识延伸

本文未用到dll,注册表等取证使用方法,其他取证方法我附上网址供大家学习

https://digital-forensics.sans.org/media/volatility-memory-forensics-cheat-sheet.pdf

0x05 制作内存镜像

DumpIt 是一款绿色免安装的 windows 内存镜像取证工具。利用它我们可以轻松地将一个系统的完整内存镜像下来。

只要双击打开DumpIt.exe输入y等待一会出现Success就是dump成功。

默认情况下,文件名是主机名(主机名),其后是执行映像过程的日期。该文件默认保存为“raw”格式。

image.pngimage.png

利用kali分析

image.png

大家有任何问题可以提问,更多文章可到i春秋论坛阅读哟~

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号