【CTF】利用volatility與Gimp實現Windows內存取證

0x01 題目要求

題目提供了一個大小爲256MB的內存鏡像,顯然咱們須要從當中找到一些有趣的東西。html

圖片描述

0x02 分析過程

既然是內存取證,首先就想到一個強大的取證工具——volatilitygit

該工具在kali當中已集成,位於應用程序->數字取證->volatilitygithub

下面就針對該鏡像,記錄一下使用該工具進行內存取證的過程。windows

1. volatility

volatility命令手冊: https://github.com/volatility...

我這裏只列舉一些經常使用的命令bash

1. 鏡像基本信息

volatility -f mem.data imageinfo

圖片描述

關鍵看Suggested Profile(s)項,這裏是工具判斷該鏡像的架構,同時也會提供相應架構的命令用於分析該鏡像,本題中可能性最大的架構是Win7SP1x64,而後在調用命令時加上--profile=Win7SP1x64就能夠了,繼續往下看。網絡

2. 列舉可以使用的命令

volatility -f mem.data --profile=Win7SP1x64 --help

圖片描述

經常使用的命令以下:架構

命令 功能
cmdline/cmdscan 列出歷史cmd命令
filescan 掃描文件,可配合grep使用
netscan 掃描創建的鏈接和套接字,相似於netstat
pslist/psscan 列出進程列表
svcscan 掃描windows服務列表
screenshot 顯示GDI樣式的截屏
memdump 從內存dump進程的內存
dumpfiles 從內存dump文件

3. 搜索進程

首先咱們要看一下出題人在鏡像裏幹了什麼。工具

volatility -f mem.data --profile=Win7SP1x64 pslist

圖片描述

能夠看到這裏有3個應用程序進程,分別是:wordpad寫字板 MineSweeper掃雷 mspaint畫圖,並且再看看啓動時間,mspaint相隔以後的進程有長達10分鐘時間,emmm,出題人應該是就在這段時間寫的flag。接下來咱們就看一下有沒有什麼可疑的文件留存。測試

4. 查看可疑文件

查看文檔google

volatility -f mem.data --profile=Win7SP1x64 filescan | grep "doc\|docx\|rtf"

沒有。。。

圖片描述

查看圖片

volatility -f mem.data --profile=Win7SP1x64 filescan | grep "jpg\|jpeg\|png\|tif\|gif\|bmp"

也沒有。。。

圖片描述

查看桌面

volatility -f mem.data --profile=Win7SP1x64 filescan | grep "Desktop"

圖片描述

難道出題人還用掃雷來作個圖???(開個玩笑)

看來flag並無保存爲文件,看看有沒有其餘突破口。

5. 查看截圖

volatility -f mem.data --profile=Win7SP1x64 screenshot --dump-dir=./

導出的圖片以下

圖片描述

說實話我根本看不出來這是個什麼界面。。。

6. 其餘調查

查看命令行輸入

volatility -f mem.data --profile=Win7SP1x64 cmdline

查看系統用戶名

volatility -f mem.data --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names"

查看網絡鏈接

volatility -f mem.data --profile=Win7SP1x64 netscan

在作了不少無用功以後,只能去求助Google了,結果搜出來2篇文章,比較有參考價值:

google-ctf-2016-forensic1: https://www.rootusers.com/goo...
從內存導出raw圖片: https://w00tsec.blogspot.com/...

上述文章介紹了一種方法,經過利用volatility將進程內存dump下來,而後利用Gimp打開內存數據,查看鏡像中的系統界面,因而咱們開始實施。

2.Gimp

  1. 使用volatility dump內存:(2768是mspaint的pid)

    volatility -f mem.data --profile=Win7SP1x64 memdump -p 2768 --dump-dir=./

    圖片描述

  2. 將2768.dmp重命名爲2768.data,使用Gimp打開,打開方式選擇"原始圖像數據"

    圖片描述

  3. 出現這樣一個界面,作以下操做:

    • 圖像類型:RGB Alpha
    • 調整三個屬性:高度調整到合適值就不用變了,個人最大是733。肯定一個寬度,一般是常見的顯示器分辨率,而後不斷調整位移,使之出現可見的圖像,也就是鏡像中的系統界面。

      (接下來就是我不斷測試的過程,測試了2小時。。。)

      分辨率是1920時:能夠看見3個程序,以前的GDI純白色框線界面就是掃雷的結算界面,寫字板裏寫的也不是flag,看來就只有畫圖裏有flag了。

      圖片描述

      分辨率是1024時:掃雷界面。證實在不一樣分辨率下,會顯示不一樣的界面。

      圖片描述

      分辨率是1568時:部分畫圖界面,可能離成功不遠了。

      圖片描述

      分辨率是1457時:getFlag!

      圖片描述

      過後發現,微調 位移爲圖像的左右方向平移,大幅調節 位移則是圖像的上下方向平移。而 寬度不變時,始終顯示的都是同一幅圖像。

0x03 小結一下

爲了湊夠3點,就寫一下小結吧

  • 谷哥大法好,檣外確實有不少好的題解
  • 熟悉使用各種取證分析工具,是快速解出此題的關鍵
  • 能夠參透出題人心理,猜想可能的flag位置
相關文章
相關標籤/搜索