2017-03-21 4 views
-1

암호 해시를 우회하는 버퍼 오버 플로우의 위험을 설명하는 코드가 있습니다.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를 직접 제어 할 수 없다는 사실로 인해 실제로 실현 가능하지 않습니다.

+0

A [mcve] 제공 : 은 "C"로켈

http://www.cplusplus.com/reference/cctype/isspace/

는 공백 문자는 임의이다. 우리가 볼 수없는 코드에 대해서는 추측 할 수 없습니다. – kaylum

+0

더 많은 코드를 추가했습니다. –

답변

0

는 scanf가 공백 문자에서 정지 :

http://www.cplusplus.com/reference/cstdio/scanf/ 문자

의 문자열 발견 된 첫 번째 공백 문자에서 중지 공백이 아닌 임의의 문자. 저장된 Null 문자는 저장된 순서 끝에 자동으로 추가됩니다.

' '  (0x20) space (SPC) 
'\t' (0x09) horizontal tab (TAB) 
'\n' (0x0a) newline (LF) 
'\v' (0x0b) vertical tab (VT) 
'\f' (0x0c) feed (FF) 
'\r' (0x0d) carriage return (CR) 
+0

오 세상에, 나는 무엇이 공백인지 아닌지에 대한 페이지가 있다는 것을 몰랐습니다! 나는 이것이 내 문제를 절대적으로 해결해야한다고 생각한다. 고마워. 나는 지금 정확한 것으로 표시하고 최대한 빨리 검증 할 것입니다. –

+0

C 질문에 대해서는 C++ 문서에 링크하지 마십시오. – fuz