본문 바로가기

WarGame/HackerSchool_LOB

HackerSchool LOB Level12


자 이제 레벨12의 소스를 보자


상당히 코드가 깔끔해졌다.


함수 하나를 콜 하는데

이 함수는 40바이트 버퍼에 41바이트 만큼의 argument 1을 복사한다.

결국, EBP를 1바이트 만큼만 덮어씌울 수 있다는 것이다.


이 공격이 무엇인가하니

SPO공격이라고 한다.

FPO공격이라고도 부르는 것 같다.

사실 무엇이 맞는지는 잘 모르겠다;;



SPO공격이란, Stack frame Pointer Overflow 의 약자로, 

FPO공격이란, Frame Pointer Overwrite 의 약자로,


SFP에 저장된 EBP의 값을 1바이트만 변경하여 공격하는 기법이다.

하지만 이 공격은 main에서는 공격 할 수 없고, 함수가 호출되어 리턴될 때에만 사용이 가능하다.

main의 ebp가 변경되어, main이 리턴될 때, 변경된 주소로 실행이 되게 해야 하므로, leave 가 2번 작동되어야만 한다고 한다.




ret | ebp | main | edx | ebp | ret | buf |

이런식으로 저장이 되어 있다.


main의 ebp가 0xbffffb08 이고, 리턴주소는 0x080483b1이다.

우리는 이 ebp를 조작하여, 리턴주소가 있는 부분을 우리의 NOP[15]+쉘코드[25] 가 있는 부분으로 바꿔버리면 끝이다.

NOP[15]+쉘코드[25]+\xac 로 하면 메인의 ebp가 0xbffffaac로 바뀌게 되고, 리턴주소는 0x41414141 이 되어 버린다.

그래서 NOP을 타고 가다가 중간에 쉘코드를 만나면 쉘코드가 실행될 것이다.





그럼 main의 리턴주소가 될 부분에 NOP[15]+쉘코드[25] 가 있는 주소로 바꾸기 위해 아래와 같이 입력하였다.


`python -c 'print "\x90"*15+"\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"+"\xac"'`



'WarGame > HackerSchool_LOB' 카테고리의 다른 글

HackerSchool LOB Level14  (0) 2014.08.20
HackerSchool LOB Level13  (0) 2014.08.15
HackerSchool LOB Level11  (0) 2014.07.31
HackerSchool LOB Level9  (0) 2014.07.30
HackerSchool LOB Level8  (0) 2014.07.29