목록2021/03/15 (2)
Sechack

처음에 디컴파일 결과보고 쫄았던 문제이다. 70줄이나 되었던... 원래같으면 포기하고 다른문제 풀었을탠데 한번 자신을 믿어보기로 하고 분석해봤다. 위에서도 말했지만 디컴파일 결과가 타 문제보다 길어서 쫄았다. 하지만 핵심만 파악하면 간단하게 익스플로잇 할 수 있는 문제였다. 위에 부분은 조금 잘렸는데 변수 선언부분이다. 근데 대회때 볼때는 디컴파일 결과 70줄이었는데 왜 지금은 67줄이지... 디컴파일 결과도 상황에 따라서 바뀌나보다. 보호기법은 카나리, NX, PIE가 걸려있다. 어차피 이 문제에서는 의미없으므로 신경쓰지 않아도 된다. 위에 코드를 분석하면서 프로그램을 한번 실행해보았다. 대충 실행해보니까 사용자가 입력한 길이만큼 리스트 만들고 원하는 함수주소 입력하면 우리가 만들었던 리스트 인자로 주..

main함수와 _read함수, 그리고 _start함수 3개만 덩그러니 있었다. gdb로 어셈블리어를 보니까 rbp-0x8에 입력받는데 0x200만큼 입력이 가능했다. 즉 sfp와 ret을 덮는게 가능하다. (gdb로 다시한번 더 본 이유는 IDA에서는 rbp-fd라고 출력이 되어서 정확한 확인을 위해 gdb로 한번더 보았다.) 근데 지금보니까 fd = dword ptr -8이라는게 상단에 보인다. 역시 static이다. 보호기법을 보니 NX가 해제되어 있었다. 이말은 즉 쉘코드 삽입이 가능하다는 말이다. 처음에는 syscall로 call chain을 구성해보자는 생각을 했으나 가젯이 너무나도 없었다. pop rax만 있어도 sigreturn을 사용해서 익스플로잇 했을텐데 rax를 조작해줄수 있는 가젯마저..