4.8 KiB
WWW2Exec - .dtors & .fini_array
{% hint style="success" %}
AWS 해킹을 배우고 실습하세요:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹을 배우고 실습하세요: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 요금제를 확인하세요!
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
.dtors
{% hint style="danger" %} 요즘에는 .dtors 섹션을 포함한 이진 파일을 찾기가 매우 이상합니다! {% endhint %}
소멸자는 프로그램이 종료되기 전에 실행되는 함수입니다 (main
함수가 반환된 후).
이러한 함수들의 주소는 이진 파일의 .dtors
섹션에 저장되어 있으며, 따라서 **__DTOR_END__
**에 쉘코드 주소를 쓰면 프로그램이 종료되기 전에 실행됩니다.
이 섹션의 주소를 가져오려면:
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
보통 DTOR 마커를 **ffffffff
**와 00000000
값 사이에 찾을 수 있습니다. 그러므로 이 값들만 보인다면, 등록된 함수가 없다는 것을 의미합니다. 따라서 **00000000
**을 쉘코드의 주소로 덮어씌우세요.
{% hint style="warning" %} 물론, 나중에 호출하기 위해 쉘코드를 저장할 곳을 먼저 찾아야합니다. {% endhint %}
.fini_array
이것은 프로그램이 끝나기 전에 호출될 함수들을 가진 구조체입니다. **.dtors
**와 마찬가지로 주소로 점프하여 쉘코드를 호출하거나, 취약점을 두 번째로 이용하기 위해 다시 main
으로 돌아가야 하는 경우에 흥미로울 것입니다.
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로, .fini_array
섹션이 읽기 전용으로 만들어집니다.
새로운 버전에서는 [Partial RELRO]로도 .fini_array
섹션이 읽기 전용으로 만들어집니다.
{% endhint %}
{% hint style="success" %}
AWS 해킹 학습 및 실습:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원
- 구독 요금제 확인!
- 💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃헙 레포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.