반응형
FTZ 20 Level
printf에 bleh라는 문자열을 바로 집어 넣으면서 FSB 취약점이 생기게 됩니다.
printf에서 %x를 쓰면 ebp-8부터 -4씩 감소하면서 인자를 읽어 오게 됩니다.
여기서 확인할 수 있는 것은 bleh 배열의 시작 위치와 printf의 ebp+8 사이에는 12byte의 공간이 존재한다는 것입니다. bleh 배열의 시작 위치는 ebp+20이라는 것을 알 수 있습니다.
그리고 %n와 %정수c를 이용해서 원하는 주소의 메모리에 원하는 값을 넣을 수 있습니다.
고정된 주소인 main 함수의 소멸자 부분 .dtors의 __DTOR_END__의 값을 셸코드의 주소로 변조하면 main 함수가 끝난 후에 쉘이 실행될 것입니다.
0x08049594입니다. __DTOR_END__는 +4 위치인 0x08049594입니다. 보통 주소가 크기 때문에 2byte씩 나눠서 공격하는데, AAAA낮은주소BBBB높은주소 의 형식으로 쓰입니다.
낮은 주소는 0x08049598이고, 높은 주소는 0x0804959a입니다.
level20_parents.py 입니다. 환경 변수를 올리고 level20_2.py를 실행합니다.
level20_1.py 입니다. __DTOR_END__를 변조하는데 성공했다면, 쉘이 성공적으로 실행될 것입니다.
level20_2.py 입니다.
중간 생략..
반응형
'System&Write up > FTZ_Python' 카테고리의 다른 글
FTZ level19 -> level20 Write up(Python) (0) | 2017.12.14 |
---|---|
FTZ level18 -> level19 Write up(Python) (0) | 2017.12.14 |
FTZ level17 -> level18 Write up(Python) (0) | 2017.12.14 |
FTZ level16 -> level17 Write up(Python) (0) | 2017.12.14 |
FTZ level15 -> level16 Write up(Python) (0) | 2017.12.14 |