ssongk
ssongk
ssongk
전체 방문자
오늘
어제

공지사항

  • resources
  • 분류 전체보기 (626)
    • CTF (24)
    • background (79)
      • fuzzing (5)
      • linux (29)
      • linux kernel (15)
      • windows (2)
      • web assembly (1)
      • embedded (0)
      • web (13)
      • crypto (9)
      • mobile (1)
      • AI (1)
      • etc.. (3)
    • write-up(pwn) (171)
      • dreamhack (102)
      • pwn.college (4)
      • pwnable.xyz (51)
      • pwnable.tw (3)
      • pwnable.kr (5)
      • G04T (6)
    • write-up(rev) (32)
      • dreamhack (24)
      • reversing.kr (8)
    • write-up(web) (195)
      • dreamhack (63)
      • LOS (40)
      • webhacking.kr (69)
      • websec.fr (3)
      • wargame.kr (6)
      • webgoat (1)
      • G04T (7)
      • suninatas (6)
    • write-up(crypto) (19)
      • dreamhack (16)
      • G04T (1)
      • suninatas (2)
    • write-up(forensic) (53)
      • dreamhack (5)
      • ctf-d (47)
      • suninatas (1)
    • write-up(misc) (13)
      • dreamhack (12)
      • suninatas (1)
    • development (31)
      • Linux (14)
      • Java (13)
      • Python (1)
      • C (2)
      • TroubleShooting (1)
    • 자격증 (8)
    • 이산수학 (1)
    • 정보보안 (0)
hELLO · Designed By 정상우.
ssongk

ssongk

[pwn.college] Return Oriented Programming
background/linux

[pwn.college] Return Oriented Programming

2024. 5. 2. 21:11

pwn college의 rop 문제들을 풀면서 배운 점들을 적어본다.

pwn college의 libc 버전인 2.31으로 봤는데 다른 버전일 땐 해당 libc 파일을 gdb로 보면 되겠다.

 

 

1. 리턴 주소가 __libc_start_main인데 leak이 전혀 안된 상태에서 main으로 리턴이 필요한 경우

  • glibc 2.31에서 main 함수의 리턴 주소는 <__libc_start_main+243>이다.
  • 여기서 최하위 바이트를 변조시켜 <__libc_start_main+208>으로 변조시킨다면 다시 main으로 갈 수 있다.
   0x24060 <__libc_start_main+208>:     mov    QWORD PTR fs:0x300,rax
   0x24069 <__libc_start_main+217>:     mov    rax,QWORD PTR [rip+0x1c7e40]        # 0x1ebeb0
   0x24070 <__libc_start_main+224>:     mov    rsi,QWORD PTR [rsp+0x8]
   0x24075 <__libc_start_main+229>:     mov    edi,DWORD PTR [rsp+0x14]
   0x24079 <__libc_start_main+233>:     mov    rdx,QWORD PTR [rax]
   0x2407c <__libc_start_main+236>:     mov    rax,QWORD PTR [rsp+0x18]
   0x24081 <__libc_start_main+241>:     call   rax
   0x24083 <__libc_start_main+243>:     mov    edi,eax
   0x24085 <__libc_start_main+245>:     call   0x46a40 <exit>

 

 

2. 원 가젯에서 인자로 "/bin/sh"을 쓰지 않고 싶을 경우

  • 원가젯은 "/bin/sh"을 인자로 가지고 execve 시스템 콜을 수행한다.
  • execvpe 함수를 보면 아래와 같이 "/bin/sh"가 아닌 다른 값을 가지고 execve 시스템 콜을 호출 할 수 있는 부분이 존재한다.
  • rdi가 가리키는 주소에 저장된 값과 동일한 값을 이름으로 가진 바이너리를 만들어 원하는 동작을 수행할 수 있다.
  • 리눅스에서 파일 이름을 ''$'\001' 같은 8진수 형태로 만들 수 있다.
   0x00000000000e38c5 <+69>:    mov    rdx,r12
   0x00000000000e38c8 <+72>:    mov    rsi,rbx
   0x00000000000e38cb <+75>:    mov    rdi,r13
   0x00000000000e38ce <+78>:    call   0xe3170 <execve>

https://pwn.college/software-exploitation/return-oriented-programming/

 

'background > linux' 카테고리의 다른 글

[pwn.college] Format String Bug  (0) 2024.05.06
FSOP(File Stream Oriented Programming)  (0) 2024.04.29
[how2heap] Tcache Poisoning (glibc 2.31/2.35)  (0) 2024.04.10
[how2heap] House of Botcake (glibc 2.31)  (0) 2024.03.18
[how2heap] Fastbin dup into stack (glibc 2.35)  (1) 2024.03.11
    'background/linux' 카테고리의 다른 글
    • [pwn.college] Format String Bug
    • FSOP(File Stream Oriented Programming)
    • [how2heap] Tcache Poisoning (glibc 2.31/2.35)
    • [how2heap] House of Botcake (glibc 2.31)
    ssongk
    ssongk
    벌레 사냥꾼이 되고 싶어요

    티스토리툴바