2012-03-19 2 views
1

쉘 코드에 null 바이트가 허용되지 않는다고 생각했습니다. 일부 쉘 코드를 이해하는 동안 null을 포함하고 완벽하게 작동하는 코드를 발견 한 것 같습니다. 이유가 무엇입니까?쉘 코드의 널 바이트?

http://pastie.org/private/feg8du0e9kfagng4rrg

+2

디버거를 제거하고 알아보십시오. 묻는 것은 당신이 많이 배우는 것을 도울 것입니다. –

답변

2

셸 코드의 null 바이트 문제는 C 표준 문자열 라이브러리의 문자열 처리에서 오버플로를 사용하여 주입되는 경우에만 해당됩니다. 여기서 null 바이트는 문자열의 끝을 의미하므로 복사가 중지됩니다. C 스타일의 문자열로 버퍼 오버 플로우를 이용하는 것이 90 년대 중반에 가장 인기있는 쉘 코드 삽입 방식이었습니다. 현재 대부분의 C 코드는 다른 함수 (OpenBSD strlcpy/strlcat 세트, * _s() 세트 또는 자체 제작 함수)를 사용하여 (AFAIK) 보호되며 C++이 이미 null 바이트가없는 문자열 라이브러리를 가지고 있기 때문에 환경이 덜 오래되었습니다 종료. 현재, 대부분의 익스플로잇은 버퍼가 너무 작거나 프로그래밍 오류가 몇 가지 경계 사이에있을 때 mischecking을 사용합니다.

내가 링크 된 코드를 분석하지 못했지만 이진 데이터에서 TLV의 잘못된 처리를 사용하는 것 같습니다. 어쨌든 바이너리 데이터 처리로 인해 null 안전합니다 (그러나 다른 방법으로 악용 가능).

1

이 환경 변수에 널 포인터를 사용 .... 탐구!