LOB 9번(troll → vampire) 전 문제들에 비해 새로 바뀐 부분이 argv[1][46]이 ‘\xff’가 되면 안된다.그러니까 즉 argv[1]의 주소가 0xbfff****가 되면 안되고 0xbf******여야 한다는 건데 그렇담 argv[1]의 주소를 0xbffeffff이하로 받아야한다. 메모리 구조를 보면 커널영역이 1GB이므로 0xbfffffff부터 쌓인다. argc ,argv는 낮은 주소에서부터 쌓이기 때문에 argv[2]의 크기가 0x10000 이면 argv[1]의 주소는 0xbffeffff이하가 된다.0x10000 = 65,536메모리 구조LOW | buffer(40byte) | SFP(4byte) | RET(4byte) | argv[1] | argv[2] | HIGH argv[1]에 쉘코드를 넣고 RET값을 buffer의 .. 더보기 LOB 8번(orege → troll) cat troll.cargc의 개수가 2개여야 하고 argv[1]이 0으로 초기화 된다. 따라서 앞의 문제처럼 argv[0]을 공략하면 될 거 같다.argv[0]에 쉘코드로 된 심볼릭 링크를 걸고 RET값을 argv[0]쪽으로 덮는다. 근데 자꾸 저렇게 troll이 없는 파일이라 뜬다.쉘코드에 보면 \x2f가 있는데 이게 아스키 코드로 “/”이므로 디렉토리 구분자로 인식한다고 한다.그래서 쉘코드를 \x2f가 없는 것으로 바꿔준다. gdb로 argv[0]의 주소를 확인한다. 쉘코드를 획득할 때 까지 주소를 바꿔주며 삽질을 한다. 계속 시도하다보니 됐다. 더보기 LOB 7번(darkelf → orge) vi orge.c 우선 argv[0]의 길이가 77이 아니면 “argv[0] error\n”를 출력하고 종료시키는 코드 추가된 것을 제외하고는 앞의 문제와 똑같은 코드이다. +) argc : 프로그램 실행 시 지정해준 ‘명령형 옵션의 개수’가 저장되는 곳 argc는 항상 1 (옵션 하나도 입력하지 않으면!) argv : 프로그램 실행 시 지정해준 ‘명령형 옵션의 문자열들’이 실제로 저장되는 곳 argv[0]은 프로그램 자신의 파일명 argv[0]이 프로그램 자신의 파일명이라 하는 것은 ‘./파일명’자체를 말하는 것이므로 .과 /도 argv[0]의 길이에 포함된다고 한다.하지만 ‘./darkelf’의 길이는 9밖에 되지 않으므로 심볼릭 링크를 이용해야한다. +) 심볼릭 링크? 어떤 데이터를 품고 있는 파일.. 더보기 이전 1 ··· 27 28 29 30 31 32 33 ··· 36 다음