
पेंटेस्ट रिपोर्टिंग टूल जो Python में लिखा गया है। Microsoft Word से खुद को मुक्त करें।
WriteHat एक रिपोर्टिंग टूल है जो रिपोर्टिंग प्रक्रिया से Microsoft Word (और कई घंटों की पीड़ा) को हटा देता है। Markdown --> HTML --> PDF। पेनिट्रेशन टेस्टर्स द्वारा, पेनिट्रेशन टेस्टर्स के लिए बनाया गया - लेकिन इसका उपयोग किसी भी प्रकार की रिपोर्ट उत्पन्न करने के लिए किया जा सकता है। Django (Python 3) में लिखा गया।

docker और इंस्टॉल करें
docker-composeapt, pacman, dnf आदि का उपयोग करके इंस्टॉल किया जा सकता है।$ sudo apt install docker.io docker-compose
WriteHat को एक ही कमांड में तैनात किया जा सकता है:
$ git clone https://github.com/blacklanternsecurity/writehat && cd writehat && docker-compose up
https://127.0.0.1 पर लॉग इन करें (डिफ़ॉल्ट: admin / PLEASECHANGETHISFORHEAVENSSAKE)
Docker और Docker Compose इंस्टॉल करें
WriteHat रिपॉज़िटरी को क्लोन करें /opt में
$ cd /opt
$ git clone https://github.com/blacklanternsecurity/writehat
$ cd writehat
writehat/config/writehat.conf में सुरक्षित पासवर्ड बनाएं:
docker-compose.yml में भी दर्ज करें)docker-compose.yml में भी दर्ज करें)writehat/config/writehat.conf और docker-compose.yml पर अनुमतियाँ लॉक डाउन करना न भूलें: (chown root:root; chmod 600)अपना वांछित होस्टनाम जोड़ें writehat/config/writehat.conf में allowed_hosts में
(वैकल्पिक) स्व-हस्ताक्षरित SSL प्रमाणपत्र बदलें nginx/ में:
writehat.crtwritehat.keyसब कुछ ठीक से काम कर रहा है इसकी जाँच करें:
$ docker-compose up --build
ध्यान दें: यदि VPN का उपयोग कर रहे हैं, तो सेवाओं को docker-compose के साथ पहली बार लाने के लिए आपको VPN से डिस्कनेक्ट होना होगा। ऐसा इसलिए है ताकि docker सफलतापूर्वक वर्चुअल नेटवर्क बना सके।
Systemd सेवा इंस्टॉल और सक्रिय करें:
इससे बूट पर WriteHat स्वचालित रूप से प्रारंभ हो जाएगा
$ sudo cp writehat/config/writehat.service /etc/systemd/system/
$ sudo systemctl enable writehat --now
सेवा लॉग टेल करें:
$ sudo journalctl -xefu writehat.service
उपयोगकर्ता बनाएं
https://127.0.0.1/admin पर जाएँ, पहले writehat/config/writehat.conf में निर्दिष्ट admin उपयोगकर्ता से लॉग इन करने के बाद
ध्यान दें: कुछ कार्य हैं जो केवल एक admin ही कर सकता है (जैसे डेटाबेस बैकअप) writehat/config/writehat.conf में उपयोगकर्ता नाम और पासवर्ड से एक admin उपयोगकर्ता स्वचालित रूप से बनाया जाता है, लेकिन आप किसी LDAP उपयोगकर्ता को admin में पदोन्नत भी कर सकते हैं:
# ऐप कंटेनर में प्रवेश करें
$ docker-compose exec writehat bash
# उपयोगकर्ता को पदोन्नत करें और बाहर निकलें
$ ./manage.py ldap_promote <ldap_username>
$ exit
यहाँ कुछ WriteHat शब्दों की बुनियादी व्याख्याएँ दी गई हैं जो स्पष्ट नहीं हो सकते हैं।
सहभागिता
├─ ग्राहक
├─ निष्कर्ष समूह 1
│ ├─ निष्कर्ष
│ └─ निष्कर्ष
├─ निष्कर्ष समूह 2
│ ├─ निष्कर्ष
│ └─ निष्कर्ष
├─ रिपोर्ट 1
└─ रिपोर्ट 2
└─ पृष्ठ टेम्पलेट
एक सहभागिता वह जगह है जहाँ ग्राहक के लिए सामग्री बनाई जाती है। यहाँ काम होता है - रिपोर्ट बनाना और निष्कर्ष दर्ज करना।
एक रिपोर्ट घटकों की एक मॉड्यूलर, पदानुक्रमिक व्यवस्था है जिसे ड्रैग-एंड-ड्रॉप इंटरफ़ेस के माध्यम से आसानी से अपडेट किया जा सकता है, फिर HTML या PDF में रेंडर किया जा सकता है। एक सहभागिता में कई रिपोर्ट हो सकती हैं। एक पृष्ठ टेम्पलेट का उपयोग पृष्ठभूमि और फ़ुटर को अनुकूलित करने के लिए किया जा सकता है। एक रिपोर्ट को रिपोर्ट टेम्पलेट में भी परिवर्तित किया जा सकता है।
एक रिपोर्ट घटक रिपोर्ट का एक अनुभाग या मॉड्यूल है जिसे रिपोर्ट निर्माता के अंदर खींचकर/छोड़कर रखा जा सकता है। उदाहरणों में "शीर्षक पृष्ठ", "मार्कडाउन", "निष्कर्ष" आदि शामिल हैं। कई अंतर्निहित घटक हैं, लेकिन आप अपना स्वयं का भी बना सकते हैं। (वे केवल HTML/CSS + Python हैं, इसलिए यह काफी आसान है। नीचे दी गई मार्गदर्शिका देखें)।
एक रिपोर्ट टेम्पलेट का उपयोग रिपोर्ट (एक सहभागिता में) के लिए प्रारंभिक बिंदु के रूप में किया जा सकता है। रिपोर्ट को रिपोर्ट टेम्पलेट में भी परिवर्तित किया जा सकता है।
एक निष्कर्ष समूह निष्कर्षों का एक संग्रह है जो एक ही तरीके से स्कोर किए जाते हैं (जैसे CVSS या DREAD)। आप प्रति सहभागिता कई निष्कर्ष समूह बना सकते हैं (जैसे "तकनीकी निष्कर्ष" और "कोष निष्कर्ष")। रिपोर्ट में निष्कर्ष सम्मिलित करते समय (उदाहरण के लिए, "निष्कर्ष" घटक के माध्यम से), आपको चुनना होगा कि आप उस घटक को किस निष्कर्ष समूह से भरना चाहते हैं।
एक पृष्ठ टेम्पलेट आपको रिपोर्ट पृष्ठभूमि चित्रों और फ़ुटर को अनुकूलित करने की अनुमति देता है। आप एक पृष्ठ टेम्पलेट को डिफ़ॉल्ट के रूप में सेट कर सकते हैं, और इसे वैश्विक रूप से लागू किया जाएगा जब तक कि सहभागिता या रिपोर्ट स्तर पर ओवरराइड न किया जाए।
प्रत्येक रिपोर्ट घटक निम्नलिखित से बना होता है:
writehat/components/ में एक Python फ़ाइलwritehat/templates/componentTemplates/ में एक HTML टेम्पलेटwritehat/static/css/component/ में एक CSS फ़ाइल (वैकल्पिक)हम इन निर्देशिकाओं में मौजूदा फ़ाइलों का संदर्भ लेने की सलाह देते हैं; वे प्रारंभिक बिंदु/उदाहरण के रूप में अच्छी तरह से काम करती हैं।
एक सरल कस्टम घटक इस तरह दिखेगा:
components/CustomComponent.py:from .base import *
class CustomComponentForm(ComponentForm):
summary = forms.CharField(label='Component Text', widget=forms.Textarea, max_length=50000, required=False)
field_order = ['name', 'summary', 'pageBreakBefore', 'showTitle']
class Component(BaseComponent):
default_name = 'Custom Report Component'
formClass = CustomComponentForm
# "templatable" विशेषता यह तय करती है कि यदि रिपोर्ट को कभी टेम्पलेट में परिवर्तित किया जाता है तो वह फ़ील्ड सहेजी जाती है या नहीं
fieldList = {
'summary': StringField(markdown=True, templatable=True),
}
# HTML टेम्पलेट निर्दिष्ट करना सुनिश्चित करें
htmlTemplate = 'componentTemplates/CustomComponent.html'
# Font Awesome आइकन प्रकार + रंग (HTML/CSS)
# यह वेब ऐप में केवल आँखों को भाता है
iconType = 'fas fa-stream'
iconColor = 'var(--blue)'
# "preprocess" फ़ंक्शन रिपोर्ट रेंडर होने पर निष्पादित होता है
# इसका उपयोग इसके डेटा पर कोई अंतिम-मिनट संचालन करने के लिए करें
def preprocess(self, context):
# उदाहरण के लिए, पूरे "summary" फ़ील्ड को अपरकेस करने के लिए:
# context['summary'] = context['summary'].upper()
return context
ध्यान दें कि फ़ील्ड का नाम घटक वर्ग और उसके दोनों रूपों में समान होना चाहिए। सभी घटकों को या तो BaseComponent या किसी अन्य घटक से वंशानुगत होना चाहिए। इसके अतिरिक्त, प्रत्येक घटक में name, pageBreakBefore (क्या नए पृष्ठ पर शुरू करना है), और showTitle (क्या name फ़ील्ड को शीर्षक के रूप में प्रदर्शित करना है) के लिए अंतर्निहित फ़ील्ड हैं। इसलिए उन्हें जोड़ना आवश्यक नहीं है।
componentTemplates/CustomComponent.html:Python मॉड्यूल के फ़ील्ड स्वचालित रूप से टेम्पलेट संदर्भ में जोड़ दिए जाते हैं। इस उदाहरण में, हम summary फ़ील्ड को मार्कडाउन के रूप में रेंडर करना चाहते हैं, इसलिए हम इसके सामने markdown टैग जोड़ते हैं। ध्यान दें कि आप सहभागिता और रिपोर्ट-स्तरीय चरों तक भी पहुँच सकते हैं, जैसे report.name, report.findings, engagement.customer.name आदि।
{% load custom_tags %}
<section class="l{{ level }} component{% if pageBreakBefore %} page-break{% endif %}" id="container_{{ id }}">
{% include 'componentTemplates/Heading.html' %}
<div class='markdown-align-justify custom-component-summary'>
<p>
{% markdown summary %}
</p>
</div>
</section>
componentTemplates/CustomComponent.css (वैकल्पिक):फ़ाइल का नाम Python फ़ाइल के नाम से मेल खाना चाहिए (लेकिन .py के बजाय .css एक्सटेंशन के साथ)। रिपोर्ट रेंडर होने पर यह स्वचालित रूप से लोड हो जाती है।
div.custom-component-summary {
font-weight: bold;
}
एक बार उपरोक्त फ़ाइलें बन जाने के बाद, बस वेब ऐप को पुनरारंभ करें और नया घटक स्वचालित रूप से जनसंख्या में आ जाएगा।
$ docker-compose restart writehat
यदि कोई अपडेट पुश किया जाता है जो डेटाबेस स्कीमा को बदलता है, तो कंटेनर के पुनरारंभ होने पर Django डेटाबेस माइग्रेशन स्वचालित रूप से निष्पादित होते हैं। हालांकि, कभी-कभी उपयोगकर्ता इंटरेक्शन की आवश्यकता हो सकती है। Django माइग्रेशन मैन्युअल रूप से लागू करने के लिए:
systemctl stop writehat)/opt/writehat)$ docker-compose run writehat bash
$ ./manage.py makemigrations
$ ./manage.py migrate
$ exit
$ docker-compose down
$ systemctl start writehat
ध्यान दें कि वेब ऐप के /admin पेज पर इसके लिए पहले से ही ऐप-इन-ऐप कार्यक्षमता मौजूद है। यदि आप cron आदि के माध्यम से फ़ाइल-स्तरीय बैकअप जॉब बनाना चाहते हैं तो आप इस विधि का उपयोग कर सकते हैं।
systemctl stop writehat)systemctl stop writehat)mysql, mongo, और writehat/migrations निर्देशिकाओं को TAR करें और संग्रह को गंतव्य सिस्टम पर कॉपी करें (उसी स्थान पर):# रूट के रूप में चलाना अनिवार्य है
$ sudo tar --same-owner -cvzpf db_backup.tar.gz mongo mysql writehat/migrations
migrations निर्देशिका का बैकअप लें$ mv writehat/migrations writehat/migrations.bak
$ sudo tar --same-owner -xvpzf db_backup.tar.gz
$ systemctl start writehat