
OpenSIS SQLi 인젝션
OpenSIS 인증된 SQL 인젝션
Ajax.php, ForWindow.php, ForExport.php, Modules.php, functions/HackingLogFnc.php에 SQL 인젝션 취약점이 존재합니다. 이 취약점은 OpenSis Community Edition 9.1~8.0 및 그 이하 버전에 영향을 미칩니다.
예시 중 하나인 Ajax.php에서는 악의적인 활동이 발생하면 IP가 로그로 기록되어 데이터베이스에 삽입될 수 있음을 확인할 수 있습니다. 주의할 점은 "X-Forwarded-For" 헤더가 전송되면 애플리케이션이 $_SERVER['REMOTE_ADDR'] 값 대신 해당 값을 사용한다는 것입니다. $ip는 어떠한 검증(새니타이제이션)도 거치지 않고 SQL 문에 직접 연결되므로 SQL 인젝션을 수행할 수 있습니다.

아래 개념 증명에서는 ' AND SLEEP(7) AND '1'='1 페이로드를 주입하여 애플리케이션이 7초 동안 지연(sleep)되도록 했으며, 이는 SQL 인젝션이 성공적으로 수행되었음을 나타냅니다.

데이터베이스 로그를 확인하면 이 취약점이 더욱 입증됩니다.

마지막으로 자동화된 SQL 인젝션 도구인 SQLMap을 사용하여 취약점을 확인했습니다.

영향을 받는 코드 라인은 $_SERVER['HTTP_X_FORWARDED_FOR']의 값을 SQL 문에 직접 추가하는 것으로 확인되었습니다.
• Ajax.php (260275행)1023행)
• Modules.php (1005
• ForExport.php (135147행)136행)
• ForWindow.php (124
• functions/HackingLogFnc.php (47~68행)
• SQL 쿼리를 동적으로 구성할 때 사용자 입력을 SQL 문에 직접 연결하는 대신 매개변수화된 쿼리(준비된 문(prepared statements)이라고도 함)를 사용하십시오. 매개변수화된 쿼리는 SQL 코드와 사용자 입력을 분리하여 SQL 인젝션 공격의 위험을 크게 줄여줍니다.
• 사용자가 제공한 데이터가 예상된 형식을 준수하고 악성 SQL 코드를 포함하지 않도록 강력한 입력 검증 및 새니타이제이션 기술을 구현하십시오. 입력 데이터 유형, 길이 및 형식을 검증하고 특수 문자를 이스케이프하거나 화이트리스트를 사용하여 특정 문자 또는 패턴만 허용하는 방식으로 입력을 새니타이즈하십시오.
• IP를 로깅하는 데 $_SERVER[‘HTTP_X_FORWARDED_FOR’]를 사용하지 마십시오.