목록분류 전체보기 (40)
nemo의 이야기
위 소스를 확인해보면 1. argv[0]에 글자 길이가 77자가 되어야 된다. 2. 환경변수를 사용 못한다. 3. argv[1]에 글자 길이가 48이상이 되면 안된다. 4. 스택 메모리만을 사용해야 된다. 이를 공격에 성공하려면 mkdir를 이용해여 argv[0]에 글자 길이를 맞추어서 공격을 햐야된다. argv[2]에 있는 주소는 bfffb80이다 그러면 이전에 사용했던 방법을 이용하여 공격을 해보자 절대 경롤를 입력하여 이전에 사용했던 코드를 입력하면 Seagmentation fault라는 오류 문구가 나온다 여기서 argv[2]에 주소를 16을 위 아래로 조정하 여 바꿔보자 아래로 조정을 해서 위와 같이 공격에 성공하였다.
위 소스를 확인해보면 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으로 채워서 공격해보자 메모리를 확인해보면 정확히 들어가 있는 것을 확인할 수 있다. 그러면 원본 파일에 가서 공격을 시도해보자 위 사진처럼 실패한 것을 확인할 수 있다. ..