암호 해시를 우회하는 버퍼 오버 플로우의 위험을 설명하는 코드가 있습니다.NULL이 아닌 16 진수 char 입력이 C에서 null로 해석됩니다.
scanf("%29s", password);
은 그때 모두 암호를 인쇄 :
echo -ne "\xab\x94\x44..." | ./checkPassword
이에 의해 checkpassword를에 구문 분석 : 암호를 해독하는 내 입력은 다음과 같이 명령 줄을 통해 입력되는 육각 문자의 문자열로 구성
printf("\n%s", password):
및
for (i=0; i<29; i++) {
printf("%c ", password[i]);
}
입력 문자열은 scanf를 사용하여 checkPassword에 의해 캡처됩니다. 나는 입니다. 특정 크래킹 문자열 "\ x ..."을 생성하는 데 사용하는 메서드가 정확합니다. 그러나 때때로 암호를 무시하지 않는 경우가 있습니다. checkPassword에 의해 읽혀진 입력 문자열을 출력 할 때 \ xc와 같은 문자가 \ x00으로 해석되었고 그렇지 않다면 암호를 무시했을 것입니다. 나는 이것을 고치거나 설명하지 않았다. 누구든지 아이디어가 있습니까? 어떤 제안을 주셔서 감사합니다
편집 : 더 많은 코드를 제공합니다.
EDIT2 : \ xc는 프로그램이 그 뒤에 오는 문자를 무시한다는 것을 의미합니다. 이 문제를 일으키는 유일한 문자는 아니지만 모두 "< \ xc"인 것 같습니다. 불행히도, 그것보다 적은 값을 금지하는 것은 chars를 직접 제어 할 수 없다는 사실로 인해 실제로 실현 가능하지 않습니다.
A [mcve] 제공 : 은 "C"로켈
http://www.cplusplus.com/reference/cctype/isspace/
더 많은 코드를 추가했습니다. –