분류 전체보기(333)
-
Protostar Stack7 [ROP]
Protostar Stack7번 문제입니다 [ 그림1 ] 리턴주소에 6번문제보다 더 강한 규약이 걸려있습니다단순한 RTL( Return to Libc )기법으로 사용할 수 없고 ROP( Return Oriented Programming )기법과 함께 사용합니다 objdump명령어를 이용해서 " ret "명령어의 주소를 알아옵니다 [ 그림2 ] 얻어온 " ret "주소를 RET에 덮어씌워주고 RTL기법을 사용하면 된다 다른 설명은 5번과 6번문제에서 해놓았으므로 생략하겠습니다
2017.06.12 -
Protostar Stack6 [Channing RTL]
Protostar Stack6번 문제입니다RTL ( Return to Libc ) 기법을 사용하는 문제입니다RTL을 응용해서 Channing RTL 기법까지 사용해보겠습니다 [ 그림1 ] 소스코드를 보시면 변수 " ret "에 __builtin_return_address(0) 함수를이용해서 getpath()함수의 리턴주소를 저장합니다" ret "의 값과 " 0xbf000000 " 을 and연산합니다. 즉," ret "에 저장된 주소의 시작부분이 " bf "일 때 함수는 종료됩니다 이러한 방어기법은 쉘 코드를 버퍼에 올린 후 쉘 코드 주소를 RET에 덮어씌우는 공격을 방어하려고 고안되었습니다해당 방어기법을 무력화시킨 공격기법이 바로 " RTL "입니다 ( http://itsaessak.tistory.com..
2017.06.12 -
Protostar Stack5 [RTL]
Protostar stack5번 문제입니다. 쉘코드에 대해서 공부하는 문제입니다 기계어코드와 어셈블러를 이용해 쉘코드를 작성해서 사용할 수도 있지만 저는 RTL(Return to Libc) 기법을 사용하겠습니다 우선 환경변수 " code "를 선언하였고 " /bin/sh "로 초기화시켰습니다 " code "를 이용해서 쉘을 실행시킬 예정입니다 해당 소스코드는 환경변수의 주소값을 구하는 파일입니다이러한 코드를 짜서 환경변수의 주소를 구하는 이유는 실행되는 파일의 이름의 길이에 따라서 환경변수의 주소값이 변하는 문제가 발생하는데 이를 해결하기 위한 방안입니다그리고 다음으로 system()함수와 exit()함수의 libc내에서의 주소를 찾아야합니다 위 그림처럼 소스코드를 만들고 gdb분석을 실시합니다 함수의 ..
2017.06.11 -
Protostar Stack4 [gdb]
Protostar Stack4번 문제입니다 버퍼 오버플로우 시켜서 RET의 주소를 변질시키는 문제입니다 ( 힌트에서 버퍼와 EIP사이에 더미가 있음을 알려줍니다 ) gdb를 통해서 해당 파일을 분석해보겠습니다지역변수의 공간이 80byte할당되었습니다. 해당 파일의 스택구조는 아래와 같습니다buffer(64byte)dummy(8byte) SFP(4byte) RET(4btye) win()함수의 주소를 RET주소공간에 덮어씌우면 함수가 종료될 때 win()함수가 실행됩니다( 모르시겠다면 http://itsaessak.tistory.com/110 참고 ) 76byte(buffer+dummy+SFP) 만큼 버퍼오버플로우 시킨 뒤 RET주소공간에 win()함수의 주소를 덮어 씌웠습니다
2017.06.11 -
Protostar Stack3 [objdump]
Protostar Stack3번 문제입니다 gdb나 objdump를 이용해서 win()함수가 메모리의 어디에 있는지 확인하랍니다저는 objdump명령어를 사용해보겠습니다 #objdump -d stack3 | grep win -F5 " -d " : stack3을 디스어셈블 하겠다" grep win " : win 이라는 문자열 검색" -F5 " : 찾은 위치의 앞 뒤로 5줄 출력 64바이트만큼 버퍼오버플로우 시킨 후 함수포인터 " fp "의 주소에 win()함수의 주소를 덮어 씌운다그럼 함수포인터 " fp "가 호출 될 때 win()함수가 실행됩니다
2017.06.11 -
Protostar Stack2 [환경변수]
Protostar Stack2번 문제입니다 getenv("GREENIE") : GREENIE라는 환경변수의 값을 반환한다 따라서 우리는 환경변수를 선언해주어야합니다 " export 환경변수명=내용 "의 형태로 저장합니다. python문법을 이용해서 환경변수를 저장했습니다" $환경변수명 " 명령어를 통해서 환경변수를 사용할 수 있습니다
2017.06.11