목록Information security (35)
nemo의 이야기
위 소스를 확인해보면 1. 스택 메모리만 사용해야 된다. 2. argv[1]에 길이에 제한을 걸어 48바이트 이상을 못 쓴다. 따라서 argv[2]애 쉘코드를 입력하여 공격하는 방식으로 하면 성공할 것 이다. 그러면 우선 argv[2]에 주소를 확인하여 argv[1]에 argv[2]에 주소를 넣어주자 avgv[0]에 주소가 bffffab4에 있다는 것을 확인 할 수 있다. 이제 argv[0]에서 부터 argv[2]에 있는 주소를 확인해보자 bffffbf0에 argv[2]가 있는 것을 확인 할 수 있다. 그러면 nop슬라이딩을 이용하여 공격해보자 공격 코드 : ./darkelf $(python -c 'print "A" * 44 + "\xf0\xfb\xff\xbf" + " " + "\x90" * 1000 +..
소스를 확인해보면 위과 같다. 분석해보면 return 주소가 bf로 시작해야되서 스택 메모리를 사용해야되고 마지막에 memset함수를 사용하여 buffer에 메모리가 0으로 초기화되는 것을 확인할 수 있다 이를 해결하기 위해서는 argv[1]에 쉴코드를 넣어서 공격해야된다. 우선 argv[1]에 주소를 확인해 보자 c소스에서 printf("%s") => %x로 바꿔서 argv[1]에 주소를 확인해보자 bffff6e0라는 것을 확인할 수 있다. 그러면 이제 공격코드를 작성해서 공격해보자
orc.c 파일을 확인해보면 위와 같은 소스 파일을 확인할 수 있다. 소스파일을 분석해보면 memset함수를 이용해서 환경변수를 초기화하는 것을 확인할 수 있다. 그리고 argv[1]에 리턴 주소 마지막 byte가 bf으로 끝나지 않으면 프롤그램이 종료 되게 설정해놨다. 이 문제를 해결하기 위해서는 버퍼에 쉘코드를 삽입하여 공격을 해야된다. 우선 버퍼에 A를 44byte를 넣고 리턴주소에 bfbfbfbf를 넣어 메모리를 확인해보자 버퍼에 주소는 bffffad0라는 것을 확인할 수 있다. 그러면 해당 주소에 쉘코드를 넣고 나머지는 nop으로 채워서 공격해보자 메모리를 확인해보면 정확히 들어가 있는 것을 확인할 수 있다. 그러면 원본 파일에 가서 공격을 시도해보자 위 사진처럼 실패한 것을 확인할 수 있다. ..
이번 문제는 cobolt에 있는 goblin 문제이다. 소스 파일을 확인하면 아래과 같다. 문제를 확인하면 버퍼에 크기는 16바이트 이다. 그리고 중요한것은 프로그램이 실행 후 gets() 함수를 이용해서 버퍼에 문자를 입력하는 형식에 프로그램이다. 이 문제를 해결하기 위해서는 파이프라인을 이용해서 프로그램 수행과 동시에 문자열을 입력해야 된다. 우선 gdb를 이용해서 스택 메모리를 확인해보자 실행 시켜서 gets함수를 이용해서 a를 20byte를 넣어보자 메모리에 정확히 들어가 있는 것을 확인할 수 있다. 그러면 argv 뒤에 있는 스택 메모리에 nop슬라이딩을 한 후 쉘코드를 넣어보자 그리고 스택 메모리는 대략 bffffb58정도로 설정해보자 dummy(20byte) + 스택 주소(4byte) + n..