Level13으로 접속해서 우선 hint를 열어봅니다.
attackme의 코드이겠구요.
취약한 함수 strcpy를 사용하고 있음을 알 수 있으며, 아마 저부분을 이용해서 공격을 해야겠죠.
그런데 i에 있는 0x1234567값이 변조가 된다면 프로그램은 i를 통해 스택의 데이터가 변조 되었음을 감지하고 Warnning: Buffer Overflow !!!라는 문장을 출력하고 프로그램이 종료 될듯 합니다.
즉 i의 값을 변조 하지 않고 ret값을 바꾸는것이 핵심이겠네요.
어셈블리로 코드를 확인해 보니 <main+3>에서 1048만큼의 공간을 확보하고 있습니다.
그후 movl $0x1234567, 0xfffffff4(%ebp)를 통하여 ebp-12지점에 0x1234567을 입력 하네요.
<main+9>까지 진행 된다음 스택 구조는 다음과 같이 됩니다.
ret(4byte) |
ebp(4byte) |
dummy(8byte) |
0x1234567(4byte) |
dummy(12byte) |
buf[1024](1024byte) |
Python –c ‘print “A”*1036+”\x67\x45\x23\x01”+”A”*12+[쉘코드주소] 이렇게 넣어주면 아마 문제 없이 돌아갈듯 합니다.
그럼 이제 환경변수에 쉘 코드를 등록하고 쉘 코드의 주소를 얻어오면 되겠습니다.
이제 i를 바꾸지 않고 ret를 덮어주면 됩니다.
문제 없이 level14계정의 쉘이 획득 되었습니다.
level14의 패스워드는 what that nigga want?이네요.
'HackerSchool Series > F.T.Z.' 카테고리의 다른 글
[F.T.Z.(Free Training Zone)] Level - 15 (0) | 2016.01.06 |
---|---|
[F.T.Z.(Free Training Zone)] Level - 14 (0) | 2016.01.03 |
[F.T.Z.(Free Training Zone)] Level - 12 (0) | 2016.01.03 |
[F.T.Z.(Free Training Zone)] Level - 11 (0) | 2016.01.03 |
[F.T.Z.(Free Training Zone)] Level - 10 (0) | 2015.07.07 |