목록분류 전체보기 (40)
nemo의 이야기
취약점 분석 연습을 할 수 있게 만든 워 게임이라고 만든 서버이다. 이는 프로그램의 알고리즘을 파악하여 역공학을 한다는지 또는 binary에 숨겨진 암호를 찾아서 정답을 맞추면 다음 스테이지로 가는 암호가 주어진다. 처음문제로 leviathan0를 풀어보자 사이트는 http://overthewire.org/wargames/leviathan/ 위 에서 보듯이 .backup 권한이 leviathan1이 있는 걸 확인할 수 있다. vi 명령어를 사용하여 .backup을 실행시켜보면 html문서가 나오는데 홈페이지 기록 검색이라는 걸 확인해 볼 수 있다. 여기에서 password를 찾기 위해 pass를 검색해보면 password for leviathanl is rioGegei8m 를 확인할 수 있다.
바이너리 분석(리버싱) - 분석에 종류에는 정적분석, 동적분석이 있다. 정적분석은 프로그램을 실행하지 ㅇ낳고 기게어만 보고 판단하는 것이고 동적분석은 코드를 하나씩 실행시키고 작동원리를 확인하는 것이다. 프로세스는 커널만이 접근을 할 수 있고 다른 프로세스가 접근할 수 없다. 그래서 커널은 GDB에 권한을 부여하여 GDB를 통해여 프로세스에 접근할 수 있다. 우선 GDB에 기본 명령을 확인해보자 gdb를 실행하기 위해서는 다음 명령어를 실행해야 된다. #> gdb 프로그램을 분석하기 전에 우선 자신에게 맞는 문법을 설정해줘야 된다. (gdb) set disassembly-flavor intel (intel 문법) 그리고 메모리상에 어떤 값들이 들어있는지 확인하기 위해서 브레이크 명령이 필요하다. (gdb..
시스템 콜을 이용하는 목적 - 커널 메모리에 접근이 불가능해서 interface 메모리를 이용해서 커널에 접근하기 위해서 이다. C언어에서는 시스템 콜에 대해 라이브러리 형태로 제공한다. 어셈블리어는 eax, ebx, ecx, edx를 이용해서 write, read와 같은 함수를 사용할 수 있다. 시스템 콜에 대한 참고 사이트 : http://www.lxhp.in-berlin.de/lhpsyscal.html ex) exit(0) mov eax, 1 mov ebx, 0 int 0x80 형태로 eax, ebx에 값으로 어떤 종류 함수인지 인자 값을 넣는다. 마지막 int 0x80으로 마쳐 system call을 호출한다. 연습으로 표준입력으로 명령어를 입력받아서 입력받은 명령어를 실행하는 어셈블 프로그램을 ..
메인함수의 인자값 처리 int main(int argc, char *argv[]); argv, argc 메모리 상의 위치 "%x"를 이용해서 주소를 확인하자 print_hex에 "%x"를 넣고 실행하면 첫번째 bfffb64는 argv에 주소이다 두번째 bfffc9e는 값에 주소이다 메모리 구조를 보면 saved ebp를 기준으로 return+ 4 argc+ 8 argv+ 120xbffffb64값 : 0xbffffc9e 8byte: 4바이트 0xbffffc9e: 4바이트 null=>가변 배열 argv를 이용해서 dog cat를 출력해보자 eax에 ebp+12(argv)에 주소를 저장하고 eax+8, eax+4를 이용해서 주소 값을 이동한다. eax+4 = argv[1] eax+8 = argv[2]를 가르킨..