버퍼 오버플로 문제로 작업하면서 뭔가 이상한 점을 발견했습니다. 성공적으로 점프하고 싶은 적절한 주소 앞에 32자를 제공해야하며 적절한 주소는 0x08048a37
이라는 것을 성공적으로 발견했습니다. 실행했을 때Python3 print() Vs Python2 print
python -c "print '-'*32+'\x37\x8a\x04\x08'" | ./MyExecutable
악용으로 성공을 거두었습니다. 하지만, 내가 시도했을 때 :
python3 -c "print('-'*32+'\x37\x8a\x04\x08')" | ./MyExecutable
그것은하지 않았다. 실행 파일은 원하는 주소로 점프하지 않고 단순히 세그먼트 화 오류를 발생 시켰습니다. 사실, 콘솔 개의 상이한 출력
python -c "print '-'*32+'\x37\x8a\x04\x08'"
및
python3 -c "print('-'*32+'\x37\x8a\x04\x08')"
결과를 실행하는 단계를 포함한다. 문자는 물론 읽을 수 없지만 시각적으로 다릅니다.
왜 이런 일이 발생했는지 궁금합니다.