一、信息收集
1、扫描靶机的IP
可以发现到靶机的IP
2、接下来扫描靶机开启了那些端口
nmap -p- -sV -O 192.168.31.184
-p- 全部端口 -sV 详细信息 -O 操作系统
3、扫描网站目录
dirsearch -u http://192.168.31.184
4、扫描敏感信息
nikto -h 192.168.31.184
总结:
以上的信息收集,我没有发现什么实际的信息,只有两个端口,一个ssh端口被过滤,因此我们最后再访问一下网站
发现两个有用的地方,一个可以存在表单,另一个是登录的网页
二、漏洞挖掘
1、存在表单
我们可以尝试使用sqlmap进行爆库
sqlmap -u "http://192.168.31.184/results.php" --data "search=1" --dbs
发现可以跑出爆库Staff
爆表
爆字段
查看字段
爆库users
爆字段
查字段
发现admin的密码后,我们可以尝试网站登录
可以知道密码为transorbital1
这里的用户密码可以现记着
三、登录网站
可以看见它多了一个Add Record选项,并无什么有用的东西,再看它下面的那句话:File does not exist ,它说文件不存在,这里就很可以了,随即联想到这里是不是存在LFI(本地文件包含)漏洞呢?然后尝试一下:
到了这一步我们无法进行思路扩展,接着我借鉴了大佬的文章之后,了解了这是一个端口敲门服务
端口敲门服务,即:knockd服务。该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来“敲门”,使系统开启需要访问的服务端口,才能对外访问。不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。
简单来说就是:知道它的自定义端口后,依次对其进行敲门,然后就可以开启ssh服务从而进行连接了。它的默认配置文件为:/etc/knockd.conf
所以现在就是要知道它的这个配置文件的内容就可以得到它自定义的端口号,用LFI把这个文件爆出来:
knockd
目的:使用 knockd 保护指定端口
作用:使用者连线前必须先依序 '敲击' 指定端口 (port knocking), knockd 才开放受到保护的端口
用法:配置文件路径 /etc/knockd.conf
接下来我们可以使用nc或者nmap进行端口开启
再次查看22端口
接下来我们需要使用到之前的用户表进行ssh爆破
使用九头蛇爆破
hydra -L dc9user.txt -P dc9pw.txt 192.168.31.184 ssh
登录密码,进行查看账号里有什么内容,然后在janitor中使用ls -al查看到隐藏密码
把新的密码进行添加到密码文件中,重新爆破
新的用户是:fredf 密码: B4-Tru3-001
四、进行提权
1、查看是否可以进行suid提权
发现没有提权的地方,我们在使用sudo -l查看
发现一个root用户的免密文件,我们进行判断文件类别
执行文件后提示我们查看test.py
源码为
代码审计:
判断是否有三个参数,没有的话输出Usage: python test.py read append,然后停止执行
第二个参数是读取第二个参数文件中的内容
第三个参数是把读取的内容写到第三个参数文件中(a是追加)
既然拥有root权限,那现在我们要做的就是构造一个拥有root权限的用户,并且在/etc/passwd文件中储存,只要使用这个用户登录后,就可以获取到root权限。原理: /etc/passwd 文件中含有的用户会去 /etc/shadow 文件中校验,如果 /etc/shadow 文件中没有则会无密码直接su切换用户
创建用户使用openssl命令:
OpenSSL passwd -1 salt admin 123
-1 加密的方式md5
-salt 自动生成一个随机数作为文件加密
最后进行执行
我们的核心就是在/etc/passwd中添加
核心思路就是利用其在passwd文件中追加一条uid为0(root uit=0)的用户条目
因为一般在/tmp目录下是可写的,因此写在/tmp下
接着sudo 脚本 写的文件 读的文件
发现有admin用户后,我们直接su -admin 密码为123