Hướng dẫn python audio buffer - bộ đệm âm thanh python
I am using azure speech to text service using python to process bunch of audios. In order to process the audios, These are the steps performed-
Rather than downloading to local machine, I want to get the file from server and pass it directly to speech to text service. For which,
Is there a way to pass audiobuffer to this service? Configuration python code: Chào mọi người, nối tiếp phần 1, phần 2 mình sẽ thực hiện khai thác lỗi buffer overflow để lấy shell bằng cách sử dụng thư viện pwntools của python3. Dưới đây là mã C của chương trình khai thác phần trước.
Các bạn compile chương trình bằng mã sau (phần 1):
1. Giới thiệu về thư viện pwntools
Các bạn có thể đọc thêm về thư viện ở đây: https://docs.pwntools.com/en/stable/install.html
Packing, unpacking string:
Assemble và disassemble code:
2. Lấy shell với pwntools và shellcodeMình có shellcode để tạo 1 shell như sau:
Trong series này mình sẽ hướng dẫn các bạn viết shellcode của riêng mình, tuy nhiên không phải ở bài này. Tiến hành khai thác: Như đã nói ở bài trước, sau khi dùng gdb để debug, ta tính toán ra số byte cần thêm vào buffer để điều khiển được con trỏ trả về (eip) trong ngăn xếp là: 3Đầu tiên, mình tính toán số bytes của shellcode bằng printf và wc:
Vậy shellcode có độ dài là 40 bytes Sau đó mình tạo 1 file exploit.py để tiến hành khai thác: exploit.py
Tuy nhiên, chúng ta gặp 1 vấn đề, đó là địa chỉ trả về (return address cần được tính toán, trỏ về đầu shellcode (hoặc trỏ vào nop)). Nói 1 chút về nop,là 1 lệnh "không làm gì cả", khi gặp lệnh này, đơn giản sẽ trượt đến câu lệnh tiếp theo. Nếu sử dụng gdb để debug, ta có thể biết được địa chỉ bắt đầu của buffer, tuy nhiên địa chỉ này và địa chỉ chạy trong chương trình python của chúng ta khác nhau, vì môi trương chạy khác nhau. Vì vậy mình sử dụng chương trình C dưới đây để tính toán độ lệnh giữa gdb và python. find_start.c
Compile chương trình: 4
Như vậy chương trình sẽ chạy với đối số là 5, ta cần biết giá trị của find_start lưu trong stack. Tiến hành disassemble main. Ta được:
Nhận thấy hàm strcpy@plt tại 0x565561b3. Tạo breakpoint ngay sau đó để xem kết quả, vì find_start được copy vào buffer. 0Chạy tiếp chương trình, ta được kết quả trong stack như sau: 1Như vậy trong gdb ./find_start = 6Tiếp theo, chỉnh sửa 1 chút chương trình python để in ra kết quả find_start: 2Kết quả như sau: 3Vậy ./find_start trong python là 0xffffd138 => Độ lệnh giữa 2 môi trường là: 7 => python = gdb + 164Tiếp theo, debug với gdb ta tìm được điểm bắt đầu của shellcode bằng cách chạy chương trình với 76 bytes input. r 8 4Vậy kết quả trong gdb là 0xffffd054 => Oke, ta có chương trình python hoàn thiện như sau: exploit.py 5Kết quả nhận được: 6Vậy là ta đã có được 1 shell. Trong phần tiếp theo, mình sẽ hướng dẫn cách lấy 1 shell với buffer nhỏ, không đủ chứa shell đầu vào. |