CTF/Write UPs 29

[angstromCTF 2022 : binary] 내가 푼 문제들 풀이 (ROP, 쉘코드...)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.7 pro 대회 정보 : https://ctftime.org/event/1588 (angstromCTF 2022) whatsmyname.c 더보기 #include #include #include static void generate_name(char *str) { FILE *file = fopen("/dev/urandom","r"); fgets(str, 48, file); fclose(file); } int main(){ char yourName[48]; char myName[48]; char guess[48]; setbuf(stdout, NULL); generate_name(myName); printf("Hi! What's your na..

CTF/Write UPs 2022.05.13

[Hspace Open CTF] beat arm 풀이 (32bit arm, return to csu)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 21년도 12월 4일에 있었던 Hspace Open CTF에 출제되었던 beat arm이라는 문제이다. 약 두달전에 푼거를 이제 롸업을 적었다. 문제 설명 Can you beat ARM? LOL $ file beat_armbeat_arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, BuildID[sha1]=3ae082761da3927964058af1a3eec40d1d0891d5, for GNU/Linux 3.2.0, not stripped 제공 파일 : 문제 바이너리, docker..

CTF/Write UPs 2022.01.17

[THC CTF 2021] 내가 푼 문제들 풀이

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro Pwn Babyrop (94 point, 59 solves) rop ? rtl ? 대놓고 BOF가 터진다. secret_func에서 execve 함수를 사용해준다. 그래서 굳이 libc leak할 필요가 없다. 0x402204 + 22 = 0x40201a from pwn import * p = process('./babyrop') e = ELF('./babyrop') pop_rdi = 0x4012c3 pop_rsi_r15 = 0x4012c1 payload = '' payload += 'A' * 0x28 payload += p64(pop_rdi) payload += p64(0x40201a) # /bin/sh payload += p..

CTF/Write UPs 2021.06.17

[Circle City Con CTF 2021 : pwnable] [Baby] Fawn CDN 풀이 (overwriting)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro Analysis Check Mitigation Execution & Code 1번 메뉴를 선택하면 무슨 주소를 출력해 준다. 이 주소는 IDA에서 확인한 결과, win함수의 주소임을 알 수 있다. win 함수는 아래와 같이 생겼다. fawn.jpg를 화면에 출력해준다. 뭔가 이 사진에 flag가 저장되어 있을 것 같아서 이 함수를 최종적으로 실행시켜야겠다고 생각했다. 그리고 3번 메뉴에서 이 deliver 함수를 실행한다. 직감적으로(?) 이 함수 대신에 win함수를 실행해야겠다고 생각했고, 마침 디버깅하면서 확인해보니 s에 선택메뉴 번호 적을 때 s.fptr 영역을 덮을 수 있어서 그대로 바로 진행하였다. Get Flag fr..

CTF/Write UPs 2021.06.17

[BCACTF 2.0 : binex] 내가 푼 문제들 풀이 (포넙 올클!) (예약글, 6/14 09:30 공개)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro BCA Mart 일정 금액의 money를 주고 그 money보다 많은 flag를 구매해야 하는 문제 이런 문제일 경우, 보통 음수로 입력하거나 int 최댓값 뭐 이런거 입력하면 바로 풀린다. amount 입력할 때 int 최대값 입력해서 내 money를 늘릴 수 있다. Honors ABCs 진심 이게 젤 어려웠음 ㅎㅎ; gets로 인한 BOF for문에서 response에 대한 값을 뭐 검증한 후, 밑의 if문 로직에서 grade 변수의 값에 따라 flag를 준다. 내가 한 삽질 처음에 BOF가 일어나서 grade 변수 부분의 값을 flag출력되는 조건에 맞게 변조시키려고 했으나, 내가 입력한 후 for문 안에서 grade 변수..

CTF/Write UPs 2021.06.14

[DCTF 2021 : pwnable] formats last theorem 풀이 (FSB, printf, malloc_hook)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 대회시간 중 삽질만 퍽퍽하다가 결국 못풀었던 문제이다. 롸업보고 풀었다 ㅠ_____ㅠ printf에서 malloc_hook을 트리거할 수 있다는 것을 배웠다. 400점짜리 문제 description : I dare you to hook the malloc Analysis mitigation Full RELRO이다. got overwriting은 기본적으로 되지 않겠지.. 여기서 기본적으로 흐름을 바꿀 수 있는 키워드?는 malloc_hook, free_hook, rtld 등이 있다. execution 혹시나 했는데 FSB가 트리거 된다. code main이 vuln을 호출한다. 저 printf에서 FSB 취약점이 트리거 될 수 ..

CTF/Write UPs 2021.05.17

[DCTF 2021 : pwnable] 내가 푼 문제들 풀이

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro Pwn sanity check main에서 vuln 함수를 호출한다. 그리고 shell함수를 호출하면서 리턴을 한다. shell 함수를 살펴보면 별 게 없다...... 하지만 함수 목록을 보면 win이라는 함수가 있다. 이 함수는 인자를 2개를 필요로 한다. 이 인자의 값이 조건과 맞아떨어지면 system함수를 호출한다. 이 바이너리는 64bit 운영체제이기 때문에 pop rdi와 pop rsi와 같은 가젯을 이용하여 win 함수의 인자를 조절을 해줘야 한다. from pwn import * #context.log_level = 'DEBUG' #p = process('./pwn_sanity_check') p = remote('d..

CTF/Write UPs 2021.05.17

[SanDiegoCTF 2021 : pwnable] printFAILED 풀이 (FSB)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro '못하겠다'라고 생각해서 못 푼 문제다. '할수있다'라고 생각했으면 풀었을 듯 하다.. 이게 포넙 중에서 솔브 수가 가장 높다. 풀기 전엔 왜 솔브 수가 가장 많지..? 했는데... 풀고나니 바로 납득 되어버림 Analysis mitigation execution 로컬에서는 세폴이 뜨는데 nc로 접속했을 때는 잘된다. 바이너리를 열어보자. code 로컬에서 돌렸을 때, 저기 주황색 부분 때문에 세폴이 뜬다. 정확히는 flag.txt 파일을 열어서 fgets로 flag 전역변수에다가 flag.txt 내용을 쓰는데 로컬에 flag.txt가 없어서 세폴이 떴던 것... 결론은 로컬에 flag.txt를 하나 만들어줘야한다. 그럼 이렇게..

CTF/Write UPs 2021.05.11