목록분류 전체보기 (62)
농소
지금까지 문제들을 전부 \xff를 써서이전과는 다르게 argv[1][46]에 /xff를 쓰지말라고 하네요. . . 공간을 한번 만들어 보겠습니다. 이런식으로 매우 많은 코드를 넣어 현재 스택메모리를 확인했더니 스택주소가 bffff~ 가 아닌 bffe로 변경됨을 확인 했습니다.이제 저 nop코드중에 쉘코드를 넣어 실행시키면 될 것 같습니다. nop코드에 쉘을 넣고 실행되었더니 쉘이 실행되어 권한상승이 일어났습니다.
다음 troll파일을 보면 전 문제같은 경우 argv[2]를 이용하여 공격을 했는데 0,1만 사용할 수 있게 해뒀네요또 추가적으로 argv[1]을 0으로 초기화 시키네요 그러면 argv[0]에 쉘코드를 넣어야 겠습니다아마 전의 darkelf에서 했던 방법 그대로 하면 되겠네요 자 우선 2f를 /로 인식을 하기에 신경써서 경로를 만들어줍니다. 만들어 주었으면 심볼릭링크를 이용하여 쉘코드를 넣습니다. 제가 argv[0]주소를 나타내는 코드를 따로만들어 실행한겨로가 bffff8c5가 나왔습니다 실제 공격파일의 eip위치에 저 값을 넣어주면 되겠습니다. 임의로 만들었던 파일을 제거하고 실제 공격파일을 생성하여 실행한결과 쉘이 실행되었습니다.
이번문제는 argv[0]의 길이를 추가로 체크하네요공격을 하려면 심볼릭 링크로 argv[0]에 쉘코드를 넣거나 argv[2]의 값을 이용하거나argv[0]에 쉘코드를 넣을때 길이체크하는것은 여러모로 귀찮을것 같으니 심볼릭 링크로 길이만 맞추어 주고 argv[2]에 쉘코드를 넣도록 하겠습니다. 우선 심볼릭 링크로 길이를 맞춰주고 bbbb... 파일은 제가따로 argv[2]길이를 체크 하기위해 만든 파일입니다.입력해보니 bffff7cc가 시작주소가 되네요 argv[2]의 길이체크는 하지않으므로 넉넉하게 nop코드를 넣어주고 쉘코드를 삽입하여 실행한 결과 쉘이 실행되어 권한상승이 일어나게 됐습니다.
살펴보면arg 0,1 두개 사용 가능환경변수 0 초기화첫번째 인자의 48번째값 = \xbf 스택메모리 이용 첫번째 인자 길이체크버퍼메모리 0 초기화 추가적으로 1번째 인자의 길이를 막았네요arg 0번째는 아직 체크를 안하므로 0번째에 쉘코드를 넣어서 실행시키도록 하겠습니다. 심볼릭 링크를 이용하여 0번째 인자에 쉘코드를 넣으려고 했으나 경로설정이 안되어서 오류가 발생했습니다. \x2f이 / 로 인식하나봅니다. 경로를 만들어 줍시다. 정상적으로 링크가 설정되어 있는것을 확인할 수 있습니다 제가 따로 argv[0]의 시작주소를 출력해주는 것을 추가해주어 확인한 결과 bffff8ad인 것을 확인 했습니다. 다시 원래 파일을 심볼릭 링크 하여 해당 주소로 변경후 실행한 결과 쉘이 실행되..
네 다음 레벨의 문제를 보니 이번엔 추가적으로 buffer hunter라고 버퍼메모리를 못쓰게 막아놨네요그런데 이전에 저는 환경변수 메모리를 이용했으므로 그대로 이용해 줍시다. 이전문제랑 똑같은 명령어를 넣으면 쉽게풀립니다. * 시작주소는 달라질 수 있습니다.
이번에는 egghunter라는 방어책을 하나 추가시켰네요 그리고 첫번째 인자의 47번째 문자('\xbf')가 아니면 강제로 종료가 되네요그런데 버퍼의 크기가 buffer(=40byte), ebp(=4byte), eip(=4byte)저 47번째 위치는 eip가 들어가는 주소이기 때문에 어차피 bof를 할 때 저 위치에는 '\xbf'가 와야 하므로 딱히 신경 쓸 필요는 없는 것 같습니다. gdb로 확인한 결과 eip의 첫주소엔 bf가 들어갈 수 밖에 없습니다. payload $(python -c 'print "" * 44 + "" + "" ')특정문자에 nop을 쓰면 주소를 찾기 쉬우니 쓰시면 더 편하실겁니다. 쉘코드를 넣어주고 쉘주소를 설정하여 실행한 결과 정상적으로 쉘이 실행 되었습니다.
다음 gobilin 파일의 문제입니다. 이번에는 인자가 아닌 표준입력으로 bof를 해야하는 문제입니다. 크기를 보니 버퍼공간에 쉘코드를 삽입 할 수 없으니환경변수에 쉘코드를 넣도록 하겠습니다. payload (python -c 'print "" * 20 +"" + ""';cat) | ./goblin
이어서 2번 문제 입니다. 이전 문제에서 추가적으로 방어기능을 만들었네요 버퍼크기를 줄여 쉘코드를 버퍼에 삽입할 수 없게 만들었습니다. 보시다 시피 버퍼내부에는 쉘코드를 넣을 공간이 모자랍니다.그래서 저는 버퍼 공간이 아닌 환경변수들이 들어가는 공간에 쉘코드를 삽입하여 공격하겠습니다. payload $(python -c 'print "" * 20 +"" + ""')
이번에는 bof원정대 문제를 풀어보려합니다. 초반부라 그런지 기본적인 bof문제입니다. gdb로 본 결과 260byte를 채우면 eip값을 변조 할 수 있겠군요변조하여 쉘코드를 실행해줍니다. 정상적으로 쉘이 실행되면서 권한상승이 되었습니다.
이어서 level 2문제를 풀어보죠 두번째 인자를 이용해 eip를 변조하여 쉘코드를 실행하게 만드는 간단한 오버플로우 문제네요 우선 c로 볼 때 buf 값이 128이라 128만 채우면 되는줄 알았지만 gdb로 본 결과 eip까지 도달하기 위해선 140byte의 공간을 사용해야하네요 쉘코드 삽입과 eip에 쉘코드 주소를 넣어줍니다. 16바이트씩 주소를 변형해가면서 실행한 결과 쉘이 실행되고 eui가 변형된것이 확인이 되었습니다. 비밀번호를 알았으니 다음단계로 가볼게요