2024-04-07 02:17:55 +00:00
# WWW2Exec - .dtors & .fini\_array
< details >
2024-06-17 09:23:26 +00:00
< summary > < strong > AWS 해킹을 처음부터 전문가까지 배우세요< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > < / a > < strong > 와 함께!< / strong > < / summary >
2024-04-07 02:17:55 +00:00
HackTricks를 지원하는 다른 방법:
2024-06-17 09:23:26 +00:00
* **회사가 HackTricks에 광고되길 원하거나** **HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제** ](https://github.com/sponsors/carlospolop)를 확인하세요!
2024-04-07 02:17:55 +00:00
* [**공식 PEASS & HackTricks 스왜그** ](https://peass.creator-spring.com )를 구매하세요
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )를 발견하세요, 당사의 독점 [**NFTs** ](https://opensea.io/collection/the-peass-family ) 컬렉션
2024-06-17 09:23:26 +00:00
* **💬 [**Discord 그룹** ](https://discord.gg/hRep4RUj7f )에 가입하거나 [**텔레그램 그룹** ](https://t.me/peass )에 가입하거나 **트위터** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**를 팔로우하세요.**
* **해킹 요령을 공유하려면 PR을** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) **및** [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) **깃허브 저장소에 제출하세요.**
2024-04-07 02:17:55 +00:00
< / details >
## .dtors
{% hint style="danger" %}
요즘에는 ** .dtors 섹션을 포함한 이진 파일을 찾는 것이 매우 이상합니다!**
{% endhint %}
소멸자는 **프로그램이 종료되기 전에 실행되는 함수**입니다 (`main` 함수가 반환된 후).\
2024-06-17 09:23:26 +00:00
이러한 함수들의 주소는 이진 파일의 ** `.dtors` ** 섹션에 저장되어 있으며, 따라서 ** `__DTOR_END__` **에 **쉘코드의 주소를 쓰면** , 프로그램이 종료되기 전에 **실행**됩니다.
2024-04-07 02:17:55 +00:00
2024-06-17 09:23:26 +00:00
다음 명령어로 이 섹션의 주소를 얻을 수 있습니다:
2024-04-07 02:17:55 +00:00
```bash
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
```
2024-06-17 09:23:26 +00:00
일반적으로 **DTOR** 마커는 `ffffffff` 와 `00000000` 값 사이에 있습니다. 따라서 이 값들만 보인다면, **등록된 함수가 없다는 것**을 의미합니다. 따라서 ** `00000000` **을 **쉘코드의 주소**로 **덮어쓰세요** .
2024-04-07 02:17:55 +00:00
{% hint style="warning" %}
물론, 나중에 호출하기 위해 **쉘코드를 저장할 위치를 먼저 찾아야** 합니다.
{% endhint %}
## **.fini\_array**
2024-06-17 09:23:26 +00:00
이것은 기본적으로 프로그램이 끝나기 전에 호출되는 **함수들이 모인 구조**입니다. 이는 ** `.dtors` **와 유사합니다. 이는 **주소로 점프하여 쉘코드를 호출**하거나, **취약점을 두 번째로 이용하기 위해 다시 `main` 으로 돌아가야 하는 경우**에 흥미로울 수 있습니다.
2024-04-07 02:17:55 +00:00
```bash
objdump -s -j .fini_array ./greeting
./greeting: file format elf32-i386
Contents of section .fini_array:
8049934 a0850408
#Put your address in 0x8049934
```
2024-06-17 09:23:26 +00:00
#### 무한 루프
2024-04-07 22:24:15 +00:00
2024-06-17 09:23:26 +00:00
**`.fini_array`**에서 함수가 실행될 때 다음 함수로 이동하므로 여러 번 실행되지 않습니다(무한 루프 방지), 그러나 여기에는 함수의 실행을 1회만 제공합니다.
2024-04-07 22:24:15 +00:00
2024-06-17 09:23:26 +00:00
**`.fini_array`**의 항목은 **역순**으로 호출되므로 아마도 마지막 항목부터 쓰기를 시작하려고 할 것입니다.
2024-04-07 02:17:55 +00:00
2024-06-17 09:23:26 +00:00
**`.fini_array`**를 남용하여 무한 루프를 얻으려면 [**여기에서 수행된 작업을 확인하세요** ](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html )**:** ** `.fini_array` **에 적어도 2개의 항목이 있는 경우 다음을 수행할 수 있습니다:
2024-04-07 22:24:15 +00:00
2024-06-17 09:23:26 +00:00
* 첫 번째 쓰기를 사용하여 **취약한 임의 쓰기 함수**를 다시 호출합니다.
2024-04-07 22:24:15 +00:00
* 그런 다음, ** `__libc_csu_fini` **에 의해 저장된 스택의 반환 주소를 계산하고 ** `__libc_csu_fini` **의 주소를 거기에 넣습니다.
2024-06-17 09:23:26 +00:00
* 이렇게 하면 ** `__libc_csu_fini` **가 자신을 다시 호출하여 ** `.fini_array` ** 함수를 다시 실행하게 만들어 **취약한 WWW 함수**를 2번 호출하게 됩니다: 하나는 **임의 쓰기**를 위해이고 다른 하나는 다시 ** `__libc_csu_fini` **의 반환 주소를 덮어쓰기 위해 스택에 자신을 다시 호출합니다.
2024-04-07 02:17:55 +00:00
2024-04-07 22:24:15 +00:00
{% hint style="danger" %}
[**Full RELRO** ](../common-binary-protections-and-bypasses/relro.md )**로** 설정된 경우 ** `.fini_array` ** 섹션이 **읽기 전용**으로 만들어집니다.
2024-06-17 09:23:26 +00:00
새로운 버전에서는 [**Partial RELRO**]로 설정되어도 ** `.fini_array` ** 섹션이 **읽기 전용**으로 만들어집니다.
2024-04-07 22:24:15 +00:00
{% endhint %}