滲透測試步驟
信息收集
搜集一些IP地址以及對應的端口開放情況,看看是否有80、3306、22等等端口開放,以及操作系統和版本號,同時也要掃描可能存在的漏洞
漏洞利用
建立據點
漏洞利用成功后,通常會在目標機上獲得一個webshell,雖然webshell可以執行命令和管理文件,但畢竟不是真正的shell,而且也不穩定,因此就需要反彈shell到一個穩定的環境
反彈shell會遇到的問題:
反彈命令不存在
禁止出口流量
限定向外訪問端口
流量審查
權限提升和維持
反彈shell:
攻擊機在自己的主機上開啟一個監聽端口,然后誘使受害者去執行一個反向連接的命令,連接回攻擊者的機器
常用的反彈shell命令
nc、telnet、awk、exec
基于編程語言反彈shell
PHP、Java、Ruby、Perl、Python
加密反彈shell
在攻擊機上生成證書
然后在攻擊機上進行監聽
最后在目標機上執行反彈
正向連接腳本
首先在目標主機創建一個python文件,里面代碼的功能就是正向連接攻擊機
其次在目標主機上執行這個python文件
最后在攻擊機上進行監聽,實現正向連接
對于lampiao靶機的入侵實戰:
首先進行信息搜集,獲取其IP地址以及對應的端口開放情況,操作系統以及版本號
當然也可以使用Nessus進行掃描
掃描出來的端口為22,80,1898
對于22端口來說的話,我們可以使用工具進行爆破
當然也可以使用御劍對后臺文件進行掃描
接著我們基于搜集出來的信息去msf看一下是否有存在的已知漏洞可以利用
MsfVenom木馬制作
第一種方法就是直接制作一個木馬上傳到目標主機上
第二種方法就是進程注入,使用msfvenom將木馬注入到一個進程中,然后上傳到目標機器上
第三種方法就是程序捆綁,就是將制作的木馬與一個應用程序進行捆綁,當應用程序上線的時候,木馬也會上線,比如使用putty.exe進行實驗
如何制作一個免殺的木馬
可以適用編碼或代碼混淆來生成木馬
同時msfvenom也只支持生成很多格式的可執行文件
比如asp、aspx,dll等
使用shellcode生成木馬
1、利用python執行shellcode
我們可以使用msfvenom來生成shellcode,然后將shellcode和加載器代碼放到一個python文件當中去,然后去執行這個python文件,然后就能夠上線了
當然也可以使用pyinstaller工具將其打包為exe文件,上傳至殺毒軟件看其能否免殺
2、python加載器實現免殺
也就是使用Shellcode Loader這個工具
將我們生成的shellcode使用這個工具的加密程序進行加密,輸出一個加密過后的Shellcode,然后將這個加密過后的shellcode復制到Shellcode.py的密文那里,然后運行這個文件,使其上線成功,然后使用pyinstaller生成exe,看看是否免殺
免殺基礎與加解密
免殺的概念:能使病毒木馬被殺毒軟件查殺的技術
殺毒的原理:
靜態查殺
動態查殺
云查殺
免殺的方法:
1、對Shellcode進行加密處理
2、對加載器代碼進行加密或編碼處理
3、分離免殺
4、使用進程注入或使用傀儡進程
5、通過加殼的方式對木馬進行混淆
Linux系統提權
1、工具的使用
使用linux-exploit- suggester或者Nessus進行主機漏洞掃描,結合掃描出來的漏洞進行提權
2、SUDO提權(內核漏洞導致的提權)
使用命令sudoedit -s /看看系統回顯內容,如果是not a regular file,則說明存在SUDO這個漏洞,如果是其他的話就沒有了
我們就當存在這個漏洞,使用sudo -l看看該登錄有沒有root權限,如果有的話直接提權成功
3、SUID命令提權
如果該用戶有s的權限,那么它允許用戶執行的文件以文件擁有者的身份去運行,也就是越權執行命令
我們可以執行find命令去看哪個文件具有s的權限,但并不是所有文件具有s權限就能夠實現提權了,比如說是/bin/bash、/bin/cat、/bin/find、/bin/env、/bin/vi等等
4、Cron定時任務
使用crontab -l或者cat /var/spood/cron/root
如果找到可以有權限修改的計劃任務腳本,就可以去修改腳本實現提權,本質上就是文件配置不當
基本原理:借助root用戶的定時任務,去修改其運行的腳本,用關鍵命令授予SUID權限
5、環境變量提權
開發一段C程序進行執行,里面包含命令執行,包括cat、vi等等,然后進行編譯成新的文件,然后為編譯的程序授予S權限
假如說C程序里的命令是cat,我們就進入到系統的臨時目錄中,將/bin/bash復制到臨時目錄的cat文件里,然后為其添加新的環境變量,然后去執行這個文件就能實現提權,前提是用戶得有權限寫文件和添加新的環境變量
Linux權限維持
1、創建賬戶
1.1 修改/etc/passwd,創建擁有root權限的用戶
1.2 創建擁有sudo權限的賬號
先創建一個普通用戶,而后在/etc/passwd文件中為該用戶添加sudo權限
1.3 普通用戶?SUID shell
先將/bin/bash復制到/bin/.shell目錄里,是為了能夠讓.shell文件隱藏起來,不容易被發現,然后使用普通用戶去執行這個文件即可實現提權
2、文件屬性修改
2.1 修改文件創建時間
2.2 創建隱藏文件
2.3 文件上鎖,防止用戶直接刪除文件
3、SSH后門
3.1 軟連接后門
建立一個軟連接,然后通過5555端口掃描訪問ssh服務
3.2 SSH隱身登錄
隱身登錄系統,不會被last who w等指令檢測到
3.3 上傳公鑰,ssh免密登錄
客戶端生成對應的公鑰和私鑰,然后在服務端/root的目錄下創建一個.ssh目錄,上傳公鑰到此目錄下,并修改文件名為authorized_keys,上傳方式有很多種,比如使用scp上傳,接著去檢查服務器的ssh配置,要將允許使用公鑰登錄的設置打開
3.4 ssh warpper后門
4、Crontab定時任務
創建一個Crontab定時任務,但很容易被發現,我們可以利用cat隱藏將一部分內容隱藏起來,再添加no crontab for whoami,讓用戶以為沒有定時任務
原理就是cat打開文件時會遇到一些特殊的符號,比如\r,\n,\f,輸出內容換頁換行導致隱藏前面的部分內容
5、自啟動腳本
只要執行了這些腳本,在條件觸發的時候會進行任意提權命令
6、其他方式
6.1 cat隱藏
可以隱藏php一句話木馬
6.2 隱藏進程
基于Redis實戰
Redis : 緩存服務器,數據都保存到內存中,所有的I/O操作全部都在內存中進行,如果斷電或者停止服務,數據就會消失,而內存型數據庫恰好可以彌補類似于MySQL等關系數據庫在硬盤當中進行I/O操作的速度上的局限
如何利用Redis來實現提權甚至入侵
第一種方案就是使用Redis寫定時任務
第二種方案就是直接寫我們的后門文件、shell、一句話木馬
第一種方案:
為什么Redis可以進行寫文件的操作?
因為Redis有一個持久化的操作,默認情況下Redis寫的數據是寫到了后綴名為aof或者rdb的文件下,我們可以去配置這個路徑,使其寫到一個我們比較熟悉的目錄下,寫入進去之后就去訪問
第二種方案:寫定時任務
比如說就寫一個創建一個具有root權限的普通用戶的定時任務,然后使用該用戶去遠程登錄
SSRF+Redis內網滲透
基于SSRF來進行內網滲透
需要用到偽協議,dict和gopher
dict適用于Redis沒有密碼進行登錄的,因為它不支持維持session
gopher適用于Redis有密碼的,因為gopher可以構造各種TCP層面的請求包
然后我們就能通過gopher來寫入一句話木馬
第四個方法就是使用Python去進行連接并發送數據
其核心在于data值的構建,data里面要輸入一些參數,也就是說要將數據包構造出來,構造出來之后就可以進內網進行操作了
dict只支持Redis的單條命令,而gopher可以很好的處理批命令
對于gopher來說,遇見回車換行就要用%0d%0a進行一個替換,同時要將data數據進行url編碼,讓%替換%25
基于Redis提權實戰
對于修復建議,我們不僅要對Redis設置密碼,而且還要設置成復雜的密碼,然后將配置文件的r的那個權限給拿掉,不能夠o+r,只能讓root用戶去讀,其他任何賬號都不能讀取這個文件,還有一個,最好不要用root去啟動Redis,最好是新建一個賬號去啟動redis服務,這樣就不會像root一樣去處理了,這樣的話其他用戶就沒有權限往root根目錄那里去寫文件了
Windows系統提權
1、UDF提權
即用戶自定義函數
本提權適用于MySQL 5.5.59以下版本
先通過爆破獲取MySQL的賬號,如果能夠爆破出來密碼的話,就直接登錄到數據庫當中,然后使用navicat進行連接
連接上需要進行的操作是先確認MySQL的寫文件權限,看看師傅擁有任意路徑的寫文件
,然后再去確認MySQL的插件目錄,并由此推斷HTTP的主目錄,接著需要確認系統中是否存在sys_exec的函數,如果不存在的話需要使用UDF進行自行定義
然后進入到MSF中進行漏洞利用,使用的模塊是multi/mysql/mysql_udf_payload,run之后會將dll文件復制到plugin的目錄下,同時exec函數也會創建成功
exec只會返回一個指令,0和非0,0代表成功,非0代表失敗,而eval會返回結果
我們也可以運行以下腳本來創建用戶自定義函數eval,如果執行成功的話,我們就可以使用eval函數了,接著我們去看看該系統正在登錄的用戶有啥權限,如果權限高的話,可以通過創建一個角色將其放入到本地管理員組中,這樣我們就可以進行遠程登錄了,并且還是超級管理員的權限
2、MOF提權
MOF指的是托管對象格式,是一種文件類型,每隔一段時間就會以System權限執行一次,我們可以通過root權限下的mysql將該文件寫入到路徑下,以達到提權的目的,提權條件:
1、mysql允許遠程連接
2、secure_priv_file的值為空
接著我們使用漏洞模塊exploit/windows/mysql/mysql_mof進行入侵提權