php代码审计学习笔记-xhcms

这里主要是跟着迪总的教程进行手把手复现,做的一些学习笔记,只有自己动手做了一遍才能学到东西。

环境搭建

  • 小皮面板设置好

  • phpstorm xdebug设置那调成127.0.0.1

  • 访问127.0.0.1直接跳转127.0.0.1/install,因为小皮面板设置过了

  • 这里报错说没有相应的数据库

  • 手动创建数据库,navicat创建xhcms数据库

  • 此时源码安装完成


seay找漏洞——XSS漏洞

  • echo搜索,优先找非后台的,即非/admin目录的


  • 找一个

  • 进来全文追踪一下这个$nav变量

  • 全局定位到$nav后,再全局追踪$resul

  • 找到$resul的是这个mysql_query语句的结果,mysql_query里是$query

  • 再追踪这个$query语句是写死的,所以这个echo处没有漏洞

  • 再看另一处$echo,受到$pages $info两处变量影响

  • 追踪这个$info,它也受$resul影响,所以也是没得漏洞

  • 追踪$pages,发现page是从$_GET[('page')]截出来的,还有个addslashes()函数。这个函数它拦截不了xss的payload,这里就有可能存在xss漏洞


  • 漏洞复现,/files/contact.php处,直接定位到127.0.0.1/files/contact.php,发现报错了。这是因为代码属于MVC架构,直接通过代码的结构去找它对应的web是不对的


  • MVC架构的代码定位它的位置要根据源码的要求来

  • 简单对这个index.php代码做个剖析
<?php
//单一入口模式
error_reporting(0); //关闭错误显示
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file; //判断为空或者等于index
include('files/'.$action.'.php'); //载入相应文件
?>

1. error_reporting(0);:这行代码关闭了错误报告。这意味着如果代码中有任何错误,它们都不会显示出来。

2. $file=addslashes($_GET['r']);:这行代码从 URL 的查询字符串中获取 'r' 参数的值,并将其赋值给 $file 变量。addslashes() 函数用于在预定义字符前添加反斜杠,可以防止 SQL 注入。

3. $action=$file==''?'index':$file;:这行代码利用了三元运算符。三元运算符的格式是 条件 ? 值1 : 值2。如果条件为真(即非零或非空),则返回值1,否则返回值2。如果 $file 为空字符串(''),那么 $action 的值将被设置为 'index',否则 $action 的值将被设置为 $file 的值

4. include('files/'.$action.'.php');:这行代码包含了一个 PHP 文件,该文件的路径是 'files/' 目录下,文件名是 $action 变量的值,并且文件扩展名是 '.php'。


  • 访问http://127.0.0.1/index.php?r=contact

  • 访问http://127.0.0.1/index.php?r=contact&page=1


  • 看看页面有无参数,构造关键字访问http://127.0.0.1/index.php?r=contact&page=1aaa


  • 源代码搜索确实有1aaa


  • 1aaa对应的源码位置

  • 构造payload http://127.0.0.1/index.php?r=contact&page=1aaa<script>alert(1)<script>,漏洞存在。因为这里有addslashes()函数在,所以alert("")里面出现"会被转义掉

文件包含漏洞

  • 重点看以下的函数:include、 include_once 、require require_once等
  • seay搜索include函数

  • 文件包含有后缀限制,它会自动加上.php后缀

  • 在源码的files目录下有个test.php文件

  • 构造payload,去尝试文件包含 127.0.0.1/?r=test

  • 将test.php改为test.txt,此时构造payoload http://127.0.0.1/?r=../test.txt,没有任何显示,因为会$action后面会自动跟上.php后缀

  • 这里可以通过截断字符绕过,注意windows的截断字符要>256、linux的阶段字符要>4096;payload如下:

http://127.0.0.1/xhcms/?r=test.txt................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

目的是把后面的.php字符截断掉。但是这里对php的版本有要求,php版本必须小于5.3.29。我这里小皮面板没有装好5.2的版本,就换phpstudy来搭建环境了

  • 将test.txt放置在网站根目录WWW的上两级目录,构造payload:

http://127.0.0.1/xhcms/?r=../../../test.txt........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................


后记

本次做的比较简单,但是还是能学到很多东西的,后面也会分享更多的审计文章。

### XHCMS代码审计方法与思路 #### 一、静态分析工具的应用 在XHCMS代码审计过程中,可以采用静态分析工具来识别潜在的安全缺陷。这些工具基于一组全面的规则和测试机制,在不运行程序的情况下对源码进行深入检查。例如,HP Fortify这样的工具可以帮助开发者快速定位可能存在的SQL注入、跨站脚本攻击(XSS)、路径遍历等问题[^1]。 #### 二、安全漏洞扫描的重要性 除了静态分析外,还需要借助专业的漏洞扫描工具完成动态环境下的安全性评估工作。这类工具可以通过模拟黑客行为向目标应用发送特制请求包并解析返回结果,从而判断是否存在可被恶意利用的风险点[^2]。对于像XHCMS这样复杂的Web项目来说尤为重要。 #### 三、配置调整与黑名单验证 针对具体场景如Apache服务器部署情况,则需做好前期准备工作。比如通过编辑`httpd.conf`文件实现更严格的访问控制策略;另外还可以引入基于黑名单模式的输入校验逻辑以增强防护能力。此部分操作建议由熟悉业务需求的技术负责人主导实施[^3]。 #### 四、实际案例剖析——XSS漏洞成因探讨 从已知实例来看,在某些情况下如果未对用户提交的数据做适当过滤处理就直接嵌入HTML文档展示给其他用户查看的话,很容易引发反射型或者存储型XSS问题。例如当管理员回复留言板消息时缺乏必要的转义措施就会使得攻击者构造出来的payload成功执行进而影响整个系统的正常运转[^4]。 以下是用于检测XSS漏洞的一个简单Python脚本示例: ```python import requests def test_xss(url, param_name): payload = "<script>alert('test');</script>" data = {param_name: payload} response = requests.post(url, data=data) if payload in response.text: print(f"[+] Possible XSS vulnerability detected at parameter '{param_name}'!") else: print("[-] No XSS vulnerability found.") # Example usage url_to_test = "http://example.com/admin/reply" parameter_to_check = "message" test_xss(url_to_test, parameter_to_check) ``` 上述代码片段展示了如何自动化探测POST接口下某个参数是否容易受到跨站点脚本攻击的影响。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值