
이것은 WebERP 버전 4.15에서 블라인드 SQL 인젝션 취약점에 대한 익스플로잇을 시연하는 Python3 스크립트입니다.
이것은 2019년 6월 10일 Semen Alexandrovich Lyhin이 처음 발견한 WebERP 4.15 버전의 블라인드 SQL 인젝션 취약점에 대한 익스플로잇을 시연하는 Python3 스크립트입니다. 원본 익스플로잇은 여기에서 찾을 수 있으며, WebERP 시스템에 대한 자세한 내용은 공식 WebERP 웹사이트에서 확인할 수 있습니다.
이 취약점은 WebERP가 base64 인코딩으로 수신된 쿼리를 unserialize() 함수에 전달하여 처리하는 방식에 있습니다. 특히, 이 스크립트는 이러한 쿼리를 아무런 정화 처리 없이 배열로 역직렬화할 수 있습니다. 이후 이 배열의 각 요소는 추가 검사 없이 SQL 쿼리에 직접 전달되어 시스템이 SQL 인젝션 공격에 노출됩니다.
스크립트 작동
이 스크립트는 다음과 같은 단계로 위 취약점을 악용하여 작동합니다.
악성 쿼리는 generatePayload() 함수를 사용하여 준비됩니다. 이 함수는 SQL 인젝션 페이로드가 포함된 직렬화된 배열을 설계하고 이를 base64 형식으로 인코딩합니다.
스크립트는 제공된 자격 증명과 세션 쿠키를 검색하는 getCookies() 함수를 사용하여 WebERP 시스템에 로그인합니다.
새 공급업체는 addSupplierID() 함수를 사용하여 시스템에 추가됩니다. 공급업체 이름은 나중에 시스템의 응답을 식별하기 위한 표시로 사용됩니다.
익스플로잇은 runExploit() 함수를 사용하여 실행됩니다. 이 함수는 WebERP 시스템의 "Payments.php" 페이지에 POST 요청을 보냅니다. 이 함수는 base64로 인코딩된 페이로드를 POST 데이터의 매개변수로 포함시킵니다.
요청에 대한 응답 시간이 측정됩니다. 응답 시간이 현저히 길어지면 주입된 sleep() 명령으로 인해 SQL 쿼리가 지연되었음을 의미하며, 이는 SQL 인젝션 취약점의 존재를 확인해 줍니다.
python3 exploit.py <target> <path> <login> <password> <order>
<target>, <path>, <login>, <password>, <order>를 각각 대상 IP 주소, 대상 경로, 사용자 로그인, 사용자 비밀번호, 회사 주문 번호로 바꾸십시오.
예시:
python exploit.py 192.168.1.1 'WEBerp/' admin weberp 1