Hackappatoi CTF 2022 - [PWN] beerop (unsolved)
·
CTF/Unsolved
1. intro 2. code 및 분석 2.1. code 이 문제는 코드보다 어셈블러 코드로 보는 것이 더 나은 것 같아 불필요한 부분을 삭제하여 그대로 올린다. ┌──(kali㉿kali)-[~/Downloads] └─$ objdump -D beerop beerop: file format elf64-x86-64 ...... Disassembly of section .text: 0000000000001000 : 1000: 55 push %rbp 1001: 48 89 e5 mov %rsp,%rbp 1004: 48 8d 05 f5 0f 00 00 lea 0xff5(%rip),%rax # 0x2000 100b: 48 89 45 f8 mov %rax,-0x8(%rbp) 100f: 48 c7 c0 09 00 00 ..
send_sig
·
Wargame/Dreamhack
1. intro 2. code 및 분석 2.1 code 이번 문제는 코드가 별도로 제공되지 않고, 문제 파일과 dockerfile만 제공된다. 그래서 IDA로 디스어셈블 해보았다. void __noreturn start() { setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 1, 0LL); write(1, "++++++++++++++++++Welcome to dreamhack++++++++++++++++++\n", 0x39uLL); write(1, "+ You can send a signal to dreamhack server. +\n", 0x39uLL); write(1, "++++++++++++++++++++++++++++++++++++++++++++++++++..
SigReturn-Oriented Programming
·
Wargame/Dreamhack
1. intro 2. code 및 분석 2.1 code // Name: srop.c // Compile: gcc -o srop srop.c -fno-stack-protector -no-pie #include int gadget() { asm("pop %rax;" "syscall;" "ret" ); } int main() { char buf[16]; read(0, buf ,1024); } ┌──(kali㉿kali)-[~/Downloads] └─$ checksec srop [*] '/home/kali/Downloads/srop' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x40000..
SROP
·
Tips & theory
이론 시그널이 발생하면 커널 모드에서 실행되는데, 유저 모드의 내용을 보존하기 위해 레지스터에 값을 저장해두었다가 다시 가져오게 되며, 이를 이용해 임의의 코드를 실행할 수 있게 된다. 우선 시그널은 커널의 버전에 따라 do_signal arch_do_signal arch_do_signal_or_restart 의 이름의 함수로 시작되는데, syscall number에 따라 해당 시그널을 작동시킨다. 취약점 많은 syscall 중 특히 sigreturn이 취약한데, sigreturn 시스템 콜을 호출하면 restore_sigcontext 함수에 의해 스택의 데이터를 레지스터에 등록하게 되며, static bool restore_sigcontext(struct pt_regs *regs, struct sigc..