pwnable/ctf14 [write-up] 2018 codegate - Super Marimo 보호되어 있는 글 입니다. 2018. 3. 8. [write-up] 2018 codegate - BaskinRobins31 2018 코드게이트 퍼너블 첫문제이다. 먼저 64비트 바이너리였다. 보호기법은 nx만 걸려져 있었다. 프로그램을 실행해보니 베스킨 라빈스 게임을 하는 프로그램이었다. 코드에서 입력을 받는 read를 따라가 봤더니 바로 버퍼오버플로우가 나는 것을 확인할 수 있었다. 이제 그냥 64bit rop해주면 된다. 첫문제라 쉽다. payload # !usr/bin/env python # ryuuu from pwn import * libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") libc_start_main_offset = libc.symbols['__libc_start_main'] s = process("./baskin") #s = process(["strace","-i","./ba.. 2018. 2. 6. [write-up] 2017 white_league-start 먼저 64비트 바이너리였다. 보호기법은 카나리와 nx가 걸려 있었다. 바이너리를 실행해보면 멤버를 추가, 삭제, 수정, 출력 할 수 있었다. 그런데 업데이트 부분을 보면 다른 부분과 다르게 입력이 마이너스인 것을 검사하는 루틴이 없다. 따라서 마이너스를 입력해주면 bss 영역에 존재하는 mem_info 위의 값에 접근할 수 있게 된다 하지만 int 입력을 받을 때 아스키로 받아서 연산해서 바로 마이너스를 넣어줘도 마이너스가 되지 않는다 자세히 보면 int 입력을 받는 함수는 unsigned int로 변수가 선언되어 있지만 update를 해주는 함수는 signed int로 되어 있어서 integer overflow를 이용하여 마이너스를 입력해 줄 수 있다. 따라서 마이너스를 입력하여 member 내용을 출.. 2018. 2. 5. [write-up]Codegate 2017 babypwn 코드게이트를 앞두고 옛날에 풀었던 babypwn을 다시 풀어봤다. 먼저 바이너리를 확인해보니 32비트 바이너리였다. 보호기법은 canary와 nx가 걸려있었다. 소켓 프로그램이었으며 디폴트 포트는 8181이었다. 또한 argv로 포트를 지정할 수 있었다. send와 recv로 메시지를 쓸 수 있는 프로그램이었다. 그런데 메시지를 쓸 때 정해진 배열보다 많은 입력을 받아서 bof가 발생한다. send로 출력하기 때문에 카나리 위치+1까지 버퍼를 덮어씌우면 카나리 릭 또한 가능하다. system 함수가 사용되었기 때문에 system plt를 쓸 수 있다. 소켓 프로그램이므로 /bin/sh가 아닌 리다이렉션을 해서 /bin/sh &0을 넣으면 된다. payload # usr/bin/env python # ry.. 2018. 1. 31. [write-up] 2016 hdcon - pwnit 64비트 바이너리인데 헤더 사이즈가 이상하다고 한다. 디버깅, 디컴파일 또한 되지 않았다 Readelf 명령어를 통해 보니 프로그램 헤더가 비어 있었다. 또한 엔트리 포인트도 이상했다. 그런데 엔트포인트 뒤에서 0x805912a가 보였다. 따라서 32비트 파일을 64비트 파일로 강제로 바꿔놓은 것이 아닌가 생각이 들었다. 따라서 32비트 64비트를 구별히주는 elf 5번째 핵스값을 2에서 1로 패치해 32비트 바이너리로 만들어 주었다. 바꿔준 결과 헤더들이 정상적으로 돌아온 것을 확인할 수 있었다. 이제 본격적으로 바이너리를 분석할 수 있다. 32비트 정적으로 컴파일된 파일이었고 보호기법은 nx만 걸려져 있었다. 정적 컴파일이기 때문에 실행시켰을때 나오는 문자열로 main을 찾아 들어갔다. 바로 출력되는.. 2018. 1. 29. [write-up] 2015 defcon - r0pbaby pie가 걸려있는 문제를 처음 접해서 문제 난이도에 비해 생각보다 시간이 조금 걸렸다. 먼저 바이너리를 확인해보니 64비트 바이너리였다. 보호기법은 fortify, nx, pie가 걸려 있었다. 바이너리를 실행해보니 libc 주소를 출력시키는 메뉴, libc의 함수 주소를 출력해주는 메뉴, rop할수 있는 메뉴가 있는 것 같았다. 실제로 소스를 보자 로컬 libc를 가져와 출력해주는 소스를 확인 할 수 있었다. system 주소를 출력해보았다. gdb로 확인해보니 실제 libc에 있는 system 주소와 같았다. 따라서 이 system함수를 이용하여 system('/bin/sh")를 실행하면 될 거 같다. 3번 메뉴를 들어가보니 memcpy로 안에 있는 값을 복사하는 것을 볼 수 있었다. 그런데 복사 d.. 2018. 1. 28. 이전 1 2 3 다음