Another name saving app, so you don't forget it.
Bug
write_name()
에서 c->length
를 0x20
으로 설정했다가 c->name
을 입력받은 후에 다시 strlen(c->name)
으로 설정한다. strlen()
이 호출되는 시점에 c->name
에 0x20
바이트가 채워져 있다면 strlen()
의 return value는 0x21
이 되어 c->length
에 0x21
이 들어가게 된다.
이후에 edit_name()
에서 c->length
만큼 입력을 받는데 ,c->length
가 0x21
인 경우 1바이트만큼 buffer overflow가 발생하여 c->length
에 0xff
이하의 임의의 값을 넣을 수 있다.
Exploitation
BOF를 이용하여 c->func
에 win()
의 주소를 넣으면 플래그를 획득할 수 있다.
728x90