banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận thâm nhập [Discuss] - GOT overwrite  XML
  [Question]   [Discuss] - GOT overwrite 03/02/2009 01:43:54 (+0700) | #1 | 167906
[Avatar]
rickb
Reseacher

Joined: 27/01/2007 17:47:27
Messages: 200
Offline
[Profile] [PM] [Yahoo!]
Hi all,

Mình mới tìm hiểu & đang cố gắng thực hành kỹ thuật GOT overwrite (sử dụng format string) nhưng chưa được nên đành post lên hỏi mọi người smilie

Theo mình đọc trong 1 bài viết :

The process space of any ELF binary includes a special section, called the `Global Offset Table' (GOT). Every library function used by the program has an entry there that contains an address where the real function is located. This is done to allow easy relocation of libraries within the process memory instead of using hardcoded addresses. Before the program has used the function the first time the entry contains an address of the run-time-linker (rtl). If the function is called by the program the control is passed to the rtl and the functions real address is resolved and inserted into the GOT. Every call to that function passes the control directly to it and the rtl is not called anymore for this function 


Tức là trong ELF file sẽ có 1 section là GOT, mỗi lần 1 function được gọi lần đầu tiên, nó sẽ được run-time-linker (rtl) resolve ra real address của function đó, nó sẽ thực thi real address này, đồng thời insert real address này vào 1 entry trong bảng GOT. Nếu hàm này được gọi nữa (tức là bắt đầu lần gọi thứ 2 trở đi) , nó sẽ lấy thẳng address trong GOT ra execute mà ko cần phải dùng rtl để resolve nữa

=> Nếu ta overwrite được address này, thì lần gọi hàm thứ 2 trở đi, nó sẽ lấy address của ta (đã overwrite) để execute


Lý thuyết là thế. Bây giờ đến thực hành
Đầu tiên mình có file challenge, file này bị lỗi format string và mình đã test với kỹ thuật overwrite .dtors thành công :

Do hơi mắc công post src challenge lên (vì nó nằm trên máy khác) nên mình décribe lun, nó rất đơn giản, chỉ gồm 2 hàm : 1 hàm in ra good boy, và 1 hàm main (là hàm bị lỗi format string), và dĩ nhiên hàm main ko gọi hàm in ra good boy. Nhiệm vụ của mình là làm sao cho nó execute address của hàm in ra good boy


Bây giờ tới overwrite GOT

objdump --dynamic-reloc challenge

=> địa chỉ của entry chứa address của hàm printf trong GOT của challenge là : 0x080497cc

Mình thử overwrite tại địa chỉ này với nội dung là address của hàm in ra good boy nhưng lại ko thành công, mình ko hỉu là có hiểu sai chỗ nào ko, mong các bác chỉ giáo

Thân,
[Up] [Print Copy]
  [Question]   Re: [Discuss] - GOT overwrite 03/02/2009 04:09:46 (+0700) | #2 | 167918
choc_
Member

[Minus]    0    [Plus]
Joined: 27/01/2009 06:46:01
Messages: 122
Offline
[Profile] [PM]

địa chỉ của entry chứa address của hàm printf trong GOT của challenge là : 0x080497cc
 


Vốn liếng trả lại cho thầy hết rồi àh, gì mà vừa mới học đây lại quên hết rồi? printf được gọi ngay sau cái hàm nào đó bị format string? Nhớ là overwrite là overwrite địa chỉ của function nào được gọi ngay sau cái hàm bị format string.

Giờ muốn biết tại sao overwrite rồi mà vẫn kô execute được thì cứ đặt breakpoint ngay sau cái hàm bị format string, rồi xem thử cái GOT entry đã bị overwrite chưa, rồi đặt tiếp breakpoint tại cái GOT entry này, chạy tiếp chương trình, xem chương trình có bị break ở đó hay không. Nếu GOT entry đã bị overwrite, mà chương trình kô bị break, thì có nghĩa là overwrite lộn hàm rồi.

[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|