8번 문제이다
소스를 보자
이 부분이 추가되었다.
argc가 2가 아니면 프로그램이 종료되므로,
결국, 이제는 argument를 무조건 1개만 사용해야 한다는 것이다.
자, 이쯤에서 한번 정리해보자.
이제는 쓰지 못하는 것이
1. argument 를 단 1개만 사용 가능하다.
2. 환경변수도 사용하지 못한다.
3. 사용 가능한 1개의 argument 의 48번째 바이트는 \xbf여야 한다.(어차피 스택주소를 넣을거라 상관없다)
4. 사용 가능한 1개의 argument 의 길이가 48보다 크면 프로그램이 종료된다.
5. 40바이트의 buffer 캐릭터 배열은 40바이트 만큼 0으로 덮어씌워진다. 결국, strcpy에서 40바이트에는 쉘코드를 넣지 못한다.
SFP(4바이트)와 RET(4바이트)는 0으로 덮어씌워지지 않는다.
6. 결론. 리턴주소는 변경이 가능하다
이제 어떻게 공격을 해야할까??
이 부분도 추가되었다.
하나 더 있다.
7. 사용 가능한 1개의 argument 조차도 전체길이가 0으로 덮어씌워진다.
이제 쉘코드를 버퍼, argumetn, 환경변수에도 넣지 못한다.
쉘코드를 넣어 리턴할 새로운 곳을 연구하는 것이
이번 문제의 핵심인 것 같다.
조금만 생각해보니 금방 생각이 났다.
바로 이전문제에서 심볼릭링크를 걸 때, 파일명을 특정 길이만큼 늘려서 사용했다.
그럼 이번에는 argv[0]인 파일명(여기서는 심볼링링크 파일명) 에 쉘코드를 올려놓고 리턴주소를 이쪽으로 돌리면
공격이 가능할 것이다.
자 이제 공격해보자
그런데 심볼릭링크를 만드려고 하는데 계속 오류가 발생하였다.
왜인지 확인을 해보니 \x2f 때문에 오류가 났다.
출력을 해보니 \x2f 가 / 여서 이러한 디렉토리가 없어서 안되었다.
그러므로 \x2f 가 없는 쉘코드를 다시 찾아야 했다.
\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81
이거다
좋다
이제 할 일은 argv[0] 의 NOP위 위치를 대충 찾아 찍어내면 끝이다.
이제 gdb를 돌려서 RET주소를 변조할 스택주소를 찾는다.
troll 파일에 연결시킬 심볼릭파일은 BB어쩌구로 만들었다.
성공했다.
'WarGame > HackerSchool_LOB' 카테고리의 다른 글
HackerSchool LOB Level11 (0) | 2014.07.31 |
---|---|
HackerSchool LOB Level9 (0) | 2014.07.30 |
HackerSchool LOB Level7 (0) | 2014.07.29 |
HackerSchool LOB Level6 (0) | 2014.07.29 |
HackerSchool LOB Level5 (0) | 2014.07.29 |