본문 바로가기

wargame/hackCTF

[hackCTF]pwnable x64 Buffer Overflow x64 Buffer Overflow 5번 문제 이전과 같이 다운로드 받고 실행 권한을 추가한다. 아이다를 통해 살펴보자. main함수는 다음과 같다. 별건 없다. callMeMaybe 함수를 살펴보자. execve 함수를 실행한다. ret이전의 메모리를 아무 값이나 채우고 ret을 callMeMaybe 함수의 주소로 채우면 될 거 같다. callMeMaybe 주소를 구했다. exploit.py를 작성했다. payload는 0x110+0x8(sfp)를 아무 값이나 채우고 callMeMaybe 주소 값으로 ret을 채운다. 실행시킨다. 원격으로 실행되도록 수정하자. 문제 해결 +) 참고 nx가 enable이어서 쉘코드가 실행이 안되는 것은 ret을 덮어서 함수를 실행시키는 것과 연관성이 없다.
[hackCTF]pwnable 내 버퍼가 흘러넘친다!! 내 버퍼가 흘러넘친다!! 4번 문제 이전과 같이 문제를 다운 받고 실행 권한을 준다. 마찬가지로 아이다로 확인해보자. main함수 외에는 기본적으로 주어진 함수이다. main 함수 내에서 문제를 해결해야 한다. setvbuf(stdout, 0, 2, 0); 은 버퍼를 없앤다고 한다. 자세한 건 구글링ㄱ read함수는 stdin으로 받은 값을 name에 저장하고 gets함수는 stdin으로 받은 값을 s에 저장한다. checksec으로 보호기법을 확인해보자. 이전 문제와 다르게 NX가 disabled 되었음을 확인할 수 있다. 이는 stack에 실행(x) 권한이 존재한다는 의미이므로 쉘코드를 삽입하여 문제를 해결하자. read를 통해 name에 쉘코드를 삽입하고 gets를 통해 main함수의 ret을 na..
[hackCTF]pwnable Baisc_BOF #2 Baisc_BOF #2 2번 문제 이전과 같이 다운 받고 실행 권한을 준다. 아이다로 확인해보자. Function window를 보면 이전과는 달리 두 개의 함수가 더 추가된 것을 확인할 수 있다. 우선 main함수를 살펴보자. v5는 함수포인터이다. 자세한 건 구글링ㄱㄱ 중요한 건 함수를 가리키는 포인터이기 때문에 6번째 줄때문에 sup을 가리킨다는 것이다. 이걸로는 문제를 해결할 수 없다. 다른 함수를 살펴보자. sup함수는 다음과 같다. 별 건 없고 s의 값을 화면에 출력한다. shell함수를 살펴보자. 이걸로 쉘을 딸 수 있다! 정리해보자. 우리는 shell()을 실행시키면 문제를 해결할 수 있다. main함수에서 v5를 실행하는데 v5가 sup을 가리키는 대신 shell을 가리키면 된다. 이는 ..
[hackCTF]pwnable Basic_BOF #1 Basic_BOF #1 파일을 다운받을 수 있는 링크와 원격 접속 포트를 알 수 있다. 문제를 풀어 얻은 flag 값을 제출하는 형식이다. wget 명령어로 파일을 다운로드 받는다. chmod 명령어로 실행 권한을 주면 준비가 끝난다. gdb를 이용해 어셈블리 코드를 확인하는 방법도 있지만 그냥 아이다로 편하게 확인하자. (F5를 눌러 수도코드로 확인하자) 왼쪽 Functions window를 확인하면 main 함수 이외에는 딱히 생성한 함수는 없는 것 같다. fgets함수를 이용해 stdin으로부터 45바이트를 받아 s에 저장하는데 v5가 0xDEADBEEF이면 쉘을 딸 수 있다. 쉘에서 플래그를 탈취할 수 있다. NX가 enabled 되어 있으므로 쉘코드를 삽입하여 문제를 해결할 수 없다. 그러니 v..