Files

62 lines
1.8 KiB
ArmAsm

.section .data
msg_normal: .ascii "Normal exit.\n"
msg_secret: .ascii "SUCCESS! Secret function executed!\n"
.section .text
.global _start
# --------------------------------------------------------
# [타겟 함수] 정상적인 흐름으로는 절대 호출되지 않음
# --------------------------------------------------------
secret_function:
# "SUCCESS! ..." 출력
mov $4, %eax # sys_write
mov $1, %ebx # stdout
mov $msg_secret, %ecx
mov $35, %edx # length
int $0x80
# 즉시 종료
xor %ebx, %ebx
mov $1, %eax # sys_exit
int $0x80
# --------------------------------------------------------
# [취약한 함수] 4바이트 버퍼에 100바이트를 들이부음
# --------------------------------------------------------
vuln_func:
# 스택 프레임 확보 (겨우 4바이트)
sub $4, %esp
# sys_read(stdin, buffer=esp, len=100)
mov $3, %eax # sys_read
xor %ebx, %ebx # stdin (0)
mov %esp, %ecx # buffer (현재 스택 포인터 위치)
mov $100, %edx # [취약점] 4바이트 방에 100명을 초대함!
int $0x80
# 스택 정리
add $4, %esp
# [여기가 핵심]
# 스택에서 리턴 주소(RET)를 꺼내서 점프하는데,
# 위에서 오버플로우로 RET 조작되었다면? -> 펑!
ret
# --------------------------------------------------------
# [메인 진입점]
# --------------------------------------------------------
_start:
call vuln_func
# 정상 종료 메시지 출력 (익스플로잇 실패 여기로 옴)
mov $4, %eax
mov $1, %ebx
mov $msg_normal, %ecx
mov $13, %edx
int $0x80
# 종료
xor %ebx, %ebx
mov $1, %eax
int $0x80