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........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................


后记

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值