본문 바로가기

전체 글

(70)
[pwn] 바이너리 파일이 실행 안되는 경우 경로도 제대로 설정되어 있고 실행권한도 있는데 아래와 같이 gdb위에서 실행이 되지 않고 그냥도 실행이 안되는 경우가 있다.       이때는 file 명령어로 아키텍처가 다른지 확인을 해야 한다. 보통 이렇게 파일이 있는데도 파일을 찾지 못하는 경우 local은 64bit이고 바이너리가 32bit인 경우가 있다.      32bit인 것을 확인할 수 있다. 위의 파일은 멘토님의 서버에서만 실습하는 용도인 것 같아서 따로 설치는 안하지만 이럴경우 gpt로 필요한 특정 라이브러리를 설치하면 해결이 된다.
[pwn] nop sled pwn 문제를 풀면서 shellcode를 적고 shellcode의 주소로 ret을 덮어서 실행 시킬 때 다양한 이유들로 쉘 코드의 주소에 offset 차이가 생길 수 있다. 이 경우 계속 exploit에 실패하게 될텐데 shellcode 앞에 nop인 '\x90'을 길게 붙이면 어느정도 offset 차이가 발생하더라도 가리키는 주소가 shellcode 앞에 있는 nop zone에 포함되어 nop 명령어가 실행되면서 쉘코드까지 미끄러지듯이 실행될 수 있다. 보통 aslr이 걸려있지 않은데도 offset 차이가 발생하는 경우들이 있다. gdb로 실행 시킬 때나, 그냥 실행 시킬 때, 혹은 로컬과 서버에서 실행 시킬 때, offset의 차이가 발생하게 되는데 이는 서로 다른 환경의 env 때문에 발생한다. g..
[pwn] pwntools cyclic 활용 pwn bof문제를 풀다가 보면 입력 buffer로부터 ret의 거리를 구하는 경우처럼 offset을 구해야 하는 경우가 있다. 보통 stack frame을 살펴야 하는데 이때 pwntools의 cyclic을 활용하면 보다 쉽게 구할 수 있다. pwntools의 cyclic의 원리는 고유한 순환 패턴 문자열을 생성한다. 이후 특정 문자열의 offset 값을 알려주는 원리로 offset을 구할 수 있다. 명령어는 python exploit code에서 쓸 수도 있고 cli 명령어 프롬프트에서 사용할 수도 있다. 아래는 gdb가 아닌 cli 명령어 프롬프트에서 사용하는 명령어이다. pwn cyclic pwn cyclic -l  이외에도 gef gdb에서 지원해주는 pattern도 같은 상황에서 많이 쓰이니 ..