# WWW2Exec - .dtors & .fini\_array {% hint style="success" %} AWS 해킹을 배우고 실습하세요:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ GCP 해킹을 배우고 실습하세요: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks 지원하기 * [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요. * **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
{% endhint %} ## .dtors {% hint style="danger" %} 요즘에는 **.dtors 섹션을 포함한 이진 파일을 찾기가 매우 이상합니다!** {% endhint %} 소멸자는 **프로그램이 종료되기 전에 실행되는 함수**입니다 (`main` 함수가 반환된 후).\ 이러한 함수들의 주소는 이진 파일의 **`.dtors`** 섹션에 저장되어 있으며, 따라서 **`__DTOR_END__`**에 **쉘코드 주소를 쓰면** 프로그램이 종료되기 전에 **실행**됩니다. 이 섹션의 주소를 가져오려면: ```bash objdump -s -j .dtors /exec rabin -s /exec | grep “__DTOR” ``` 보통 **DTOR** 마커를 **`ffffffff`**와 **`00000000`** 값 사이에 **찾을 수 있습니다**. 그러므로 이 값들만 보인다면, **등록된 함수가 없다는 것을 의미**합니다. 따라서 **`00000000`**을 **쉘코드의 주소로 덮어씌우세요**. {% hint style="warning" %} 물론, 나중에 호출하기 위해 **쉘코드를 저장할 곳을 먼저 찾아야**합니다. {% endhint %} ## **.fini\_array** 이것은 **프로그램이 끝나기 전에 호출될 함수**들을 가진 구조체입니다. **`.dtors`**와 마찬가지로 **주소로 점프하여 쉘코드를 호출**하거나, **취약점을 두 번째로 이용하기 위해 다시 `main`으로 돌아가야 하는 경우**에 흥미로울 것입니다. ```bash objdump -s -j .fini_array ./greeting ./greeting: file format elf32-i386 Contents of section .fini_array: 8049934 a0850408 #Put your address in 0x8049934 ``` #### 무한 루프 **`.fini_array`**에서 함수가 실행될 때 다음 함수로 이동하므로 여러 번 실행되지 않습니다(무한 루프 방지), 그러나 여기에는 함수의 실행을 1회만 제공합니다. **`.fini_array`**의 항목은 **역순**으로 호출되므로 아마도 마지막 항목부터 쓰기를 시작하려고 할 것입니다. **`__libc_csu_fini`**에 의해 저장된 스택의 반환 주소를 계산하고 **`__libc_csu_fini`**의 주소를 거기에 넣으면: * **`__libc_csu_fini`**이 자신을 다시 호출하여 **`.fini_array`** 함수를 다시 실행하게 만듭니다. 이는 취약한 WWW 함수를 2번 호출하게 하며, 하나는 **임의 쓰기**를 위한 것이고 다른 하나는 다시 **`__libc_csu_fini`**의 반환 주소를 덮어쓰기 위해 스택에 자신을 다시 호출합니다. {% hint style="danger" %} [**Full RELRO**](../common-binary-protections-and-bypasses/relro.md)로, **`.fini_array`** 섹션이 **읽기 전용**으로 만들어집니다. 새로운 버전에서는 [**Partial RELRO**]로도 **`.fini_array`** 섹션이 **읽기 전용**으로 만들어집니다. {% endhint %} {% hint style="success" %} AWS 해킹 학습 및 실습:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ GCP 해킹 학습 및 실습: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks 지원 * [**구독 요금제**](https://github.com/sponsors/carlospolop) 확인! * 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요. * [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 레포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
{% endhint %}