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处理器的取证。因此,它也是所有网络取证爱好者的必学框架。

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

0x03 实验过程

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

root@kali:~/Desktop# volatility -f easy_dump.img imageinfo
Volatility Foundation Volatility Framework 2.6
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418
                     AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
                     AS Layer2 : FileAddressSpace (/root/Desktop/easy_dump.img)
                      PAE type : No PAE
                           DTB : 0x187000L
                          KDBG : 0xf8000403f070L
          Number of Processors : 1
     Image Type (Service Pack) : 0
                KPCR for CPU 0 : 0xfffff80004040d00L
             KUSER_SHARED_DATA : 0xfffff78000000000L
           Image date and time : 2018-09-28 09:02:19 UTC+0000
     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

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

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

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

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

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

root@kali:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 psscan
Volatility Foundation Volatility Framework 2.6
Offset(P)          Name                PID   PPID PDB                Time created                   Time exited                   ------ 0x000000001a453a70 WmiApSrv.exe       2760    492 0x000000001a9ab000 2018-09-28 09:01:58 UTC+0000                                 
0x0000000022e4e060 VSSVC.exe          2168    492 0x0000000002a44000 2018-09-28 09:01:39 UTC+0000                                 
···            
0x0000000022fd1b30 notepad.exe        2616   1312 0x000000000221c000 2018-09-28 09:01:51 UTC+0000                                 
···                  
0x0000000023963b30 DumpIt.exe         2500   1312 0x000000000788b000 2018-09-28 09:02:18 UTC+0000                                 
0x00000000239712a0 svchost.exe         716    492 0x000000000b836000 2018-09-28 09:01:34 UTC+0000                                 
···                              
0x00000000250a3b30 dllhost.exe        2900    600 0x00000000226ab000 2018-09-28 09:02:14 UTC+0000                                 
0x0000000025101930 dllhost.exe        2932    600 0x000000000d0c2000 2018-09-28 09:02:15 UTC+0000                                 
0x0000000025131b30 smss.exe            248      4 0x000000001a0a6000 2018-09-28 09:01:33 UTC+0000                                 
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 ./文件将以进程号命名

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

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

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

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

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

root@kali:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 filescan | grep -E 'jpg|png|jpeg|bmp|gif'
Volatility Foundation Volatility Framework 2.6
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=目标存储位置

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

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

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

利用foremost 2616.dmp提取文件

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

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

root@kali:~/Desktop/output/zip# binwalk message.img 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Linux EXT filesystem, rev 1.0, ext2 filesystem data, UUID=c12b8ec9-5ef5-4b91-8b4d-f827e81fe81f
67697         0x10871         Unix path: /work/HuWangBei/1/message

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

root@kali:~/Desktop# binwalk -e message.img 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Linux EXT filesystem, rev 1.0, ext2 filesystem data, UUID=c12b8ec9-5ef5-4b91-8b4d-f827e81fe81f
67697         0x10871         Unix path: /work/HuWangBei/1/message

挂载文件系统

root@kali:~/Desktop# cd _message.img.extracted/
root@kali:~/Desktop/_message.img.extracted# ls
0.ext  ext-root
root@kali:~/Desktop/_message.img.extracted# mount 0.ext /mnt/
root@kali:~/Desktop/_message.img.extracted# cd /mnt/
root@kali:/mnt# ls
hint.txt  lost+found

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

root@kali:/mnt# cat hint.txt
10 10
10 11
10 12
10 13
···
269 265
269 266
269 267
269 268
269 269

python脚本:

import Image

flag_image = Image.new('RGB',(300,300),(0,0,0))

f = open('hint.txt')
for line in f.readlines():
    point = line.split()
    flag_image.putpixel([int(point[0]),int(point[1])],(255,255,255))
f.close()
flag_image.save('flag_image.jpg')

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

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

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

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

root@kali:~/Desktop/_message.img.extracted/.Trash-0/files# strings .message.swp
b0VIM 8.0
n3k0
shiki.lan
~n3k0/work/HuWangBei/1/message
U3210
#"!
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”格式。

利用kali分析

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

CTF中文件包含的一些技巧的更多相关文章

  1. 实战经验丨CTF中文件包含的技巧总结

    站在巨人的肩头才会看见更远的世界,这是一篇技术牛人对CTF比赛中文件包含的内容总结,主要是对一些包含点的原理和特征进行归纳分析,并结合实际的例子来讲解如何绕过,全面细致,通俗易懂,掌握这个新技能定会让 ...

  2. PHP中文件包含的路径问题

    在程序中当前文件夹下文件路径可以表示为3种:1)绝对路径,2)相对路径,3)直接文件名 例如在/var/www下的a.php:1)/var/www/a.php 2)./a.php 3)a.php 在P ...

  3. CTF PHP文件包含--session

    PHP文件包含 Session 首先了解一下PHP文件包含漏洞----包含session 利用条件:session文件路径已知,且其中内容部分可控. 姿势: php的session文件的保存路径可以在 ...

  4. CTF之文件包含的猥琐思路

    From: i春秋 百度杯”CTF 一: <?php include "flag.php"; //包含flag.php这个文件 $a = @$_REQUEST['hello' ...

  5. php学习笔记6--php中的文件包含 include,require,include_once,require_once

    php中的文件包含 include,require,include_once,require_once 文件包含:是指将一个文件的内容包含进另外一个文件,有利于代码的复用等.php中文件包含指令有4个 ...

  6. PHP文件包含漏洞攻防实战(allow_url_fopen、open_basedir)

    摘要 PHP是一种非常流行的Web开发语言,互联网上的许多Web应用都是利用PHP开发的.而在利用PHP开发的Web应用中,PHP文件包含漏洞是一种常见的漏洞.利用PHP文件包含漏洞入侵网站也是主流的 ...

  7. PHP文件包含漏洞攻防实战

    本文对PHP文件包含漏洞的形成.利用技巧及防范进行了详细分析,并通过一个真实案例演示了如何利用PHP文件包含漏洞对目标网站进行渗透测试,最终成功获取到网站的WebShell. PHP是一种非常流行的W ...

  8. 2020/1/31 PHP代码审计之文件包含漏洞

    0x00 文件包含简介 文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校检,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意 ...

  9. 2019-10-8:渗透测试,基础学习,php基础,会话,文件包含,笔记

    php面向对象基础->调用符号构造函数construct,主要用来创建对象时初始化对象,为成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 析构函数destructor,与构造函数相 ...

随机推荐

  1. fROM PPV report

    Month search help: include rmcs0f0m. s_month for s001-spmon at selection-screen on value-request for ...

  2. CVTE C/C++开发工程师笔试题(一)

    问题描述: 字符串组装. 现在需要将一些数据格式不同的数据组装成一个char型字符串输出,数据来源包含一个char型的字符串,一个short型的16进制数据: 举例: 假若定义如下2个变量: 1.ch ...

  3. 多线程同步synchornized、volatile、Atomic、CountDownLatch示例

    synchronized关键字 锁对象.synchronized(this)和synchronized方法都是锁当前对象. import java.util.concurrent.TimeUnit; ...

  4. 磁盘管理 lvm减容扩容

    参考https://blog.csdn.net/wk022/article/details/50543922 新增磁盘/dev/sdb fdisk /dev/sdb  分两个分区  (n p 1 /n ...

  5. ORACLE设置用户密码不过期

    1.查看用户的 profile 是哪个,一般是 default SELECT USERNAME, PROFILE FROM dba_users; 2.查看指定概要文件(这里是1中对应的profile) ...

  6. vscode和gitee的使用

    1.安装git 2.生成公钥 $ ssh-keygen -t rsa -C "youremail@youremail.com" # Generating public/privat ...

  7. 一键脚本清理DEBIAN系统无用组件 减少系统资源

    虽然如今我们选择服务器资源都比较多,以前我们看到很多128MB内存.甚至32MB内存的建站网站,感觉特别羡慕.其实这些也不是难事,相比之下,DEBIAN系统比CENTOS系统占用资源少,然后我们需要进 ...

  8. linux下创建密钥

    1.生成rsa文件 : a)ssh-keygen -t rsa,然后会提示在/root/.ssh/id_rsa这个路径下存放密钥文件 b)进入到/root/.ssh目录下,将id_rsa.pub更改为 ...

  9. C# WPF 通过委托实现多窗口间的传值

    在使用WPF开发的时候就不免会遇到需要两个窗口间进行传值操作,当然多窗口间传值的方法有很多种,本文介绍的是使用委托实现多窗口间的传值. 在上代码之前呢,先简单介绍一下什么是C#中的委托(如果只想了解如 ...

  10. Data_Structure01-绪论

    ---恢复内容开始--- 一.作业题目 仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子.分母均为整数且分母不为零的分数).有理数基本运算: 构造有理数T,元素e1,e2分 ...