Pwnable là gì

  -  
Bài viết này là 1 ví dụ cơ bản cho người bắt đầu tiếp cận pwnable, giúp cho đều bạn rất có thể thuận tiện gọi hơn Lúc đi theo mảng này.

Quý Khách vẫn xem: Pwnable là gì

Target : Tokyo Western CTF 2019 Chall : nothing more to say

File here

Description: nhật bản is fucking hot.

nc nothing.chal.ctf.westerns.tokyo 10001




Bạn đang xem: Pwnable là gì

*

ta cần sử dụng lệnh $ tệp tin nhằm kiểm tra

File này cho ta biết nó là file executable chạy 64bit, cùng với liên kết động (libc) cùng không stripped (nghĩa là tên hàm tên trở nên không xẩy ra giản lược)

ta đang run file giúp thấy file làm gì
*



Xem thêm: Số Model Điện Thoại Là Gì, Ý Nghĩa Tác Dụng Của Số Imei, Số Model Iphone Là Gì

*

Tại đây nó in ra mô tả tìm kiếm và hint rồi mang lại họ nhập, mang sử ở đây mình nhập là “input” thì nó trả về công dụng là “input” rồi out công tác. Giờ bản thân đã debug coi thử nó làm cái gi.Mình sẽ sử dụng IDA để xem
*



Xem thêm: 3Q Ta Là Vua Tam Quốc Ta Là Vua, Ta Là Vua Tam Quốc Hd Cho Android

*

Ở phần description họ bảo không tồn tại SSP., ko NX, không PIESSP là hình thức chống staông chồng overflow, NX (Non-eXecutable) vẫn không tồn tại quyền exeđáng yêu trong stachồng, PIE đang random shop vùng code để ta nặng nề exploit hơn.Rất may là nó tắt không còn cảbài này cho ta nhập lệ từ keyboard cùng với hàm gets(&format). Theo như tìm hiểu về hàm ta thấy hàm này có lỗ hổng có thể dẫn cho tràn cỗ đệmCụ thể là hàm ko check maximum kích cỡ buộc phải ta hoàn toàn có thể dễ chịu và thoải mái với số kí từ nhập vàoMục tiêu là ta đang get shell đúng ý cùng với description nhưng mà BTC chỉ dẫn. thường thì nhiều phần những chall đều cần được get shell để mang được flag.Trước hết ta đề nghị test trên local trước, ta đang nên sử dụng mang đến gdb.Chương thơm trình vẫn giới hạn trên hàm gets. Hiện nay ta có thể chất vấn được những tđam mê số của hàm trước lúc hotline hàm.Tại trên đây ta thấy công tác chạy 64bit đề nghị những tđắm đuối số vẫn nằm ở trên các tkhô cứng ghi theo thiết bị tự: RDI, RSI, RDX, RCX, R8, R9, stackTa biết hàm gets(&format) nhấn 1 tham mê số cho nên vì thế tsay đắm số đã nằm ở tkhô nóng ghi RDI ở địa chỉ 0x7ffffffffe320Ta rất có thể sử dụng lệnh “telescope ” để kiểm tra layout của stachồng cùng bởi buffer ta nhập nằm trên stack buộc phải ta vẫn lợi dụng điều đó nhằm khai thác lỗ hổng trên stackTa thấy xúc tiến trả về của hàm main đang nằm sau tương tác của tkhô cứng ghi RBP.. Suy ra tại địa chỉ RBP+8 = return addressSau lúc hàm main xúc tiến kết thúc đang trở lại hàm đang điện thoại tư vấn nó (__libc_start_main) vậy cho nên giả dụ ta ghi đè lên tương tác trả về thì ta có thể redirect luồng tiến hành lịch sự hướng khác mà lại ta mong mỏi mà lại rõ ràng làm việc đấy là get shellVì NX disable cho nên ta rất có thể xúc tiến shellcode ngay trong stack. Shellcode là 1 trong những đoạn code asm dùng để get shell hoặc làm cho phần nhiều Việc không giống tùy mình muốn.Okay phía giải quyết đang nhỏng sau: ta sẽ nhập input thế nào cho kí từ ta nhtràn lên tràn qua ngoài cỗ đệm với tràn mang đến return address, gắng địa chỉ ret thành xúc tiến shellcode vào stack. Để có tác dụng được vấn đề này ta rất cần được tra cứu gadget để ghi liên quan shellcode vào retVì shellcode nằm tron stack mà stack thì luôn random (ASLR) buộc phải ta cần phải cần sử dụng gadget.Theo như ta thấy thì không tồn tại gadget như thế nào để mang cửa hàng shellcode vào staông xã cả đề nghị ta sẽ tìm kiếm biện pháp không giống. Nếu ta xem xét một chút ta sẽ thấy một vùng nhớ được load thuộc binary cùng cố định, cùng bao gồm cả exexinh tươi sẽ là vùng .bssVậy ta đã giải theo phía khác chính là ghi đè ret thành gets để nhập thêm lần nữa, ta vẫn nhập shellcode vào vùng kia rồi ret về nơi ta nhập shellcode thì vẫn tiến hành được shellcode.Ta thấy ở vị trí “lea rax, ; mov rdi, rax” tức là đưa shop stachồng giải pháp rbp khoảng chừng là 0x100 vào rax cùng gửi vào rdi. Suy ra offphối giữa rbp với buffer là 0x100 tuyệt nói theo cách khác rbp-0x100 = buff -> buff + 0x100 = rbpcơ mà ret nằm dưới rbp với rbp + 0x8 = ret buộc phải buff + 0x108 = retSuy ra offmix là 0x108Để gửi hệ trọng vùng .bss vị trí mà lại ta nhập shellcode vào thanh hao ghi rdi thì ta cần gadget “pop rdi; ret”Lấp đầy buffer tràn mang đến ret rồi sau đó chuyển shellcode address lên rdi có tác dụng tmê mẩn số và ret về gets đợt tiếp nhữa để nhập shellcode vào (shellcode có thể lấy sống bên trên website shell-storm.org)tiếp đến ret về shellcode nhằm xúc tiến.Ta rất có thể attach file để kiểm tra nlỗi sau:

Trước hết mlàm việc thêm một tab nhằm run tệp tin .py, ta sửa lại một chút ít nlỗi sau:

Thêm 2 loại context.log_level=’debug’ sẽ giúp ta debug rất đẹp hơn

và pause() đã làm cho chương trình tạm dừng chờ ta attach vào

Sau kia đặt breakpoint vào gdb, ví dụ đặt breakpoint trên ret, Tiếp theo run tệp tin .py lên

attach xong xuôi ta gõ lệnh “continue” nhằm lịch trình thường xuyên, tiếp đến lịch sự file .py ta nhận phím bất cứ nhằm chương trình chạy tiếp