iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Security

picoCTF系列 第 10

[Day 10] Packer

  • 分享至 

  • xImage
  •  

首先來看題目,知道題目和執行檔有關,並且看到提示說到減少 binary 的大小,猜測可能跟壓縮有關。
https://ithelp.ithome.com.tw/upload/images/20240815/20168342KRHffQsP3b.png
hint 1:What can we do to reduce the size of a binary after compiling it.

先用 ls 檢查下載了什麼,發現有一個 out 的未知檔案。

$ ls -l
total 340
-rw-rw-r-- 1 user  user  336520 Mar 12 00:36 out

使用 file 去查找下載的檔案,發現是 ELF 檔案,並且發現有 stripped,代表有被壓縮。

$ file out
out: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped

使用 readelf,可以看到檔案 out 的詳細資料,這裡我們可以看到 header 的資料。

$ readelf -h out
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - GNU
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x44ade0
  Start of program headers:          64 (bytes into file)
  Start of section headers:          0 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         3
  Size of section headers:           64 (bytes)
  Number of section headers:         0 (64)
  Section header string table index: 0

執行 out,發現沒有權限,所以使用 chmod 新增執行的權限。執行後,會出現輸入密碼的提示。隨便輸入,會顯示 Access denied 。

$ chmod +x out
$ ./out
Enter the password to unlock this file: 123
You entered: 123

Access denied

想到提示,於是從網路上查到,upx 可以壓縮和解壓縮 .exe 檔案。
https://ithelp.ithome.com.tw/upload/images/20240815/20168342mKJgUYqS29.png

下載 upx 後,查看使用手冊,得知 -d 能 decompress,於是我們打算 decompress out。

$ upx -h
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2020
UPX 3.96        Markus Oberhumer, Laszlo Molnar & John Reiser   Jan 23rd 2020

Usage: upx [-123456789dlthVL] [-qvfk] [-o file] file..

Commands:
  -1     compress faster                   -9    compress better
  --best compress best (can be slow for big files)
  -d     decompress                        -l    list compressed file
  -t     test compressed file              -V    display version number
  -h     give this help                    -L    display software license

於是我們使用 upx -d 解壓縮 out,並且用 file 再次檢視 out 的詳情,發現現在顯示 not stripped ,代表解壓縮成功了。

$ upx -d out
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2020
UPX 3.96        Markus Oberhumer, Laszlo Molnar & John Reiser   Jan 23rd 2020

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
    872088 <-    336520   38.59%   linux/amd64   out

Unpacked 1 file.
$ file out
out: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=2e06e54daad34a6d4b0c7ef71b3e1ce17ffbf6db, for GNU/Linux 3.2.0, not stripped

接著使用 stringsless 指令,找到 flag。其中,strings 是將檔案 (out) 中所有可列印的字元印出。

$ strings out | less           

[1]+  Stopped                 strings out | less

less 是 unix/linux 中翻閱文件的一種指令,可以向前或向後查找文字,在這裡我使用 /password 的意思是向下查找 ‘password’,若是使用 ?password 就是向上查找。詳情可以參考:Linux less 命令

Enter the password to unlock this file: 
You entered: %s
Password correct, please see flag: 7069636f4354467b5539585f556e5034636b314e365f42316e34526933535f65313930633366337d
Access denied
.....

:/password

最後再把 16 進位的 flag 轉為 ascii,就可以得到 flag 了。

$ echo '7069636f4354467b5539585f556e5034636b314e365f42316e34526933535f65313930633366337d' | xxd -r -p
picoCTF{U9X_UnP4ck1N6_B1n4Ri3S_e190c3f3}

小結:
學會使用 upx -d 解壓縮執行檔,並且使用 stringsless 找到 flag。


上一篇
[Day 9] IntroToBurp
下一篇
[Day 11] interencdec
系列文
picoCTF30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言