WWW2Exec - .dtors & .fini_array
Last updated
Last updated
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
요즘은 .dtors 섹션이 있는 바이너리를 찾는 것이 매우 이상합니다!
소멸자는 프로그램이 끝나기 전에 실행되는 함수입니다 ( main
함수가 반환된 후).
이 함수들의 주소는 바이너리의 .dtors
섹션에 저장되며, 따라서 **__DTOR_END__
**에 주소를 shellcode로 쓰기에 성공하면, 프로그램이 끝나기 전에 실행됩니다.
이 섹션의 주소를 얻으려면:
보통 DTOR 마커는 ffffffff
과 00000000
값 사이에서 찾을 수 있습니다. 따라서 이 값들만 보인다면, 등록된 함수가 없다는 의미입니다. 그러므로 **00000000
**을 실행할 shellcode의 주소로 덮어씌우세요.
물론, 나중에 호출할 수 있도록 shellcode를 저장할 장소를 먼저 찾아야 합니다.
본질적으로 이것은 프로그램이 종료되기 전에 호출될 함수들로 구성된 구조체입니다. 이는 **.dtors
**와 유사합니다. 주소로 점프하여 shellcode를 호출할 수 있거나, 취약점을 두 번째로 악용하기 위해 다시 main
으로 돌아가야 하는 경우에 흥미롭습니다.
Note that when a function from the .fini_array
is executed it moves to the next one, so it won't be executed several time (preventing eternal loops), but also it'll only give you 1 execution of the function placed here.
Note that entries in .fini_array
are called in reverse order, so you probably wants to start writing from the last one.
In order to abuse .fini_array
to get an eternal loop you can check what was done here: If you have at least 2 entries in .fini_array
, you can:
Use your first write to call the vulnerable arbitrary write function again
Then, calculate the return address in the stack stored by __libc_csu_fini
(the function that is calling all the .fini_array
functions) and put there the address of __libc_csu_fini
This will make __libc_csu_fini
call himself again executing the .fini_array
functions again which will call the vulnerable WWW function 2 times: one for arbitrary write and another one to overwrite again the return address of __libc_csu_fini
on the stack to call itself again.
Note that with Full RELRO, the section .fini_array
is made read-only. In newer versions, even with [Partial RELRO] the section .fini_array
is made read-only also.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)