SystemHacking(95)
-
[7] PLT / GOT / objdump활용법
[1] PLT ( Procedure Linkage Table )PLT는 일종의 실제 호출 코드를 담고있는 테이블로써 _dl_resolve함수를 통해서 실제 시스템 라이브러리 호출이 이루어진다 [2] GOT ( Global Offset Table )GOT는 PLT가 참조하는 테이블로써 프로시져들의 주소를 가지고 있다PLT가 외부 프로시져를 호출할 때 GOT를 참조해서 해당 주소로 점프한다 ex) 어떤 프로그램에서 printf()함수를 호출한 상황[1] printf()함수를 처음 호출 했을 때 과정1> printf()함수 호출2> PLT로 이동3> dl_resolve()함수 실행4> GOT에 printf()함수의 주소를 저장5> printf()함수의 실제 주소로 점프한다 [2] 다시한번 printf()함수를..
2017.06.14 -
Protostar Format4 [ FSB / PLT / GOT ]
Protostar Format4번 문제입니다 [ 그림1 ] vuln()함수에서 exit(1)함수가 실행되어 종료됩니다exit(1)함수가 실행되는 주소값을 변질시켜서 hello()함수가 실행되게 해보도록 하겠습니다objdump명령어를 사용하여서 필요한 함수들의 주소를 찾아내겠습니다 [ 그림2 ] $objdump -TR ./format4 | grep exitexit(1)함수가 실행(호출)되는 주소 : 0x08049724 [ 그림3 ] $objdump -d ./format4 | grep hello -F10 hello()함수의 시작주소 : \x080484b4 exit(1)함수가 호출되는 주소에 hello()함수의 시작주소를 덮어씌우는 공격코드를 작성하면 끝입니다 [ 그림4 ] [1] 먼저 우리가 입력한 데이터가..
2017.06.13 -
Protostar Format3 [ FSB / objdump ]
Protostar Format3번 문제입니다 [ 그림1 ] 이번에는 target변수에 16진수의 주소값을 넣는 문제입니다 [ 그림2 ] 포맷스트링버그공격에서 제일먼저 해야할 일이 우리가 입력한 값이 어디에 위치하는지 알아내는 것입니다12번째 "%8x"스트링에서 우리가 입력한 데이터 AAAA를 확인할 수 있습니다 [ 그림3 ] objdump명령어를 이용해서 target변수의 주소를 알아내었습니다 ( 옵션은 -t 또는 -d 를 사용해도 됩니다 ) [ 그림4 ] 그리고 공격코드를 작성해줍시다포맷스트링 버그를 이용해서 16진수의 주소값을 원하는 주소에 입력시키려면 주소를 2byte씩 채워주어야합니다( 포맷스트링 버그의 자세한 설명은 http://itsaessak.tistory.com/115 링크에 있습니다 )
2017.06.13 -
Protostar Format2 [ FSB / objdump ]
Protostar Format2번 문제입니다 [ 그림1 ] target변수의 값을 64로 변질시키면 되는 문제입니다 [ 그림2 ] 포맷스트링버그공격에서 제일먼저 해야할 일은 내가 입력한 데이터가 어디에 존재하는지를 알아내는 것입니다 4번째 " %8x "스트링에서 우리가 입력한 데이터 AAAA가 있음을 확인이 가능합니다 [ 그림3 ] target의 주소를 알아야 공격을 할 수 있기 때문에 objdump명령어를 이용해 target의 주소를 알아냅니다 [ 그림4 ]공격코드입니다$ (python -c 'print "\x41\x41\x41\x41"+"\xe4\x96\x04\x08"+"%8x%8x%8x%32c%n"';cat ) | ./format2 코드에 따라서 "%n"스트링에 의해서 0x080496e4 ( tar..
2017.06.13 -
Protostar Format1 [ FSB / objdump ]
Protostar Format1번 문제입니다 포맷스트링버그를 이용해서 target변수의 값을 변질시키는 문제입니다[ 그림1 ] $objdump -t format1 | grep target // targer변수의 주소를 알아냈습니다 [ 그림2 ] 포맷스트링버그를 이용한 공격코드를 만들었습니다./format `python -c print "\x41\x41\x41\x41"+"\x38\x96\x08\x04"+"%08x"*127+"%08x"'` 127번째 %08x 에서 "\x41\x41\x41\x41" 의 메모리에 접근할 수 있습니다 따라서 마지막의 %08x 스트링을 %08n 으로만 바꿔주면 "\x04089638"메모리에 값이 입력되어져 변질시킬 수 있습니다./format `python -c print "\x41..
2017.06.13 -
Protostar Format0 [ FSB ]
Protostar Format0번 문제입니다 [ 그림1 ] sprintf( buffer , string )함수를 통해서 실행파일의 첫번째 인자를 buffer에 strcpy 하는 프로세스입니다기존에 버퍼 오버 플로우 처럼 A문자를 64개 오버플로우 시킨뒤 target변수를 변질시키면 되지만, 조건이 있습니다input의 byte크기가 10byte미만이여야합니다따라서 아래와 같이 코드를 짭니다 [ 그림2 ] " %64c "스트링에 의해서 64byte만큼 오버플로우 되었습니다 ( 공백이 63개 들어간 뒤 문자열 하나가 들어가는 형태입니다 )
2017.06.13