티스토리 뷰





Hackerschool FTZ의 Level 20 풀이입니다.







배열의 길이는 80인데 fgets 함수로 입력받는 길이는 79네요.


그렇다면 버퍼 오버플로우 공격을 할 수 없습니다.


그런데 printf 함수에서 %s 를 사용하지 않고 문자열을 출력했습니다.


그래서 FSB, 즉 포맷 스트링 버그를 이용해서 풀 수 있을 것 같습니다.


포맷 스트링 중에 %n이 있는데 %n은 쓰인 총 바이트 수를 지정할 정수형 포인터를 출력할 때 쓰는 것입니다.


그리고 이번에는 버퍼 주소 대신 함수가 끝나고 실행하는 소멸자 .dtors를 이용할 것입니다.


먼저 .dtors의 주소를 알아보겠습니다.







.dtros가 끝날 때 호출하는 명령을 저장한 주소는 0x0849598입니다.


이번에는 쉘코드를 환경변수에 등록하고 주소를 알아내겠습니다.







쉘코드의 주소는 0xbffffc0b입니다.


0xfc0b = 64523

64523 - 40 = 64483

0x1bfff = 114687

0x1bfff - 0xfc0b = 50164


이제 위에서 얻은 정보들로 공격 코드를 작성해서 입력해주겠습니다.









Password : i will come in a minute




CLEAR~





'Pwnable > Hackerschool' 카테고리의 다른 글

[Hackerschool FTZ] Level 19 풀이  (0) 2018.10.05
[Hackerschool FTZ] Level 18 풀이  (0) 2018.10.05
[Hackerschool FTZ] Level 17 풀이  (0) 2018.10.04
[Hackerschool FTZ] Level 16 풀이  (0) 2018.10.04
[Hackerschool FTZ] Level 15 풀이  (0) 2018.10.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함