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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
heaplens — # CMPT733 साइबर सुरक्षा लैब II परियोजना: CVE-2021-3156 से प्रेरित हीप शोषण के लिए GDB प्लगइन | Kitploit
उपकरण/GitHubGitHub/ypl6/heaplens
भेद्यता विश्लेषणशोषणडीबगर्सबाइनरी विश्लेषणलर्निंग और शिक्षा
GitHubypl6/heaplens

heaplens

# CMPT733 साइबर सुरक्षा लैब II परियोजना: CVE-2021-3156 से प्रेरित हीप शोषण के लिए GDB प्लगइन

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

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

सभी देखें →

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

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

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

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

heaplens

🔎 हीलेंस

CMPT733 साइबर सुरक्षा लैब II परियोजना

📂 रिपॉजिटरी संरचना

root@kitploit:~
.
├── README.md
├── heaplens.png
├── heaplens.py
├── logs
│   ├── sudoedit-#.txt
│   └── ...
└── tests
    ├── Makefile
    ├── env-in-heap
    └── ...
  • README.md: यहीं है!
  • heaplens.py: मुख्य स्क्रिप्ट
  • logs/: विकास और परीक्षण के दौरान हमारे द्वारा कैप्चर किए गए कुछ नमूना लॉग शामिल हैं
  • tests/: परीक्षण के लिए कुछ बाइनरी (और उनके सोर्स कोड) शामिल हैं

📦 वातावरण

यह उन चीज़ों (और संस्करणों) की सूची है जिनका उपयोग हमने एक्सप्लॉइट का परीक्षण करने के लिए किया। वे VM में पहले से इंस्टॉल होने चाहिए। यदि कुछ भी गायब है, तो नीचे दिए गए निर्देशों का पालन करें।

निर्भरताएँ

  • Ubuntu 20.04.4 (64-bit)
  • python 3.8.10
  • glibc 2.34
  • gdb 9.2
  • gef 2022.01
    • यदि gef रूट के अंतर्गत सक्षम नहीं है, तो /root/.gdbinit देखें
    • यदि फ़ाइल खाली है, तो बस वही कॉपी करें जो आपके पास ~/.gdbinit में है

sudo निर्भरताएँ (sudo पर heaplens चलाने के लिए)

डिबगिंग सक्षम के साथ sudo का एक बाइनरी आवश्यक है। डिबग प्रतीकों के साथ एक पूर्व-निर्मित बाइनरी VM में इंस्टॉल की गई है।

root@kitploit:~
cyberlab@ubuntu:~$ which sudo
/usr/local/bin/sudo

cyberlab@ubuntu:~$ sudo --version
Sudo version 1.8.31
Sudoers policy plugin version 1.8.31
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.31

cyberlab@ubuntu:~$ sudoedit -s /
sudoedit: /: not a regular file # sudo कमजोर है

📝 प्लगइन लोड करना

यह VM में पहले ही किया जा चुका है। यदि कॉन्फ़िगरेशन गलत है, तो आप हीलेंस लोड करने के लिए यहाँ दिए गए निर्देशों का पालन कर सकते हैं।

विकल्प 1

gef शुरू करें और कॉन्फ़िग संपादित करें:

root@kitploit:~
gef➤ gef config gef.extra_plugins_dir <पथ>/heaplens
gef➤ gef save
gef➤ q

यह फ़ाइल ~/.gef.rc या /root/.gef.rc (रूट के अंतर्गत) को अपडेट करना चाहिए।

विकल्प 2

~/.gdbinit या /root/.gdbinit में यह पंक्ति जोड़ें:

root@kitploit:~
source <पथ>/heaplens/heaplens.py

💡 उपयोग

विशेषाधिकार प्राप्त प्रोग्रामों को डिबग करते समय रूट के अंतर्गत gdb चलाने की सलाह दी जाती है:

root@kitploit:~
$ sudo su
# gdb

सभी कमांड के लिए सहायता संदेश प्रदान किए गए हैं। आप GDB में <command> -h के माध्यम से उन तक पहुँच सकते हैं।

heaplens

मेमोरी आवंटन और विमोचन फ़ंक्शनों से हीप जानकारी एकत्र करता है, जिसमें malloc, realloc, calloc, और free शामिल हैं।

उच्च-स्तरीय विचार यह है कि इन फ़ंक्शनों को हुक करके, हम कॉल स्टैक के साथ-साथ मेमोरी आवंटन के रिटर्न पते की जाँच और अद्यतन करने की प्रक्रिया को स्वचालित कर सकते हैं। ट्रेस की जाँच करके, हम देख सकते हैं कि कुछ C फ़ाइलों में foo() द्वारा कौन सा चंक आवंटित किया गया है, और हम आगे की जाँच कर सकते हैं, जैसे कि आसन्न चंकों की जाँच करके, हीप एक्सप्लॉइटेशन के लिए उपयुक्त लक्ष्य खोजने के लिए।

यह बीच में कस्टम ब्रेकपॉइंट जोड़ने का भी समर्थन करता है यदि उपयोगकर्ता मध्यवर्ती हीप लेआउट में रुचि रखता है।

कमांड स्वयं बहुत वर्बोज़ नहीं है और परिणाम प्रिंट करने के लिए आपको heaplens-dump का उपयोग करने की आवश्यकता होगी।

root@kitploit:~
heaplens -h
usage: [-h] [-b BREAKPOINT] [-v]

मेमोरी (डी)आवंटन फ़ंक्शनों से हीप जानकारी एकत्र करें।

optional arguments:
  -h, --help            यह सहायता संदेश दिखाएँ और बाहर निकलें
  -b BREAKPOINT, --breakpoint BREAKPOINT
                        यहाँ निष्पादन रोकें (gdb में br {breakpoint} निष्पादित करें) (default: None)
  -v, --verbose         आउटपुट वर्बोसिटी बढ़ाएँ (default: False)

उदाहरण आउटपुट:

root@kitploit:~
gef➤  file sudoedit
gef➤  heaplens -b set_cmnd -- -s '\\' $(python3 -c 'print("A"*65535)')
----------------------------
Initializing Heaplens
----------------------------
Temporary breakpoint 1 at 0x5840: file ../../src/src/sudo.c, line 136.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
usage: sudoedit [-AknS] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
[Inferior 1 (process 82934) exited with code 01]
Setting breakpoint at set_cmnd...
Function "set_cmnd" not defined.
Breakpoint 2 (set_cmnd) pending.
Hooking free function...
Breakpoint 3 at 0x7f25cc163700: free. (2 locations)
Hooking malloc function...
Breakpoint 4 at 0x7f25cc163110: malloc. (2 locations)
Hooking realloc function...
Breakpoint 5 at 0x7f25cc163eb0: realloc. (2 locations)
Hooking calloc function...
Breakpoint 6 at 0x7f25cc164b40: calloc. (2 locations)
Running -s '\' $(python3 -c 'print("A"*65535)')...
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 2, set_cmnd () at ../../../src/plugins/sudoers/sudoers.c:804
804	../../../src/plugins/sudoers/sudoers.c: No such file or directory.
Removing breakpoints from mem_bkps...

heaplens-dump

हीलेंस लॉग डंप करता है। हम परिणामों को फ़ाइल में लिखने, JSON प्रारूप का उपयोग करके आउटपुट देने और चंकों को उनके पतों द्वारा क्रमबद्ध करने के विकल्प प्रदान करते हैं। डंप में, प्रत्येक चंक का पता, आकार, बैकट्रेस और संबंधित मेमोरी आवंटन फ़ंक्शन अधिक पठनीय तरीके से दर्ज किया जाएगा।

root@kitploit:~
heaplens-dump -h
usage: [-h] [-o OUTPUT] [--json] [-s]

हीलेंस लॉग डंप करें। डिफ़ॉल्ट रूप से stdout पर लिखता है।

optional arguments:
  -h, --help            यह सहायता संदेश दिखाएँ और बाहर निकलें
  -o OUTPUT, --output OUTPUT
                        पथ {output} पर फ़ाइल में लिखें (default: None)
  --json                json में डंप करें (default: False)
  -s, --sort            चंकों को उनके पतों द्वारा क्रमबद्ध करें (default: False)

उदाहरण आउटपुट:

root@kitploit:~
gef➤  heaplens-dump
----------------------------
Dumping...
----------------------------

...

[malloc] Chunk 3 @ 0x55f3908ed2a0 | size 0xc
Trace:
#0  __GI___strdup (s=0x7fff6fb3b8dc "en_US.UTF-8") at strdup.c:44
#1  0x00007f285df363c5 in _nl_load_locale_from_archive (category=category@entry=0xc, namep=namep@entry=0x7fff6fb29f50) at loadarchive.c:464
#2  0x00007f285df351fe in _nl_find_locale (locale_path=0x0, locale_path_len=0x0, category=category@entry=0xc, name=name@entry=0x7fff6fb29f50) at findlocale.c:152
#3  0x00007f285df34925 in __GI_setlocale (locale=<optimized out>, category=<optimized out>) at setlocale.c:337
#4  __GI_setlocale (category=<optimized out>, locale=<optimized out>) at setlocale.c:217
#5  0x000055f3901d5965 in main (argc=0x4, argv=0x7fff6fb2a298, envp=0x7fff6fb2a2c0) at ../../src/src/sudo.c:1430

...

Dump complete.

heaplens-chunks

gef से heap chunks का थोड़ा संशोधित संस्करण आउटपुट करता है।

यह GEF के heap chunks (जो चंकों के पते, फ्लैग, आकार और मेटाडेटा दिखाता है) का विस्तार करता है, heap bins से मुक्त चंकों के बारे में जानकारी एकीकृत करके (जो glibc bins से पहले आवंटित और मुक्त किए गए चंकों को सूचीबद्ध करता है)। GEF हीप निरीक्षण में मदद करने वाली सुविधाएँ प्रदान करता है जैसे कि हमने दो का उल्लेख किया, लेकिन दोनों को संयोजित करना थकाऊ है। उच्च स्तर पर, यह कमांड बाद वाले से मुक्त चंकों के पते एकत्र करता है, और उन्हें पूर्व के परिणाम में लेबल करता है।

root@kitploit:~
heaplens-chunks -h
usage: [-h] [--nocolor]

मुक्त चंकों के बारे में जानकारी के साथ एक संशोधित `heap chunks`।

optional arguments:
  -h, --help  यह सहायता संदेश दिखाएँ और बाहर निकलें
  --nocolor   ANSI रंग कोड अक्षम करें

उदाहरण आउटपुट:

root@kitploit:~
gef➤  heaplens-chunks
Showing current heap info with freed chunks:

...

Chunk(addr=0x55dd7f91ddb0, size=0xed0, flags=PREV_INUSE)  ←  free chunk
    [0x000055dd7f91ddb0     e0 fb ba e1 f8 7f 00 00 e0 fb ba e1 f8 7f 00 00    ...............]
Chunk(addr=0x55dd7f91ec80, size=0x50, flags=! PREV_INUSE)
    [0x000055dd7f91ec80     2f 75 73 72 2f 6c 6f 63 61 6c 2f 73 62 69 6e 3a    /usr/local/sbin]
Chunk(addr=0x55dd7f91ecd0, size=0x4010, flags=PREV_INUSE)  ←  free chunk
    [0x000055dd7f91ecd0     f0 02 bb e1 f8 7f 00 00 f0 02 bb e1 f8 7f 00 00    ...............]
Chunk(addr=0x55dd7f922ce0, size=0x50, flags=! PREV_INUSE)
    [0x000055dd7f922ce0     90 02 91 7f dd 55 00 00 00 00 00 00 00 00 00 00    .....U.........]
Chunk(addr=0x55dd7f922d30, size=0x2da0, flags=PREV_INUSE)  ←  free chunk
    [0x000055dd7f922d30     d0 02 bb e1 f8 7f 00 00 d0 02 bb e1 f8 7f 00 00    ...............]
Chunk(addr=0x55dd7f925ad0, size=0x110, flags=! PREV_INUSE)  ←  free chunk
    [0x000055dd7f925ad0     00 00 00 00 00 00 00 00 10 f0 90 7f dd 55 00 00    .............U.]
Chunk(addr=0x55dd7f925be0, size=0x30, flags=PREV_INUSE)
    [0x000055dd7f925be0     00 00 00 00 00 00 00 00 d2 78 b7 7e dd 55 00 00    .........x.~.U.]
Chunk(addr=0x55dd7f925c10, size=0x20, flags=PREV_INUSE)
    [0x000055dd7f925c10     65 6e 5f 55 53 2e 55 54 46 2d 38 00 00 00 00 00    en_US.UTF-8....]
Chunk(addr=0x55dd7f925c30, size=0xa3e0, flags=PREV_INUSE)  ←  top chunk

heaplens-clear

heaplens द्वारा एकत्र और उपयोग किए गए सभी आंतरिक लॉग / डेटा साफ़ करें।

root@kitploit:~
heaplens-clear -h
usage: [-h] [-v]

हीलेंस लॉग साफ़ करें।

optional arguments:
  -h, --help     यह सहायता संदेश दिखाएँ और बाहर निकलें
  -v, --verbose  आउटपुट वर्बोसिटी बढ़ाएँ

heaplens-list-env

पर्यावरण चर सूचीबद्ध करें जो हीप में संग्रहीत और मुक्त किए जाते हैं। यह विशेष रूप से उपयोगी है जब आप हीप ग्रूमिंग करना चाहते हैं क्योंकि ये चर हीप लेआउट को प्रभावित कर सकते हैं।

root@kitploit:~
heaplens-list-env -h
usage: [-h] [-v] [--prefix PREFIX] [--suffix SUFFIX] [-b BREAKPOINT] [-s SKIP]

पर्यावरण चर सूचीबद्ध करें जो हीप लेआउट को प्रभावित कर सकते हैं।

optional arguments:
  -h, --help            यह सहायता संदेश दिखाएँ और बाहर निकलें
  -v, --verbose         आउटपुट वर्बोसिटी बढ़ाएँ
  --prefix PREFIX       पर्यावरण चर मान उपसर्ग
  --suffix SUFFIX       पर्यावरण चर मान प्रत्यय
  -b BREAKPOINT, --breakpoint BREAKPOINT
                        यहाँ निष्पादन रोकें (gdb में br {breakpoint} निष्पादित करें)
  -s SKIP, --skip SKIP  इस पर्यावरण चर को छोड़ें

उदाहरण आउटपुट:

root@kitploit:~
gef➤  file sudoedit
Reading symbols from sudoedit...
gef➤  heaplens-list-env -s LC_ALL -b set_cmnd --prefix C.UTF-8@ -- -s \\ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

...

1st execution. Found following environment variable:
['LOCPATH', 'LC_ALL', 'LC_IDENTIFICATION', 'LANG', 'LC_MEASUREMENT', 'LC_TELEPHONE', 'LC_ADDRESS', 'LC_NAME', 'LC_PAPER', 'LC_MESSAGES', 'LC_MONETARY', 'LC_COLLATE', 'LC_TIME', 'LC_NUMERIC', 'LC_CTYPE', 'TZ', 'SHELL', 'LANGUAGE']
  
...

2nd execution. Possible environment variables for heap grooming:
['LC_IDENTIFICATION', 'LC_COLLATE', 'TZ', 'LC_TIME', 'LANGUAGE', 'LC_NAME', 'LOCPATH', 'LC_MESSAGES', 'LC_NUMERIC', 'LC_ADDRESS', 'LC_TELEPHONE', 'LC_MONETARY', 'LC_MEASUREMENT', 'LC_CTYPE', 'LC_PAPER']

🛠 परीक्षण मामले

परीक्षण मामले स्क्रिप्ट बनाने के लिए (VM में निर्मित)

root@kitploit:~
$ cd tests
$ make all

tests/heap-dump हीप लेआउट डंप करें

root@kitploit:~
gef➤  file tests/heap-dump
gef➤  heaplens -b breakme
gef➤  heaplens-dump

sudoedit हीप लेआउट को output.txt में डंप करें

root@kitploit:~
gef➤  file sudoedit
gef➤  heaplens -b set_cmnd -- -s \\ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
gef➤  heaplens-dump -o output.txt

tests/env-in-heap में हीप ग्रूमिंग के लिए पर्यावरण चर सूचीबद्ध करें

root@kitploit:~
gef➤  file tests/env-in-heap
gef➤  heaplens-list-env

...

----------------------------
2nd execution. Possible environment variables for heap grooming:
['ENV_IN_HEAP']
----------------------------

sudoedit में हीप ग्रूमिंग के लिए पर्यावरण चर सूचीबद्ध करें

root@kitploit:~
gef➤  file sudoedit
gef➤  heaplens-list-env -s LC_ALL -b set_cmnd --prefix C.UTF-8@ -- -s \\ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

...

----------------------------
1st execution. Found following environment variable:
['LOCPATH', 'LC_ALL', 'LC_IDENTIFICATION', 'LANG', 'LC_MEASUREMENT', 'LC_TELEPHONE', 'LC_ADDRESS', 'LC_NAME', 'LC_PAPER', 'LC_MESSAGES', 'LC_MONETARY', 'LC_COLLATE', 'LC_TIME', 'LC_NUMERIC', 'LC_CTYPE', 'TZ', 'SHELL', 'LANGUAGE']    
----------------------------

...

----------------------------
2nd execution. Possible environment variables for heap grooming:
['LC_CTYPE', 'LC_PAPER', 'LC_MONETARY', 'TZ', 'LC_ADDRESS', 'LC_MEASUREMENT', 'LC_IDENTIFICATION', 'LC_COLLATE', 'LC_NUMERIC', 'LC_MESSAGES', 'LC_TIME', 'LANGUAGE', 'LC_NAME', 'LOCPATH', 'LC_TELEPHONE']
---------------------------- 

🚨 ज्ञात समस्याएँ

अधिक विवरण के लिए कृपया Issues पृष्ठ देखें।

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