代码审计学习 : xhcms

news2024/11/15 8:41:12

前言

从大佬那里听说,xhcms 很适合代码审计的新手。

环境

php 5.4.45 + Apache 2.4.39 + Mysql 5.7.26

文件上传配合文件包含

/index.php/admin/index.php

error_reporting(0); //关闭错误显示
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file; //判断为空或者等于index
include('files/'.$action.'.php'); //载入相应文件

虽然参数用 addslashes处理了一下,但是 addslashes 只会转义 ' " \ null ,也就是说我们是可以目录穿越的,那么我们是不是可以找一个可以上传文件或者图片马的地方,利用 /index.php 目录穿越去包含它,从而达到任意代码执行,那么要怎么去掉最后面的 .php 呢?

暂时想到两种方法:
1、00截断,但是这种有php版本的限制,且会被 addslashes 转义。
2、利用 windows 解析文件名的特性和文件路径长度限制。
(windows 下 index.php. 后面的点会被忽略且最长解析长度为260个字符,如果文件路径超过最大长度,将导致使用问题。)

也就是说可以:

/index.php?r=shell.png................260
/index.php?r=shell.png/./././././.....260

但是这种也有使用限制,我们看看微软的官方说明:

最大路径长度限制
在版本 1607 之前Windows版本中Windows 10,路径的最大长度为 MAX _ PATH, 定义为 260 个字符。 在更高版本的 Windows中,更改注册表项或组策略工具才能删除限制。 有关 完整详细信息,请参阅最大路径 长度限制。

也就是说 1607 windows 10 之后的版本 要删除 MAX _ PATH 限制,显然这种情况基本不存在。

垂直越权

/inc/checklogin.php

<?php
$user=$_COOKIE['user'];
if ($user==""){
header("Location: ?r=login");
exit;	
}
?>

判断的很简单粗暴,直接传一个 cookie:user=admin 就可以登录后台了。

SQL注入

/admin/files/login.php

$login=$_POST['login'];
$user=$_POST['user'];
$password=$_POST['password'];
$checkbox=$_POST['checkbox'];

if ($login<>""){
$query = "SELECT * FROM manage WHERE user='$user'";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());

没有过滤直接把 user 值代入查询判断,也没有屏蔽报错,可以报错注入。

利用:

' and updatexml(2,concat(0x7e,(version())),0)--+

在这里插入图片描述
在这里插入图片描述

seay 中有 /admin/files/adset.phpsql 可能是漏洞提示。我们要绕过 addslashes 函数,但是里面没有其他对参数的解码函数,且我设置的数据库字符集是 utf8 而不是 gbk 所以也就无法宽字节注入,当然二次注入就更谈不上了,所以无法绕过了。

$ad1=addslashes($_POST['ad1']);
$ad2=addslashes($_POST['ad2']);
$ad3=addslashes($_POST['ad3']);

/admin/files/editcolumn.php

$id=$_GET['id'];
$type=$_GET['type'];

if ($type==1){
$query = "SELECT * FROM nav WHERE id='$id'";
$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$nav = mysql_fetch_array($resul);
}
if ($type==2){
$query = "SELECT * FROM navclass WHERE id='$id'";
$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$nav = mysql_fetch_array($resul);
}
$query = "UPDATE nav SET 
name='$name',
keywords='$keywords',
description='$description',
xs='$xs',
px='$px',
content='$content',
date=now()
WHERE id='$id'";
@mysql_query($query) or die('修改错误:'.mysql_error());

可以看到漏洞和上面一样,只是多了一个 update 注入,当然直接访问这个页面是肯定不行的,因为它设定了一个入口,也就是 /admin/index.php

/admin/index.php?r=editcolumn&type=1&id=1'and updatexml(2,concat(0x7e,(version())),0)--+

或者利用 update 注入
在这里插入图片描述

其他

/admin/files/editlink.php
/admin/files/editsoft.php
/admin/files/editwz.php
/admin/files/imageset.php
/admin/files/manageinfo.php
/admin/files/newlink.php
/admin/files/reply.php
/admin/files/seniorset.php
/admin/files/siteset.php
/files/content.php 中虽然前面用 addslashes 转义了,但是后面没有用引号包裹起来。

$id=addslashes($_GET['cid']);
$query = "SELECT * FROM content WHERE id='$id'";
$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$content = mysql_fetch_array($resul);

$navid=$content['navclass'];
$query = "SELECT * FROM navclass WHERE id='$navid'";
$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$navs = mysql_fetch_array($resul);

//浏览计数
$query = "UPDATE content SET hit = hit+1 WHERE id=$id";//没有引号包裹
@mysql_query($query) or die('修改错误:'.mysql_error());

总之就是sql语句基本没有过滤,学学审计思路还是可以的。

XSS

/admin/files/adset.php

$query = "SELECT * FROM adword";
$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$ad = mysql_fetch_array($resul);

$save=$_POST['save'];
$ad1=addslashes($_POST['ad1']);
$ad2=addslashes($_POST['ad2']);
$ad3=addslashes($_POST['ad3']);
if ($save==1){
$query = "UPDATE adword SET 
ad1='$ad1',
ad2='$ad2',
ad3='$ad3',
date=now()";
@mysql_query($query) or die('修改错误:'.mysql_error());

..........
 <textarea name="ad1" class="form-control col-lg-12" placeholder="ad-1"><?php echo $ad['ad1']?></textarea>

上面的代码会产生存储型 xss ,不是有 addslashes 转义吗?非也,它是转义了,但是在写入数据的时候会自动去掉转义符号,那么等再读取这个数据的时候不就是转义前的了吗,也就是说addslashes只是帮助mysql完成了sql语句的执行,并未将转义符写入。

</textarea><script>alert('hahhahahaa')</script>

在这里插入图片描述

那么也就是说所有存在类似操作的文件都存在 xss。

CSRF

/admin/files/wzlist.php

<?php
require '../inc/checklogin.php';
require '../inc/conn.php';
$wzlistopen='class="open"';
$pageyema="?r=wzlist&page=";

$delete=$_GET['delete'];
if ($delete<>""){
$query = "DELETE FROM content WHERE id='$delete'";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
echo "<script>alert('亲,ID为".$delete."的内容已经成功删除!');location.href='?r=wzlist'</script>";
exit; 
}
?>

可以看到没有任何验证,可以随便删除。

在这里插入图片描述

reference

https://xz.aliyun.com/t/11310

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FH30502输入3.7V升5V电流3A-5A同步整流升压芯片

3.3V升5V电流3A-5A同步整流升压芯片&#xff0c;2.7V到18V的输入电压支持供电系统和电池的较宽范围应用。FH30502根据负载情况的变化自动切换工作模式&#xff0c;在轻载Burst模式下静态电流处于低状态。FH30502使用自适应常数断开时间峰值电流模式控制。FH30502有一个内部特性…

C 语言实现经典贪吃蛇游戏

原文链接&#xff1a;C语言 贪吃蛇游戏 文章目录一、说明二、效果2.1 欢迎界面2.2 游戏规则2.3 得分排行2.4 退出游戏2.5 游戏界面2.6 游戏结束三、源码3.1 cmd.h3.2 cmd.c3.3 io.h3.4 io.c3.5 model.h3.6 service.h3.7 service.c3.8 ui.h3.9 ui.c3.10 utils.h3.11 utils.c3.12…

m蜂窝移动通信系统中越区切换的matlab仿真分析

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 用Matlab仿真一个蜂窝模型&#xff0c;用户在打电话时产生切换的过程。建立蜂窝越区切换&#xff0c;假设有16个蜂窝&#xff0c;实现两个小区之间的硬切换&#xff0c;每个小区假设能容纳30个用…

UDS入门至精通系列:Service 14

文章目录 一、Service 14功能是什么二、UDS协议对服务的定义三、用图形说明Service 14四、手动测试总结一、Service 14功能是什么? 在汽车电子诊断领域,在新车型定义诊断需求时,会给每一个ECU的故障类型定义一个DTC,ECU中运行代码判定DTC是否产生(判定机制和原理我会在关于…

Gateway之限流、熔断

目录 一、Sentinel--服务容错 ① 简化启动我们的nacos 1.高并发带来的问题 ① 修改配置文件中tomcat的并发数 ② 使用压测工具&#xff0c;对请求进行压力测试 第一步&#xff1a;修改配置&#xff0c;并启动软件 第二步&#xff1a;添加线程组 第三步&#xff1a;配置线…

MySQL 小版本升级步骤

MySQL mysql 5.7.38 升级到 5.7.40 下载软件升级包 参考下载地址&#xff1a;https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.40-linux-glibc2.12-x86_64.tar.gz 上传软件包至服务器 可以使用rz命令或scp上传本地文件 比如上传至服务器目录为 /usr/local/software…

关于如何获取上周均值的实时数据思路,吾之解合君意否?

&#x1f4da; 在前端界面图形化展示中&#xff0c;目前主流以报表形式&#xff0c;或者以曲线图形式展示其所需数据的数字动态变化效果居多。在数据量不大或者不需要模糊对比的情况下&#xff0c;我们以报表展示为主&#xff1b;而我们需要从肉眼宏观可见的监控数据变化&#…

volatile解决有序性和可见性问题

线程可见性问题分析 什么是可见性&#xff1f; 如果一个线程对一个共享变量进行了修改 而其他线程不能及时地读取修改后的值 所以在多线程情况下该共享变量就会存在可见性问题 package com.alipay.alibabademo.thread;import lombok.extern.slf4j.Slf4j;import java.util.co…

改进遗传算法在TSP问题中的应用(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

玩转Python图片处理(OpenCV)

OpenCV是一个基于BSD许可&#xff08;开源&#xff09;发行的跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C 类构成&#xff0c;同时提供了Python、Ruby、MATLAB等语言的接口&#xff0c;…

Qt扫盲-QLabel使用总结

QLabel使用总结一、QLabel 显示内容二、注意事项1. 格式注意2. 不保留先前状态3. 格式对齐4. 伙伴焦点三、信号和槽函数使用1. 信号2. 槽函数总结&#xff1a;QLabel 其实就是一个用来只读显示的简易控件。适合数据量很小的内容显示。QLabel用于显示 文本或图像。 不提供用户交…

深度学习之目标检测通用技巧

深度学习之目标检测通用技巧深度学习之目标检测通用技巧深度学习之目标检测通用技巧 一 数据增强 1.离线增强 离线增强:对数据集进行处理&#xff0c;数据的数目会变成增强因子原数据集的数目 2.在线增强 对输入模型的batch的数据进行增强&#xff0c;如旋转、平移、翻折等…

今天给大家介绍一篇基于SSM的教材管理系統的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【Tensorflow学习三】神经网络搭建八股“六步法”编写手写数字识别训练模型

神经网络搭建八股“六步法”编写手写数字识别训练模型Sequential用法model.compile(optimizer优化器,loss损失函数,metrics["准确率"])model.fitmodel.summery六步法搭建鸢尾花分类网络class搭建具有非顺序网络结构MNIST数据集Fashion MNIST数据集用Tensorflow API:t…

java计算机毕业设计基于安卓Android的掌上酒店预订APP

项目介绍 网络的广泛应用给生活带来了十分的便利。所以把掌上酒店预订与现在网络相结合,利用java技术建设掌上酒店预订APP,实现掌上酒店预订的信息化。则对于进一步提高掌上酒店预订发展,丰富掌上酒店预订经验能起到不少的促进作用。 掌上酒店预订APP能够通过互联网得到广泛的…

基于风能转换系统的非线性优化跟踪控制(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

一、CDD在诊断开发中的作用

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CDD在诊断开发中的作用,欢迎各位朋友订阅、评论,可以提…

如何评价模型的好坏?

回归&#xff1a; MSE&#xff08;均方误差&#xff09;—— 判定方法&#xff1a;值越小越好&#xff08;真实值-预测值&#xff0c;平方之后求和平均&#xff09;RMSE&#xff08;均根方误差&#xff09;—— 判定方法&#xff1a;值越小越好&#xff08;MSE开根号&#xff…

Dijkstra最短路径算法

参考&#xff1a;(3条消息) Dijkstra算法图文详解_一叶执念的博客-CSDN博客_迪杰斯特拉算法 如图&#xff0c;假设图中共有n条路径&#xff08;如D-C-E&#xff09;&#xff0c;根据路径长度进行小到大排序。 1、起点到达某终点的距离是无穷符号&#xff0c;表示该起点还需要借…

27岁到来之际,我在阿里实现了年薪40W+的小目标

顺着大佬的思路&#xff0c;我分析了自己的实际水平和状况&#xff1a; 1、技术不精不成体系&#xff1a;技术能力浮于表面&#xff0c;对底层逻辑和架构不了解&#xff0c;也不知道如何系统化进行学习; 2、遇到职场瓶颈期&#xff1a;站在3年职场的分水岭上&#xff0c;没有…