CC: Steganography

Date: 19, May, 2021

Author: Dhilip Sanjay S


Click Here to go to the TryHackMe room.

Introduction

  • Steganography(Stego) is the art of concealing something inside something else, for example: A message inside a jpg file, or a binary inside a png.

  • All needed files can be found inside the included zip file


StegHide

  • Steghide is one of the most famous steganography tools.

  • It is used for hiding a message inside an image.

  • Works only for jpg image:

    • A downside of steghide is that it only works on jpgs; however, that means that if you believe there is a hidden message inside a jpg, then steghide is a probable option.

  • Benefits of stegohide:

    • It can encrypt data with a passphrase.

What argument allows you to embed data(such as files) into other files?

  • Answer: embed

What flag let's you set the file to embed?

  • Answer: -ef

What flag allows you to set the "cover file"?(i.e the jpg)

  • Answer: -cf

How do you set the password to use for the cover file?

  • Answer: -p

What argument allows you to extract data from files?

  • Answer: extract

How do you select the file that you want to extract data from?

  • Answer: -sf

Given the passphrase "password123", what is the hidden message in the included "jpeg1" file.

  • Answer: pinguftw

  • Steps to Reproduce:

$ steghide extract -sf jpeg1.jpeg 
Enter passphrase: 
wrote extracted data to "a.txt".

$ cat a.txt 
pinguftw

zsteg

  • zsteg is to png's what steghide is to jpg's. It supports various techniques to extract any and all data from png files.

  • zsteg also supports BMP files, but it is primarily used for png's.

How do you specify that the least significant bit comes first

  • Answer: --lsb

What about the most significant bit?

  • Answer: --msb

How do you specify verbose mode?

  • Answer: -v

How do you extract the data from a specific payload?

  • Answer: -E

In the included file "png1" what is the hidden message?

  • Answer: nootnoot

What about the payload used to encrypt it.

  • Answer: b1,bgr,lsb,xy

$ zsteg png1.png -v
imagedata           .. file: DOS 2.0 backup id file, sequence 48
    00000000: 01 30 90 de 24 12 04 00  00 00 00 00 00 00 00 01  |.0..$...........|
    00000010: 01 00 ff 00 00 01 ff 01  00 01 00 ff 00 00 00 ff  |................|
    00000020: 00 01 00 00 00 01 00 00  00 ff 00 ff 01 00 00 ff  |................|
    00000030: 00 01 01 ff 00 00 00 ff  ff 01 00 01 00 01 00 00  |................|
    00000040: 00 ff 00 00 00 00 00 01  00 00 00 ff 00 ff 01 ff  |................|
    00000050: 00 ff 00 01 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00000060: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000100: 
b1,bgr,lsb,xy       .. text: "nootnoot$"
    00000000: 00 08 6e 6f 6f 74 6e 6f  6f 74 24 92 49 24 92 49  |..nootnoot$.I$.I|
    00000010: 24 92 49 24 92 49 24 92  49 24 92 49 24 92 49 24  |$.I$.I$.I$.I$.I$|
    00000020: 92 49 24 92 49 24 92 49  24 92 49 24 92 49 24 92  |.I$.I$.I$.I$.I$.|
    00000030: 49 24 92 49 24 92 49 24  92 49 24 92 49 24 92 49  |I$.I$.I$.I$.I$.I|
    00000040: 24 92 49 24 92 49 24 92  49 24 92 49 24 92 49 24  |$.I$.I$.I$.I$.I$|
    00000050: 92 49 24 92 49 24 92 49  24 92 49 24 92 49 24 92  |.I$.I$.I$.I$.I$.|
    00000060: 49 24 92 49 24 92 49 24  92 49 24 92 49 24 92 49  |I$.I$.I$.I$.I$.I|
    00000070: 24 92 49 24 92 49 24 92  49 24 92 49 24 92 49 24  |$.I$.I$.I$.I$.I$|
    00000080: 92 49 24 92 49 24 92 49  24 92 49 24 92 49 24 92  |.I$.I$.I$.I$.I$.|
    00000090: 49 24 92 49 24 92 49 24  92 49 24 92 49 24 92 49  |I$.I$.I$.I$.I$.I|
    000000a0: 24 92 49 24 92 49 24 92  49 24 92 49 24 92 49 24  |$.I$.I$.I$.I$.I$|
    000000b0: 92 49 24 92 49 24 92 49  24 92 49 24 92 49 24 92  |.I$.I$.I$.I$.I$.|
    000000c0: 49 24 92 49 24 92 49 24  92 49 24 92 49 24 92 49  |I$.I$.I$.I$.I$.I|
    000000d0: 24 92 49 24 92 49 24 92  49 24 92 49 24 92 49 24  |$.I$.I$.I$.I$.I$|
    000000e0: 92 49 24 92 49 24 92 49  24 92 49 24 92 49 24 92  |.I$.I$.I$.I$.I$.|
    000000f0: 49 24 92 49 24 92 49 24  92 49 24 92 49 24 92 49  |I$.I$.I$.I$.I$.I|
.
.
.

Exiftool

  • Exiftool is a tool that allows you to view and edit image metadata.

In the included jpeg3 file, what is the document name

  • Answer: Hello :)

  • Steps to Reproduce:

$ exiftool jpeg3.jpeg

ExifTool Version Number         : 12.16
File Name                       : jpeg3.jpeg
Directory                       : .
File Size                       : 8.3 KiB
File Modification Date/Time     : 2020:01:07 02:39:44+05:30
File Access Date/Time           : 2020:01:07 02:39:46+05:30
File Inode Change Date/Time     : 2021:05:19 00:50:34+05:30
File Permissions                : rw-r--r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Exif Byte Order                 : Big-endian (Motorola, MM)
Document Name                   : Hello :)
X Resolution                    : 1
Y Resolution                    : 1
Resolution Unit                 : None
Y Cb Cr Positioning             : Centered
Image Width                     : 213
Image Height                    : 160
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 213x160
Megapixels                      : 0.034

Stegoveritas

  • Stegoveritas supports just about every image file, and is able to extract all types of data from it.

  • It is an incredibly useful tool if you don't know exactly what you're looking for, as it has a myriad of built in tests to extract any and all data.

  • Stegoveritas has other features as well such as color correcting images.

How do you check the file for metadata?

  • Answer: -meta

How do you check for steghide hidden information

  • Answer: -steghide

What flag allows you to extract LSB data from the image?

  • Answer: -extractLSB

In the included image jpeg2 what is the hidden message?

  • Answer: kekekekek

  • Steps to Reproduce:

$ stegoveritas -steghide jpeg2.jpeg 

Running Module: SVImage
+------------------+------+
|   Image Format   | Mode |
+------------------+------+
| JPEG (ISO 10918) | RGB  |
+------------------+------+
Found something with StegHide: $(pwd)/results/steghide_d8cdce3ca233a852bffff1ccd1c03488.bin
Running Module: MultiHandler

$ ls
a.txt  jpeg1.jpeg  jpeg2.jpeg  jpeg3.jpeg  png1.png  results  wav1.wav  wav2.wav

$ cat results/steghide_d8cdce3ca233a852bffff1ccd1c03488.bin 
kekekekek

Spectrograms

  • Spectrogram stegonography is the art of hiding hidden an image inside in an audio file's spectogram.

  • Therefore when ever dealing with audio stego it is always worth analyzing the spectrogram of the audio.

What is the hidden text in the included wav2 file?

  • Answer: Google

  • Steps to Reproduce:


Final Exam

What is key 1?

  • Answer: superkeykey

  • Steps to Reproduce:

    • Since, it's a jpg image, the key must be hidden using steghide.

    • But we need a passphrase to extract the data.

    • So, let's try exiftool first to checkout some of the metadata.

    $ exiftool exam1.jpeg 
    ExifTool Version Number         : 12.16
    File Name                       : exam1.jpeg
    Directory                       : .
    File Size                       : 8.6 KiB
    File Modification Date/Time     : 2020:01:07 06:43:27+05:30
    File Access Date/Time           : 2021:05:19 12:16:10+05:30
    File Inode Change Date/Time     : 2021:05:19 12:15:53+05:30
    File Permissions                : rw-r--r--
    File Type                       : JPEG
    File Type Extension             : jpg
    MIME Type                       : image/jpeg
    JFIF Version                    : 1.01
    Exif Byte Order                 : Big-endian (Motorola, MM)
    Document Name                   : password=admin
    X Resolution                    : 1
    Y Resolution                    : 1
    Resolution Unit                 : None
    Y Cb Cr Positioning             : Centered
    Image Width                     : 213
    Image Height                    : 160
    Encoding Process                : Baseline DCT, Huffman coding
    Bits Per Sample                 : 8
    Color Components                : 3
    Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
    Image Size                      : 213x160
    Megapixels                      : 0.034
    • The metadata contains password=admin.

    • Now we can run steghide to extract the data!

    $ steghide extract -sf exam1.jpeg
    Enter passphrase: 
    wrote extracted data to "a.txt".
    
    $ cat a.txt 
    the key is: superkeykey

What is key 2?

  • Answer:

  • Steps to Reproduce:

    • We can see the link in the image after spectrogram analysis: https://imgur.com/KTrtNI5

    • We'll download the image file using wget https://i.imgur.com/KTrtNI5.png .

    • It is a png file, hence we can use either zsteg and stegoveritas to find the hidden information.

$ wget https://i.imgur.com/KTrtNI5.png
--2021-05-19 12:52:01--  https://i.imgur.com/KTrtNI5.png
Resolving i.imgur.com (i.imgur.com)... 151.101.36.193
Connecting to i.imgur.com (i.imgur.com)|151.101.36.193|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14915 (15K) [image/png]
Saving to: ‘KTrtNI5.png’

KTrtNI5.png                 100%[===========================================>]  14.57K  17.7KB/s    in 0.8s    

2021-05-19 12:52:02 (17.7 KB/s) - ‘KTrtNI5.png’ saved [14915/14915]

$ stegoveritas KTrtNI5.png 
Running Module: SVImage
+---------------------------+------+
|        Image Format       | Mode |
+---------------------------+------+
| Portable network graphics | RGB  |
+---------------------------+------+

Running Module: MultiHandler

Exif
====
+---------------------+---------------------------------------------------------+
| key                 | value                                                   |
+---------------------+---------------------------------------------------------+
| SourceFile          | REDACTED/KTrtNI5.png                                    |
| ExifToolVersion     | 12.16                                                   |
| FileName            | KTrtNI5.png                                             |
| Directory           | REDACTED/ccsteganography                                |
| FileSize            | 15 KiB                                                  |
| FileModifyDate      | 2020:01:07 03:20:48+05:30                               |
| FileAccessDate      | 2021:05:19 12:52:56+05:30                               |
| FileInodeChangeDate | 2021:05:19 12:52:02+05:30                               |
| FilePermissions     | rw-r--r--                                               |
| FileType            | PNG                                                     |
| FileTypeExtension   | png                                                     |
| MIMEType            | image/png                                               |
| ImageWidth          | 205                                                     |
| ImageHeight         | 246                                                     |
| BitDepth            | 8                                                       |
| ColorType           | RGB                                                     |
| Compression         | Deflate/Inflate                                         |
| Filter              | Adaptive                                                |
| Interlace           | Noninterlaced                                           |
| ImageSize           | 205x246                                                 |
| Megapixels          | 0.05                                                    |
+---------------------+---------------------------------------------------------+
Found something worth keeping!
PNG image data, 205 x 246, 8-bit/color RGB, non-interlaced

$ zsteg KTrtNI5.png 
imagedata           .. text: ")))xxxLMO"
b1,bgr,lsb,xy       .. text: "\rKey: fatality"
b2,rgb,lsb,xy       .. file: SoftQuad DESC or font file binary
b2,rgb,msb,xy       .. file: VISX image file
b2,bgr,lsb,xy       .. file: SoftQuad DESC or font file binary
b2,bgr,msb,xy       .. file: VISX image file\

What is key 3?

  • Answer: killshot

  • Steps to Reproduce:

    • It seems like the qrcode cannot be scanned from this image.

    • Initially I tried to scan it using zbarimg, which gave the following error:

    $ zbarimg qrcode.png 
    scanned 0 barcode symbols from 1 images in 0.02 seconds
    
    WARNING: barcode data was not detected in some image(s)
    Things to check:
    - is the barcode type supported? Currently supported symbologies are:
        . EAN/UPC (EAN-13, EAN-8, EAN-2, EAN-5, UPC-A, UPC-E, ISBN-10, ISBN-13)
        . DataBar, DataBar Expanded
        . Code 128
        . Code 93
        . Code 39
        . Codabar
        . Interleaved 2 of 5
        . QR code
        . SQ code
    - is the barcode large enough in the image?
    - is the barcode mostly in focus?
    - is there sufficient contrast/illumination?
    - If the symbol is split in several barcodes, are they combined in one image?
    - Did you enable the barcode type?
        some EAN/UPC codes are disabled by default. To enable all, use:
        $ zbarimg -S*.enable <files>
        Please also notice that some variants take precedence over others.
        Due to that, if you want, for example, ISBN-10, you should do:
        $ zbarimg -Sisbn10.enable <files>
    • Remember that stegoveritas has color-correction features too?

    • So, we'll run stegoveritas for this final challenge:

    $ stegoveritas qrcode.png 
    ERROR:StegoVeritas:Missing the following required packages: foremost
    ERROR:StegoVeritas:Either install them manually or run 'stegoveritas_install_deps'.
    Running Module: SVImage
    +---------------------------+------+
    |        Image Format       | Mode |
    +---------------------------+------+
    | Portable network graphics | RGB  |
    +---------------------------+------+
    Found something worth keeping!
    International EBCDIC text, with very long lines, with no line terminators
    Found something worth keeping!
    Non-ISO extended-ASCII text, with very long lines, with no line terminators
    Found something worth keeping!
    ISO-8859 text, with very long lines, with no line terminators
    Found something worth keeping!
    Non-ISO extended-ASCII text, with very long lines, with no line terminators
    Found something worth keeping!
    ISO-8859 text, with very long lines, with no line terminators
    Running Module: MultiHandler
    
    Exif
    ====
    +---------------------+--------------------------------------------------------------+
    | key                 | value                                                        |
    +---------------------+--------------------------------------------------------------+
    | SourceFile          | REDACTED/qrcode.png                                          |
    | ExifToolVersion     | 12.16                                                        |
    | FileName            | qrcode.png                                                   |
    | Directory           | REDACTED/final                                               |
    | FileSize            | 2.3 KiB                                                      |
    | FileModifyDate      | 2020:01:07 06:32:58+05:30                                    |
    | FileAccessDate      | 2021:05:19 12:58:31+05:30                                    |
    | FileInodeChangeDate | 2021:05:19 12:58:22+05:30                                    |
    | FilePermissions     | rw-r--r--                                                    |
    | FileType            | PNG                                                          |
    | FileTypeExtension   | png                                                          |
    | MIMEType            | image/png                                                    |
    | ImageWidth          | 464                                                          |
    | ImageHeight         | 464                                                          |
    | BitDepth            | 8                                                            |
    | ColorType           | RGB                                                          |
    | Compression         | Deflate/Inflate                                              |
    | Filter              | Adaptive                                                     |
    | Interlace           | Noninterlaced                                                |
    | BackgroundColor     | 255 255 255                                                  |
    | ImageSize           | 464x464                                                      |
    | Megapixels          | 0.215                                                        |
    +---------------------+--------------------------------------------------------------+
    Found something worth keeping!
    PNG image data, 464 x 464, 8-bit/color RGB, non-interlaced
    +--------+------------------+-------------------------------------------+-----------+
    | Offset | Carved/Extracted | Description                               | File Name |
    +--------+------------------+-------------------------------------------+-----------+
    | 0x3b   | Carved           | Zlib compressed data, default compression | 3B.zlib   |
    | 0x3b   | Extracted        | Zlib compressed data, default compression | 3B        |
    +--------+------------------+-------------------------------------------+-----------+
    • It color corrected and gave out almost 50 images.

    • Only 5 out of 50 images were scannable using zbarimg.

    • We'll check the one with inverted:

    $ cd results/
    $ ls
    exif                                   qrcode.png_enhance_sharpness_-50.png  qrcode.png_Max.png
    keepers                                qrcode.png_enhance_sharpness_50.png   qrcode.png_Median.png
    qrcode.png_autocontrast.png            qrcode.png_enhance_sharpness_-75.png  qrcode.png_Min.png
    qrcode.png_Blue_0.png                  qrcode.png_enhance_sharpness_75.png   qrcode.png_Mode.png
    qrcode.png_Blue_1.png                  qrcode.png_equalize.png               qrcode.png_Red_0.png
    qrcode.png_Blue_2.png                  qrcode.png_Find_Edges.png             qrcode.png_Red_1.png
    qrcode.png_Blue_3.png                  qrcode.png_GaussianBlur.png           qrcode.png_Red_2.png
    qrcode.png_Blue_4.png                  qrcode.png_grayscale.png              qrcode.png_Red_3.png
    qrcode.png_Blue_5.png                  qrcode.png_Green_0.png                qrcode.png_Red_4.png
    qrcode.png_Blue_6.png                  qrcode.png_Green_1.png                qrcode.png_Red_5.png
    qrcode.png_Blue_7.png                  qrcode.png_Green_2.png                qrcode.png_Red_6.png
    qrcode.png_blue_plane.png              qrcode.png_Green_3.png                qrcode.png_Red_7.png
    qrcode.png_Edge-enhance_More.png       qrcode.png_Green_4.png                qrcode.png_red_plane.png
    qrcode.png_Edge-enhance.png            qrcode.png_Green_5.png                qrcode.png_Sharpen.png
    qrcode.png_enhance_sharpness_-100.png  qrcode.png_Green_6.png                qrcode.png_Smooth.png
    qrcode.png_enhance_sharpness_100.png   qrcode.png_Green_7.png                qrcode.png_solarized.png
    qrcode.png_enhance_sharpness_-25.png   qrcode.png_green_plane.png
    qrcode.png_enhance_sharpness_25.png    qrcode.png_inverted.png
    
    $ zbarimg qrcode.png_inverted.png 
    QR-Code:http://key=killshot
    scanned 1 barcode symbols from 1 images in 0.02 seconds

References

Last updated