Tesla123
VIP Members
-
25/03/2014
-
7
-
141 bài viết
SVATTT2014 Write Up Exploitation
Nguồn : http://peternguyen.uns.vn/2014/11/25/svattt2014-write-up-exploit/
exploit 100 ( vòng loại) :
Đây là một bài exploit rất cơ bản, chỉ cần overflow biến cookie thành : 0x12345678 là có thể get được flag.
exploit200 (vòng loại): một bài exploit yêu cần chúng ta overflow eip và ret eip về stack để execute shellcode. Nếu để ý kỹ, và set breakpoint tại đây lệnh ret ở hàm doprocessing:
ECX = shellcode (input); vậy mình chỉ cần kiếm các gadgets dạng: jmp ecx hoặc call ecx là ok.
Exploit 200 (chung kết):
Bài exploit này đỏi hỏi phải leak 1 địa chỉ của 1 hàm trong bản got, rồi từ đó setup được một môi trường giống với server để tìm ra địa chỉ của hàm system, bằng cách lấy địa chỉ hàm leak - offset (offset có các giá trị khác nhau dựa vào phiên bản build của thư viện libc )
Payload khá đơn giản , gửi command lên phân đoạn .bss(địa chỉ tĩnh) rồi sử dụng system(.bss) để execute lệnh mà mình cần mong muốn.
Exploit 300 (chung kết).
Đây là một bài format string khá đặc biệt khi mà sprintf(s,buf), chúng ta không thể nào thấy được output stack ra ngoài và NX không được bật.
Phân tích code tổng thể ta có :
Ý tưởng đưa ra là :
- Ghi đè địa chỉ bảng GOT của write thành doprocessing ( để trương trình trở lại hàm doprocessing)
- Ghi đè địa chỉ bảng GOT của sprintf bằng địa chỉ của gadpets : pop ; pop ;ret mục đích ret eip về địa chỉ của buf để execute shellcode được send lên lần thứ 2 sau khi trở về lại hàm doprocessing.
exploit 100 ( vòng loại) :
Đây là một bài exploit rất cơ bản, chỉ cần overflow biến cookie thành : 0x12345678 là có thể get được flag.
exploit200 (vòng loại): một bài exploit yêu cần chúng ta overflow eip và ret eip về stack để execute shellcode. Nếu để ý kỹ, và set breakpoint tại đây lệnh ret ở hàm doprocessing:
ECX = shellcode (input); vậy mình chỉ cần kiếm các gadgets dạng: jmp ecx hoặc call ecx là ok.
Exploit 200 (chung kết):
Bài exploit này đỏi hỏi phải leak 1 địa chỉ của 1 hàm trong bản got, rồi từ đó setup được một môi trường giống với server để tìm ra địa chỉ của hàm system, bằng cách lấy địa chỉ hàm leak - offset (offset có các giá trị khác nhau dựa vào phiên bản build của thư viện libc )
Payload khá đơn giản , gửi command lên phân đoạn .bss(địa chỉ tĩnh) rồi sử dụng system(.bss) để execute lệnh mà mình cần mong muốn.
Exploit 300 (chung kết).
Đây là một bài format string khá đặc biệt khi mà sprintf(s,buf), chúng ta không thể nào thấy được output stack ra ngoài và NX không được bật.
Phân tích code tổng thể ta có :
Ý tưởng đưa ra là :
- Ghi đè địa chỉ bảng GOT của write thành doprocessing ( để trương trình trở lại hàm doprocessing)
- Ghi đè địa chỉ bảng GOT của sprintf bằng địa chỉ của gadpets : pop ; pop ;ret mục đích ret eip về địa chỉ của buf để execute shellcode được send lên lần thứ 2 sau khi trở về lại hàm doprocessing.