第一天
工具:cs cobalt strike 4.9? / msf kali (自帶 Ubuntu)
cs cobalt strike 4.9:server-client
server部署在云服務器上,client分別在各地,與server相連接;連接上后就可以共享上線主機。
對于server主要執行主件是teamserver和TeamServerImage,他們是用Java寫的,所以要jdk的依賴,Windows和Ubuntu都需要下載安裝,用命令java -version查看是否安裝成功
運行server
root@ubuntu:~/cs4.9/Server# ./teamserver 192.168.59.147 oupeng (IP 密碼)
反彈性木馬:反向,受害者主動連接入侵者,內網往外網走,所以防火墻對此管理沒有嚴格;如果受害者不知道入侵者的ip地址,那么受害者是連接不到入侵者的。(這就是為什么用反彈性木馬和為什么要寫ip)
打開client,監聽木馬:創建一個監聽器(設置不常用的端口),方便你知道受害者何時連接的你
案例一:釣魚郵件
假設我們是一個紅隊入侵者,我們需要去攻擊某個學校 ,但學校的安全做的不錯,沒有明顯的漏洞,現有的系統接入0信任,需要一個老師或者學生賬號
1、用釣魚郵件并且通過免殺木馬讓學生或老師中招
2、第一種(等待):利用遠程控制木馬的鍵盤監聽器去監聽等待,如果他輸入賬號,那么就能得到他的賬號和密碼 ———— 效率太低第二種(主動出擊):讓他主動寫入自己的學號或教師賬號以及密碼
3、要一個釣魚網站 ———— 學校的官網(直接將源碼另存為)
4、關鍵問題:如何他去走進你的釣魚網站
5、現已將代碼部署到自己的網站,但沒有學校域名的權限(沒有辦法讓域名解析到自己的服務器上)
6、解決方法:仿造一個相似域名,可取性為0 edu.cn申請不到https://www.cdcas-edu.com 成功率較低
8、現已讓對方中木馬,所以要做出hosts ———— dns劫持 ———— 劫持dns解析,讓其解析到自己的服務器上
9、dns解析流程 ———— 才能知道hosts為什么可以dns劫持
hosts的Windows路徑:C:\Windows\System32\drivers\etc\hosts
10、問題:在自己的電腦或者linux服務器上部署一個web應用需要什么組件 ———— web中間件
web中間件:nginx (apache toimcat weblogic)
12、部署nginx服務,windows可以用小皮面板;要配置虛擬主機才可以讓域名解析到本地
虛擬主機是否能夠匹配到這個,需要看虛擬主機的配置項
位置:D:\phpstudy_pro\Extensions\Nginx1.15.11\conf\vhosts\0localhost_80.conf
用vscode打開配置(復制粘貼后修改server_name、root),完成后重啟小皮的nginx
當別人訪問登錄后,服務器上就能獲取到他的賬號和密碼,在D:\phpstudy_pro\WWW\服務器名\account.txt中
13、問題
1. dns解析過程
(1)查詢本地 ———— 查詢緩存
(2)本地緩存沒有,就到hosts查看是否有域名和ip的對應關系 如果有則返回
(3)都沒有,則查本地路由 ————> 查詢根域服務器 ————> dns ————> 13個根域服務器地址
(4)查找13臺根域服務器
(5)尋找com頂級域尋找百度的dns服務器最終返回baidu.com的A的對應服務器ip迭代查詢Windows和Linux下的dns解析命令:
linux:dig nslookup
例:xyl@ubuntu:~$ dig +trace www.baidu.comxyl@ubuntu:~$ nslookup www.baidu.comWindows:nslookup ———— nslookup www.baidu.com2. web中間件的部署和搭建(linux)
搭建LNMP和WNMP
LNMP: linux nginx mysql php
WNMP: Windows nginx(小皮面板) mysql php也可以docker搭建(過程沒那么繁瑣)
https://command-not-found.com/ 可以尋找安裝包的命令3 如何配置web中間件的虛擬主機總結4步:1.中c2(免殺) 2.劫持dns 3.讓他登錄釣魚網站 4.拿下他的賬號密碼
Ubuntu安裝nginx、mysql以及php的部署
nginx:
1、編譯安裝
# 復制22的鏈接地址(復制源碼),用wget下載
wget https://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz
mv nginx-1.22.1 nginx 改名方便使用
cd nginx2、安裝依賴包
apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev
apt-get install openssl
apt-get install libssl-dev3、編譯nginx
# 執行命令
./configure
# 執行make命令
make
# 執行make install命令
make install4、啟動nginx
cd /usr/local/nginx/sbin
./nginx 啟動nginx
ps -ef |grep nginx 查看進程
http://192.168.59.147/ 訪問網站,查看是否成功,如下圖一php:
1、添加數據源
# 執行三條命令,添加php的源地址,更新,安裝
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ondrej/php
sudo apt-get update
apt list |grep php 查看是否有安裝包2、安裝php
#? nginx使用php的話要用到php7.3-fpm,所以要安裝php-fpm
sudo apt-get install php7.3 php7.3-mysql php7.3-fpm php7.3-curl php7.3-xml php7.3-gd php7.3-mbstring php-memcached php7.3-zip
# 默認是最高版本
pdate-alternatives --config php 修改版本
php -v 查看當前版本3、配置php-fpm
find / -name www.conf 用find查找文件
vim /etc/php/7.3/fpm/pool.d/www.conf
# 把監聽端口改掉
將;listen = /run/php/php7.3-fpm.sock 改為listen = 127.0.0.1:9000
service php7.3-fpm restart 重啟服務9.啟動php-fpm
service php7.3-fpm restart
lsof -i:9000 查看9000端口是否開放 (netstat -lnt | grep 9000)10、nginx下要有配置文件才能和php-fpm相連接
cd /usr/local/nginx/conf/
vim nginx.conf
將以下內容注釋取消,且修改結果如下:location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one#location ~ /\.ht {deny all;}
# 保存退出
# 重啟nginx
root@ubuntu:/usr/local/nginx# cd sbin/
root@ubuntu:/usr/local/nginx/sbin# ./nginx -s reload# 檢測配置是否成功
root@ubuntu:/usr/local/nginx# cd html/
root@ubuntu:/usr/local/nginx/html# vim web.php
內容如下:
<?php phpinfo(); ?>http://192.168.59.147/web.php 訪問該網站看是否配置成功,結果如圖二mysql:
# 安裝mysql
apt-get install mysql-server
# 連接mysql
mysql -uroot -p123這樣有兩個問題:1、mysql沒有密碼限制;2、mysql8.0和php7.3里的mysqli-connect不兼容
mysql -uroot -proot123//..
# 修改密碼
mysql> alter user 'root'@'localhost' identified mysql_native_password by '123';vscode遠程登陸Ubuntu,修改靶場文件中的mysql連接密碼,與Ubuntu中的一致,
訪問網站http://192.168.59.147/sqlilabs,得圖三
nginx成功結果(圖一):
nginx和php配置成功結果(圖二):
圖三:
第二天
名詞解釋:
名詞解釋
1.POC、EXP、Payload與Shellcode
POC:全稱‘Proof of Concept',中文’概念驗證’,常指一段漏洞證明的代碼。EXP:全稱'Exploit’,中文‘利用',指利用系統漏洞進行攻擊的動作。Payload:中文‘有效載荷’,指成功exploit之后,真正在目標系統執行的代碼或指令。Shellcode:簡單翻譯'shell代碼',是Payload的一種,由于其建立正向/反向shell而得名。
poc就是用來做漏洞測試,不會進一步利用;比如執行某個命令來證明這個漏洞是可以執行的
exp相對于poc就會進一步利用(漏洞利用),比如寫入webshell網站后門等http://192.168.59.147/web.php
(<? php eval($_POST['123']); ?>)因為比較簡單,被稱為“一句話木馬”
(網站后門起到控制整個網站的作用)
payload:比如webshell是一個腳本,那么他的源碼就是payload(比如上面一句話木馬的內容就是payload)
shellcode是payload的一種,更多出現在遠程控制木馬里面(機器碼 python/c),也就是遠程控制木馬里的內容
例:將web.php文件寫成system($_GET['c']);執行命令函數——執行get傳參——是一個命令執行漏洞
(php中system是執行外部程序,并且顯示輸出)
現在傳一個id,就是一個poc測試,測試發現里面是有漏洞的,就開始考慮其他三個
如果在網址上執行echo 11111 > webshell.php,結果顯示無法執行,因為nginx中起作用的worker權限是nobody,而html文件的權限是root,所以執行不成功,但一般來說nginx、php-fpm和html文件的所屬者都會統一,修改權限后則能成功(chown -R? /? nginx.conf)
錯誤:1、權限問題;2、可查看日志logs
后門引發問題:
? ? ? ??1.當你水平越來越高的時候,你的后門太多了不好管理
????????2.后門的操作內容比較繁雜,是否可以有工作進行快捷管理
? ? ? ? 方法:三款工具
webshell利用與管理工具:
(1)蟻劍 —— 師承中國菜刀
webshell代理功能有刷新、刪除、修改、上傳、下載等
(2)冰蝎 —— rebeyond 他獨創webshell加密機制——webshell —— 用Java寫的要jdk
冰蝎的傳輸協議是加密的
工作流程:
本地就是冰蝎客戶端,遠程就是你要把webshell傳遞過去的服務器
- 本地對Payload進行加密,然后通過POST請求發送給遠程服務端;
- 服務端收到Payload密文后,利用解密算法進行解密;
- 服務端執行解密后的Payload,并獲取執行結果;
- 服務端對Payload執行結果進行加密,然后返回給本地客戶端;
- 客戶端收到響應密文后,利用解密算法解密,得到響應內容明文。
在冰蝎的協議傳輸中用AES生成服務器default_aes(路徑:/bx46/server/default_aes)
其下有三個文件
shell.aspx、(shell.jsp、shell.php)重點看這兩個文件 這三個文件都在服務端處理的shell.php:先進行base64加密,再解密
客戶端將想要執行的命令加密發送給服務器,假設服務器是shell.php,服務器通過file_get_contents獲取到數據進行解密,用eval執行命令,執行完后的命令加密推到客戶端,客戶端執行解密下一步將php文件發到nginx的html下
冰蝎最大的特點是將流量全部加密
(3)哥斯拉——冰蝎類似
2.幾點注意POC是用來證明漏洞存在的,EXP是用來利用漏洞的,兩者通常不是一類,或者說,POC通常是無害的,Exp通常是有害的,有了POC,才有EXP。Payload有很多種,它可以是Shellcode,也可以直接是一段系統命令。同一個Payload可以用于多個漏洞,但每個漏洞都有其自己的
EXP,也就是說不存在通用的EXP。Shellcode也有很多種,包括正向的,反向的,甚至meterpreter。Shellcode與Shellshcok不是一個,Shellshock特指14年發現的Shellshock漏洞。
免殺馬:(蟻劍)
demo1.py
(1)將機器碼拿下來,做base64轉碼
(2)在內存空間中申請內存
(3)將shellcode放到內存中去
(4)創建一個線程,再直接把shellcode執行起來免殺過程:
1. 先用cs4.9(python)生成一個機器碼,然后將機器碼進行base64編碼
# shellcode是從python中來的
# 如果shellcode直接寫進來,也就是硬編碼進來,那么只有一個結局,就是被殺
# 所以要想辦法讓他不出現特征碼 ———— 方法:用服務器直接下載2. 將base64編碼放在服務器一個txt文件中去
# 在服務器的test.txt文件中,將惡意shellcode代碼進行了base64編碼,試圖躲避殺軟的查殺# 代碼中有太多特征值,過不了免殺 ———— 方法:利用python發序列化模塊來執行
3. 將執行完A類序列化和base64encode的結果,進行一個ase加密 加密模式cbc 加密網站http://tool.chacuo.net/cryptaes
# python序列化后的內容,經過反序列化的操作,里面的代碼會自動執行
# 對A類進行了序列化 pickle是python序列化模塊 dumps 序列化 loads反序列化
# 當反序列化時exec命令執行函數就會執行shellcode,也會把惡意代碼執行起來# 序列化就是把數據“打包”成可以保存或發送的格式,反序列化就是“拆包”還原成原來的數據
# 序列化模塊有pickle、json、marshal、yaml總結:
# 第一:將硬編碼修改為服務器下載
# 第二:將直接shellcode的惡意代碼,改為變量值
# 第三:將shellcode變量值放入A類中,然后又進行序列化操作
# 第四:將序列化后的值 進行base64編碼以上四步對于360、火絨、Windows defeider是無法免殺的
# A類序列化以后的原始狀態 dumps 序列化 loads 反序列化
demo2
在執行demo1后得到了base64編碼后的值
然后我們利用ASE的CBC模式對該值進行對稱加密,加密輸出結果
# 在一定時間內,因為殺毒軟件沒有密鑰就無法解密該結果,那么就不知道這個是什么東西,那么就將它放行了
# AES加密要指定模式、秘鑰、偏移量將執行完A類序列化和base64encode的結果,進行一個ase加密 加密模式cbc 加密網站http://tool.chacuo.net/cryptaes
# 加密的秘鑰ysIx0oKueJV15dkA4P3WvDjnq9giB62= 加密偏移量 jbMNXRf954m0WUzQ aes加密完 會自動出書base64編碼的內容# A類進行序列化 ----- >base64encode編碼·-----正向過程:
A類進行序列化 -----> base64encode編碼 ------> AES加密 ----> base64編碼逆向過程:
base64decode解碼 -----> AES解碼 -----> base64解碼 -----> 反序列化
代碼中:base64.b64decode --- decrypt --- base64.b64decode --- json.loads
# json是因為別名:import pickle as json操作:
1、在本地啟動一個簡單的 HTTP 服務器
python3 -m http.server 9999
# 解釋器 -m:指定模塊 http.server:Python庫中的一個模塊,用于快速啟動一個簡單的HTTP服務器 端口號
2、執行代碼為了加大防范,可以將pick進行序列化、base64編碼,然后利用python切片,將木馬打亂,讓木馬無法執行;將打亂后的木馬放入gif文件(圖片)中,記得加入文件頭gif89a,放在服務器中還原:1. 下載gif圖片,讀取木馬利用代碼 2 還原木馬 3. 解碼
demo3
把demo2更進一步包裝繼續將其做變量,放到自定義base64編碼demo1
1、從服務器下載數據
2、自定義base64解碼,還原成原來的代碼,但只是序列化、反序列化得到的值放在那
3、要把該值進行序列化、反序列化反向遞進
信息收集、信息泄露
弱口令:
弱口令是指那些強度不夠,容易被猜解的,類似于123、abc這樣的口令密碼
如何利用信息泄露挖掘一個edu src漏洞1、首先找學校的官網,在學校眾多網站中找到一個相對防御較弱的分站(一個主站,多個分站)怎么找分站? ———— 比如:EZ工具突破0信任入口,需要大量的教工號和學號 ———— 百度、谷歌、學校網站獎學金等信息找學號site:peihua.cn intext;"學工號"
一般是找默認密碼固定的
找到信息后,用抓取軟件(burpsuite)暴力破解,破解哪個字段就打上$符,在payloads導入信息文件,intruder爆破(548、539等:失敗)中衛漏洞 信息泄露+弱口令破解
攻擊工具:
肉雞
# 所謂“肉雞”是一種很形象的比喻,比喻那些可以被攻擊者控制的電腦、手機、服務器或者其他攝像頭、路由器等智能設備,用于發動網絡攻擊。
# 例如在2016年美國東海岸斷網事件中,黑客組織控制了大量的聯網攝像頭用于發動網絡攻擊,這些攝像頭則可被稱為“肉雞”。僵尸網絡
# 僵尸網絡Botnet是指采用一種或多種傳播手段,將大量主機感染病毒,從而在控制者和被感染主機之間所形成的一個可一對多控制的網絡。
# 僵尸網絡是一個非常形象的比喻,眾多的計算機在不知不覺中如同中國古老傳說中的僵尸群一樣被人驅趕和指揮著,成為被攻擊者執行各類惡意活動(DDOS、垃圾郵件等)利用的一種基礎設施。木馬
# 就是那些表面上偽裝成了正常的程序,但是當這些程序運行時,就會獲取系統的整個控制權限。
# 有很多黑客就是熱衷使用木馬程序來控制別人的電腦,比如灰鴿子、GhOst、PcShare等等。網頁木馬
# 表面上偽裝成普通的網頁或是將惡意代碼直接插入到正常的網頁文件中,當有人訪問時,網頁木馬就會利用對方系統或者瀏覽器的漏洞自動將配置好的木馬服務端植入到訪問者的電腦上來自動執行將受影響的客戶電腦變成肉雞或納入僵尸網絡。Rootkit
# Rootkit是攻擊者用來隱藏自己的行蹤和保留root(根權限,可以理解成WINDOWS下的system或者管理員權限)訪問權限的工具。
# 通常,攻擊者通過遠程攻擊的方式獲得root訪問權限,或者是先使用密碼猜解(破解)的方式獲得對系統的普通訪問權限,進入系統后,再通過對方系統存在的安全漏洞獲得系統的root或system權限。然后,攻擊者就會在對方的系統中安裝Rootkit,以達到自己長久控制對方的目的,Rootkit功能上與木馬和后門很類似,但遠比它們要隱蔽。蠕蟲病毒
# 它是一類相對獨立的惡意代碼,利用了聯網系統的開放性特點,通過可遠程利用的漏洞自主地進行傳播,受到控制終端會變成攻擊的發起方,嘗試感染更多的系統。
# 蠕蟲病毒的主要特性有:自我復制能力、很強的傳播性、潛伏性、特定的觸發性、很大的破壞性。I震網病毒又名Stuxnet病毒,是第一個專門定向攻擊真實世界中基礎(能源)設施的“蠕蟲“病毒,比如核電站,水壩,國家電網。
作為世界上首個網絡“超級破壞性武器”,Stuxnet的計算機病毒已經感染了全球超過45000個網絡,其目標伊朗的鈾濃縮設備遭到的攻擊
最為嚴重。勒索病毒
# 主要以郵件、程序木馬、網頁掛馬的形式進行傳播。該病毒性質惡劣、危害極大,一旦感染將給用戶帶來無法估量的損失。這種病毒利用各種加密算法對文件進行加密,被感染者一般無法解密,必須拿到解密的私鑰才有可能破解。挖礦木馬
# 一種將PC、移動設備甚至服務器變為礦機的木馬,通常由挖礦團伙植入,用于挖掘比特幣從而賺取利益。攻擊載荷
# 攻擊載荷(Payload)是系統被攻陷后執行的多階段惡意代碼。
# 通常攻擊載荷附加于漏洞攻擊模塊之上,隨漏洞攻擊一起分發,并可能通過網絡獲取更多的組件。嗅探器(Sniffer)
#就是能夠捕獲網絡報文的設備或程序。嗅探器的正當用處在于分析網絡的流量,以便找出所關心的網絡中潛在的問題。惡意軟件
# 被設計來達到非授權控制計算機或竊取計算機數據等多種惡意行為的程序。間諜軟件
# 一種能夠在用戶不知情的情況下,在其電腦、手機上安裝后門,具備收集用戶信息、監聽、偷拍等功能的軟件。后門
# 這是一種形象的比喻,入侵者在利用某些方法成功的控制了目標主機后,可以在對方的系統中植入特定的程序,或者是修改某些設置,用于訪問、查看或者控制這臺主機。
# 這些改動表面上是很難被察覺的,就好象是入侵者偷偷的配了一把主人房間的鑰匙,或者在不起眼處修了一條按到,可以方便自身隨意進出。
# 通常大多數木馬程序都可以被入侵者用于創建后門(BackDoor)。弱口令
# 指那些強度不夠,容易被猜解的,類似123,abc這樣的口令(密碼)。漏洞
# 漏洞是在硬件、軟件、協議的具體實現或系統安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權的情況下訪問或破壞系統。
# 奇安信集團董事長齊向東在《漏洞》一書中指出,軟件的缺陷是漏洞的一個主要來源,缺陷是天生的,漏洞是不可避免的。遠程命令執行漏洞
# 由于系統設計實現上存在的漏洞,攻擊者可能通過發送特定的請求或數據導致在受影響的系統上執行攻擊者指定的任意命令。Oday漏洞
# Oday漏洞最早的破解是專門針對軟件的,叫做WAREZ,后來才發展到游戲,音樂,影視等其他內容的。
# Oday中的0表示Zero,早期的0day表示在軟件發行后的24小時內就出現破解版本。
# 在網絡攻防的語境下,0day漏洞指那些已經被攻擊者發現學握并開始利用,但還沒有被包括受影響軟件廠商在內的公眾所知的漏洞,這類漏洞對攻擊者來說有完全的信息優勢,由于沒有漏洞的對應的補丁或臨時解決方案,防守方不知道如何防御,攻擊者可以達成最大可能的威脅。