Game/L.O.B
L.O.B level5
ellen28
2015. 3. 4. 00:05
level5. orc
cantata
소스확인!! cat wolfman.c
소스를 보니 level4와 마찬가지로 환경변수를 쓸 수 없도록 막아두었고,
RET 주소가 \xbf로 시작해야하고,
마지막을 보면 memset함수를 이용해서 버퍼를 초기화 시켜서 버퍼에 쉘코드를 올려봤자 무용지물이 되도록 하였습니다 ㅠㅠ
여러가지 방법으로 풀 수있겠지만, 쉘코드가 RET보다 높은 주소에 올라가는 방법으로 풀겠습니다.
페이로드 : [A*44(dummy)] + [RET(4)] + [쉘코드(25byte)] 와 같은 방식으로 구성했습니다!!
buf의 시작주소와 RET주소는 44만큼 떨어져 있으므로, 쉘코드의 주소는 buf주소 + 48(0x30)이 됩니다.
buf의 시작주소를 구하기위해 wolfman의 사본을 만들고, 주소가 출력될 수 있도록 %s를 %x로 바꾸고
새롭게 컴파일 합니다!
또, argv[1]의 길이에 따라 buf의 시작주소가 바뀌므로 공격할 문자열의 길이를 정확히 보내줍니다.
buf의 주소는 0xbffffab0
쉘코드의 주소 0xbffffab0 + 48(0x30) = 0xbffffae0 == RET주소
쉘이 떴습니다!! 끝!