본문 바로가기

전체 글

(32)
Layer7 - 포너블 4차시 과제 보호되어 있는 글입니다.
Layer7 - 포너블 3차시 과제 0솔브 방지 문제 버퍼주소 그냥 주니까 딱봐도 쉘코드 넣는거다. 함수 시작부분을 보면 알겠지만 v5에 무슨 값을 넣고 어셈으로 보면 이렇다. 이 값은 에필로그에서 변조되었는지 비교한다. 카나리가 걸려있는 것이다. 따라서 카나리를 leak해야 한다. 입력을 두번 줄 수 있고 심지어 첫번째 입력은 출력까지 해준다. 버퍼가 꽉찼을때 카나리가 leak되는걸 방지하기 위해서 카나리의 첫번째 바이트는 항상 NULL인데 딱 그 널까지만 덮어주면 카나리가 같이 딸려서 출력이 된다. 릭했으면 그 카나리 이용해서 return to shellcode하면 된다. from pwn import * context.arch = "amd64" r = remote("pwn.scalart.me", 9001) r.recvuntil("add..
Layer7 - 포너블 2차시 수업 + 과제 이름만 봐도 ezpzzzlol한 문제들이 수업 + 과제 용으로 올라와있길래 보자마자 10분 스피드런 하려 했지만 총 16분 걸렸다.. 조금 더 빡겜했으면 충분히 10분컷 할 수 있었는데 아쉽다. 스피드런도 은근 재밌는것 같다. change_ret32 대놓고 주는 BOF와 대놓고 주는 셸 함수.. 이름에서 알 수 있듯이 return address변조하면 끝난다. 버퍼가 ebp-0x14이고 32비트 바이너리니까 return address는 ebp+4에 위치하므로 더미를 0x18만큼 주고 원하는 주소 주면 rip변조 된다. 아니 근데 플래그를 좀;; 도커로 분리 해주세요;;; change_ret64 앞에 문제랑 똑같다. 차이점은 32비트냐 64비트냐 이다. 얘도 주니까 더미 0x28만큼 주고 함수주소 넣어주면..