赞
踩
本文介绍了对vulnhub-dc9靶场进行测试的过程,主要内容为nmap信息收集、Web信息收集,利用SQL注入漏洞和文件包含漏洞利用获取到SSH用户名和密码,在SSH登录后通过sudo进行提权,通过测试总结发现了新攻击思路,在文中记录下来。
1.先将靶机进行网络配置,使得攻击机在同一网段,确保攻击机和靶机之间的正常通信。通过攻击机(kali)使用nmap扫描网段内存活主机,确定靶机ip为192.168.137.134。
nmap -sP 192.168.137.1/24
2.在确定好ip后使用nmap扫描靶机端口以及开放的服务,发现开放了22端口(过滤状态)和80端口,通过过滤状态猜测目标靶场开启了防火墙对ssh服务开启了防护,Apache httpd版本2.4.38。
namp -sC -sV 192.168.137.134
访问靶机网站,发现有搜索页面search.php。查看表单信息,提交页面results.php,参数名为search。
![]() |
---|
1.因为是搜索页面的表单,首先想到了可能会与数据库进行交互,测试results.php是否存在sql注入漏洞,发现存在union注入和时间盲注,直接使用使用sqlmap去跑库名。发现存在Staff和 users两个数据库。
Sqlmap获取数据库名命令:sqlmap -u 192.168.137.134/results.php -data search=1 –dbs
2.攻击机使用sqlmap查看Staff库的所有表。
sqlmap -u 192.168.137.134/results.php -data search=1 -D Staff –tables
3.攻击机使用sqlmap跑Users表的数据内容,发现存在用户名和密码,密码字段猜测使用MD5进行加密,使用sqlmap自带的功能去爆破密码。也可以使用一些在线网站进行解密,最后得到账户:admin/transorbital1。
4.接着在攻击机使用sqlmap跑第二个数据库users库的表名。
sqlmap命令如下:sqlmap -u 192.168.137.134/results.php -data search=1 -D users –tables
5.攻击机使用sqlmap跑UserDetails表的数据内容,得到多个账户。
命令如下:sqlmap -u 192.168.137.134/results.php -data search=1 -D users -T UserDetails –dump
1.返回Web界面,点击页面的Manager标签。
页面路径为:http://192.168.137.134/manager.php
发现存在登录功能,使用管理员账号登录即Users表爆破出的密码登录admin用户,可成功登录后台。
2.在登录成功后没有发现后台没有什么功能点,但是下方有一串英文File does not exist提示文件不存在,由于页面是从http://192.168.137.134/manager.php登录后进行跳转然后才出现File does not exist,这里可以猜测在文件manager.php 可能存在隐藏的参数,用于指向文件。
由于我们没有加参数所以显示文件不存在,进一步猜测可能存在文件包含漏洞或者是文件上传、下载漏洞。
3.由于没有参数,需要进行参数的爆破,这里使用wfuzz工具进行猜解manager.php隐藏的参数,在参数后面passwd 文件的路径,文件的路径层数也是需要进行猜测,因为一般网站的根目录在(/var/www/html)加上Web系统目录,可能会有四层目录。
由于是登录后才出现的File does not exist,所有在使用wfuzz时需要指定cookie,最后得出文件包含参数为file。
wfuzz下载和使用:https://github.com/xmendez/wfuzz
Kail自带字典路径:/usr/share/wfuzz/wordlist/general/common.txt
wfuzz 命令:wfuzz -b ‘cookie值’ –hw 100 -w 参数字典
http://192.168.137.134/manage.php?FUZZ=../../../../etc/passwd http://192.168.137.134/manage.php?FUZZ=../../../../etc/passwd
4.读取/etc/passwd文件,发现文件中用户与前面通过注入得到的users数据库中的UserDetails表中的有相同的用户名,结合开放ssh端口,猜测可能为ssh登录的用户名和密码。
1.攻击机使用查表获得的用户名、密码作为爆破字典,使用Hydra尝试爆破ssh服务,发现连接被拒绝。
这里思考后想到信息收集的时候扫描靶机的22端口状态为(filtered)即被过滤状态(原因是nmap 直接发送的SYN 探测报文,都没有收到应答),很有可能开启了防火墙规则。通过搜索关于设置隐藏22端口的操作,找到了一个关于knockd的服务设置可以实现。
参考:https://blog.csdn.net/nzjdsds/article/details/112476120
这里简单介绍一下knockd:
knockd服务翻译过来是端口敲门服务,该服务通过动态的添加iptables(防火墙)规则来隐藏系统开启的服务,使用自定义的一系列序列号来“敲门”(这里的序列号是由不同的端口号组成),只有依次访问序列号中设定的端口,才能触发相应的规则,执行命令使系统开启需要访问的服务端口。在不使用时,可以使用自定义的序列号来进行“关门”操作,将端口关闭。
利用文件包含漏洞发现确实存在knockd服务配置文件/etc/knockd.conf,成功读取发现了配置文件中开启SSH端口的端口序列号。
|
![]() |
---|
在确定好序列号后,在攻击机依次访问这三个端口进行“敲门”操作,从而触发knockd服务开启ssh端口的规则,即可访问靶机的22端口。使用nc命令如下,也可以用nmap等端口探测或者连接工具。依次访问三个端口就可以了。
for x in 7469 8475 9842 22 ;do nc IP $x ;done
再次使用Hydra对ssh服务进行爆破,获得了3个账户。
登录刚才获得的3个账号,发现janitor用户多一个隐藏目录.secrets-for-putin。
进入.secrets-for-putin目录查看,发现了一些password。
将新发现的密码补充进数据库找到的密码字典再次爆破,发现多了个可用账户fredf。
SSH登录fredf账号,因为后续需要进行权限提升,sudo提权Linux提权的一种方式,使用sudo -l(列出当前用户可以利用sudo执行哪些命令)查看能以root权限执行的程序,并且不需要root的密码,测试后发现了可执行程序test。
执行test程序,发现提示test.py读取追加,说明。使用find命令查找test.py文件并忽略错误提示,查看test.py内容是读取参数1文件的内容追加到参数2文件中。
通过分析可执行文件,可执行文件可以往文件了追加内容,那我们可以联想到可以往/etc/passwd文件中写入登录的账户信息。从而创建新的用户。
在kali上的root终端使用openssl生成一个一个hash值,伪造一个root权限的用户hack,密码为123456。
登录fredf账号将生成的hash值上传到文件/tmp/hack,执行test程序将 /tmp/hack 作为第一个参数 /etc/passwd 作为第二个参数,文件hack的内容追加给/etc/passwd。
Openssl passwd -1 -salt hack 123456 sudo /opt/devstuff/dist/test/test /tmp/hack /etc/passwd
su hack,切换为我们创建用户,成功提权,获得flag。
通过这次打靶场学习和巩固到的知识:
1. 在nmap信息收集扫描端口时,需要注意端口的开放状态。
2. sql注入漏洞的发现和利用。
3. 通过参数Fuzz隐藏的参数到发现文件包含漏洞并进行利用。
4. knock:端口敲门服务的利用,通过依次访问目标端口,触发knock服务的规则,开启相应的端口,从而进一步的利用。
5. 通过Sudo -l查看是否有高权限可执行文件,并分析进一步利用进行提权等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。