🇻🇳
th13
  • info
  • JAVA
    • Notes: RMI linh tinh
    • [CVE-2013-2165] Phân tích RichFaces vulnerability thông qua CTF challenge
  • CTF WRITE UP
    • [Web]ImaginaryCTF 2021
    • [Web]CSAW CTF 2021
    • [Web]RaRCTF 2021
    • [Web]LIT CTF 07/2021
    • [Web]redpwn 2021
    • [Web]WeCTF 2021
    • [Web]WannaGame 21/05/2021
    • [Web]San Diego CTF 2021
    • [Web]picoMini by redpwn
    • [Web]WannaGame 17/04/2021
    • [Web]picoCTF 2021
    • [Web]BambooCTF/Calc.exe
  • saved
    • Tài liệu JAV Sờ cu 101
    • [NT230]PE file Injection
    • [WU][web]root-me
    • [WU]Lord of SQLinjection
    • [WU][Web]CyberTalents
    • [exploit][sqli]Challenge ngày Tết
Powered by GitBook
On this page
  • Thêm và xóa Section trong file PE
  • Chèn một section
  • Đảm bảo chương trình hoạt động
  • Xóa section
  • Pop-up MSSV
  • Tạo shellcode
  • Injection

Was this helpful?

Edit on GitHub
  1. saved

[NT230]PE file Injection

Đây là một bài viết phục vụ cho môn "Cơ chế mã độc" của mình bằng tất cả những gì mình tìm hiểu được. Enjoy it!!!

PreviousTài liệu JAV Sờ cu 101Next[WU][web]root-me

Last updated 4 years ago

Was this helpful?

Reference:

Vào một ngày đẹp trời dựa trên tìm hiểu được từ reference trên và có tham khảo source code trên mạng và đặc biệt là một tiền bối khóa trên mà ngay cả em cũng không biết tên :< Cuối cùng sau vài giờ đọc hiểu và cắt ghép các soucre trên (không đụng tay vào code) em đã tạo được 1 mã nguồn mở dùng để chèn, xóa section của 1 pe file .

Source:

Sau đây mình bắt đầu inject file putty.exe

Putty chọn những version: 0.52, 0.61, 0.66

Python lựa chọn python2

Thêm và xóa Section trong file PE

Ở đây chúng ta sẽ quan tâm 2 việc:

  • Tìm hiểu các bước thêm 1 section

  • Đảm bảo chương trình vẫn hoạt động bình thường

Dưới đây là cách chương trình hoạt động trước và sau khi injected.

Có 2 cách để chúng ta inject vào 1 pe file :

  • Tạo mới section, gán shellcode vào section đó (sẽ làm tăng kích thước pe file)

  • Chèn vào giữa những section trống (code cave) (cách này không làm tăng kích thước pe file nhưng không cẩn thận sẽ làm cho chương trình broken)

Tại bài này sẽ hướng dẫn đơn giản là tạo section mới và tạo shellcode thế nào khi chạy xong sẽ không thoát mà sẽ jump lại entry point gốc.

Sử dụng Stud_PE để xem thông tin của của 1 fpe file, hỗ trợ đối chiếu trong quá trình code và thực hiện việc jump lại entrypoint gốc:

Chèn một section

Tạo một section ta gồm các bước:

  • STEP 0x01 - Resize lại file exe

  • STEP 0x02 - Thêm section header mới

  • STEP 0x03 - Định nghĩa lại header

  • STEP 0x04 - Inject shellcode vào section mới tạo

$python pe-injector.py -a add -i putty66.exe -s shellcode/shelledited.txt

Lúc này file inject được lưu mới là putty66_0.exe và nhớ lưu ý đến Original Entry Point vì sẽ cần khi thực hiện đảm bảo chương trình hoạt động bình thường.

Đảm bảo chương trình hoạt động

Để tương quan ta so sánh 2 shellcode được sưu tầm (cùng chức năng pop-up lên một thông báo):

  • Shellcode1: Sau khi kết thúc section là xong thoát khỏi chương trình

  • Shellcode 2: Sau khi kết thúc thì y "cố gắng" jump tới 1 nơi để chương trình được chạy bình thường

Chú ý đến 6 byte cuối của shellcode1 và 7 byte cuối của shellcode2

Vậy khác nhau gì ở đây??? Hãy xem assembly của 2 shellcode:

Như vậy, ta thấy rằng ở shellcode2 vì "cố gắng" để chương trình hoạt động bình thường nên nó jump tới 1 địa chỉ là 004550F0 (có lẽ là entry point của section 1 của pe file nào đó của người tạo trên mạng).

Đặc điểm chung của 2 shellcode trên là sau khi inject vào thì chương trình vẫn dừng sau khi pop-up thông báo lên. Nhưng ở shellcode2 dừng là vì jump đến 1 địa chỉ không có tồn tại.

Việc của ta sẽ làm là sửa lại địa chỉ jump tới khi kết thúc của shellcode2.

Để biết được jump tới đâu thì ta nhớ lại Original Entry Point ở phía trên:

Vậy mình sẽ sửa 7 byte cuối của shellcode2 thành \xB8\xb0\x4e\x05\x00\xFF\xD0

Kết quả thật ngạc nhiên :))))) Không chạy mọi người ạ :< (Trường hợp này bạn mình thành công khi sử dụng hđh linux và phần mềm hỗ trợ wine )

Sau khi mình tìm hiểu thì biết được rằng muốn jump đến entrypoint thì sử dụng địa chỉ sau:

EntryPoint (raw) + ImageBase = 0x00054EB0 + 0x00400000 = 0x00454EB0

Để xem được EP raw và ImageBase thì sử dụng Stud_PE:

7 byte cuối là \xB8\xb0\x4e\x45\x00\xFF\xD0

Và kết quả done chạy thành công!!!

Xóa section

Để ngoài việc xóa section ta cần phải gán lại entry point cho chương trình như ban đầu.

$python pe-injector.py -a remove -i putty_0.exe -ep 0x00054EB0

Xóa thành công!!!

Pop-up MSSV

Tạo shellcode

Tại phần này em dùng msfvenom để tạo shellcode

$msfvenom -a x86 --platform windows -p windows/messagebox \
>TEXT="18520365 + 18521541 + 18520810" ICON=INFORMATION EXITFUNC=process \
>TITLE="BreakInSecurity" -f python

Kết quả:

shellcodemss.txt
buf = b""
buf += b"\xd9\xeb\x9b\xd9\x74\x24\xf4\x31\xd2\xb2\x77\x31\xc9"
buf += b"\x64\x8b\x71\x30\x8b\x76\x0c\x8b\x76\x1c\x8b\x46\x08"
buf += b"\x8b\x7e\x20\x8b\x36\x38\x4f\x18\x75\xf3\x59\x01\xd1"
buf += b"\xff\xe1\x60\x8b\x6c\x24\x24\x8b\x45\x3c\x8b\x54\x28"
buf += b"\x78\x01\xea\x8b\x4a\x18\x8b\x5a\x20\x01\xeb\xe3\x34"
buf += b"\x49\x8b\x34\x8b\x01\xee\x31\xff\x31\xc0\xfc\xac\x84"
buf += b"\xc0\x74\x07\xc1\xcf\x0d\x01\xc7\xeb\xf4\x3b\x7c\x24"
buf += b"\x28\x75\xe1\x8b\x5a\x24\x01\xeb\x66\x8b\x0c\x4b\x8b"
buf += b"\x5a\x1c\x01\xeb\x8b\x04\x8b\x01\xe8\x89\x44\x24\x1c"
buf += b"\x61\xc3\xb2\x08\x29\xd4\x89\xe5\x89\xc2\x68\x8e\x4e"
buf += b"\x0e\xec\x52\xe8\x9f\xff\xff\xff\x89\x45\x04\xbb\x7e"
buf += b"\xd8\xe2\x73\x87\x1c\x24\x52\xe8\x8e\xff\xff\xff\x89"
buf += b"\x45\x08\x68\x6c\x6c\x20\x41\x68\x33\x32\x2e\x64\x68"
buf += b"\x75\x73\x65\x72\x30\xdb\x88\x5c\x24\x0a\x89\xe6\x56"
buf += b"\xff\x55\x04\x89\xc2\x50\xbb\xa8\xa2\x4d\xbc\x87\x1c"
buf += b"\x24\x52\xe8\x5f\xff\xff\xff\x68\x30\x58\x20\x20\x68"
buf += b"\x4e\x54\x32\x33\x31\xdb\x88\x5c\x24\x05\x89\xe3\x68"
buf += b"\x31\x30\x58\x20\x68\x35\x32\x30\x38\x68\x2b\x20\x31"
buf += b"\x38\x68\x35\x34\x31\x20\x68\x38\x35\x32\x31\x68\x20"
buf += b"\x2b\x20\x31\x68\x30\x33\x36\x35\x68\x31\x38\x35\x32"
buf += b"\x31\xc9\x88\x4c\x24\x1e\x89\xe1\x31\xd2\x6a\x40\x53"
buf += b"\x51\x52\xff\xd0\x31\xc0\x50\xff\x55\x08"

Sửa 6byte cuối thành 7byte như sau: \xB8\xb0\x4e\x45\x00\xFF\xD0

Injection

$python pe-injector.py -a add -i putty66.exe -s shellcode/shellmssvedited.txt

https://axcheron.github.io/code-injection-with-python/
https://github.com/th13ntc/PE-injection
1KB
shell-1.txt
shellcode1
1KB
shell-2.txt
shellcode2
Thực hiện inject thành công
shellcode1
shellcode2
done
done!