hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aws2exec-.dtors-and-.fini_array.md

4.2 KiB

AWS2Exec - .dtors & .fini_array

{% hint style="success" %} AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기
{% endhint %}

.dtors

{% hint style="danger" %} 요즘은 .dtors 섹션이 있는 바이너리를 찾는 것이 매우 이상합니다. {% endhint %}

소멸자는 프로그램이 끝나기 전에 실행되는 함수입니다 ( main 함수가 반환된 후).
이 함수들의 주소는 바이너리의 .dtors 섹션에 저장되며, 따라서 **__DTOR_END__**에 주소shellcode쓰기에 성공하면, 프로그램이 끝나기 전에 실행됩니다.

이 섹션의 주소를 얻으려면:

objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”

보통 DTOR 마커는 ffffffff00000000사이에서 찾을 수 있습니다. 따라서 이러한 값을 보면 등록된 함수가 없다는 의미입니다. 그러므로 **00000000**을 실행할 shellcode의 주소덮어씌우십시오.

{% hint style="warning" %} 물론, 먼저 shellcode를 저장할 장소를 찾아야 나중에 호출할 수 있습니다. {% endhint %}

.fini_array

본질적으로 이것은 프로그램이 종료되기 전에 호출될 함수들로 구성된 구조체입니다. 이는 **.dtors**와 유사합니다. 주소로 점프하여 shellcode를 호출할 수 있거나, 취약점을 두 번째로 악용하기 위해 다시 main으로 돌아가야 하는 경우에 흥미롭습니다.

objdump -s -j .fini_array ./greeting

./greeting:     file format elf32-i386

Contents of section .fini_array:
8049934 a0850408

#Put your address in 0x8049934

Note that this won't create an eternal loop because when you get back to main the canary will notice, the end of the stack might be corrupted and the function won't be recalled again. So with this you will be able to have 1 more execution of the vuln.

{% hint style="danger" %} Note that with Full RELRO, the section .fini_array is made read-only. {% endhint %}

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}