前言

最近想提升一下自己的代审能力,虽然之前复现分析了挺多漏洞的,TP,Laravel,Typcho,yii,但一直感觉对代码审计能力提升用处不太大,很多时候链子和利用点都非常简单,可是如何发现的这确实一个难题,所以就拿熊海CMS为例,如何自己挖它里面的漏洞,看看自己能否发现和利用,最后在和网上存在的漏洞进行对比,再看哪里没有发现,为什么没有发现,希望这也能给才入门代码审计的师傅们一点思路吧

资料】

审计流程

先看一下入口文件index.php,这个文件一般会定义很多变量,包含很多路径,文件进来,我们只需要注意它和用户的交互的点,入口文件一般会先判断你是否存在安装锁或者配置文件,如果不存在就跳转到安装目录,开始安装整个网站。然后打开文件监控,首先判断是否存在重装漏洞,然后再分析目录结构,大概知道每个文件夹中放的文件功能是什么就行了,比如熊海CMS:

然后安装成功后我习惯先浏览下网站的主要功能,大致了解这些之后就可以静下心来看代码了

重装漏洞

重装漏洞可以以下几种类型:

  1. 自动删除这个安装文件

    通过生成一个 lock 文件来判断程序是否安装过

  2. 根本无验证

    安装完成后不会自动删除文件,又不会生成 lock 判断是否安装过

  3. 安装file

    直接用GET提交step绕过,直接进入下一步

  4. 变量覆盖导致重装

    可以GET,POST,COOKIE任意提交一个变量名insLockfile,给其赋空值,覆盖掉insLockfile,给其赋空值,覆盖掉insLockfile,给其赋空值,覆盖掉insLockfile,从而让file_exists为false就不会退出

  5. 判断lock后,无exit

    判断是否存在lock文件,如果存在lock文件,就会header到index.php,但是header后并没有exit,所以
    并不会退出,类似的还有javascript弹个框

  6. 解析漏洞

    在安装完成后会将install.php
    重命名为index.php.bak,但是由于Apache的解析漏洞:如果无法识别到最后一个后缀的话,就会向上解析,那么就又变成了php了,然后结合安装时的变量覆盖又成重装了。

  7. 满足一些条件不会退出的

危害

  1. 因为在安装时我们可控一些变量,因为没有exit,导致配置信息没有过滤的传入安装后,从而写入文件getshell
  2. 重装之后修改管理员信息,进入后台getshell

install/index.php:

并没有发现存在重装漏洞

SQL注入漏洞1

首先就要去查看数据库使用的编码方式,如果是GBK则可能造成宽字节注入,从而直接绕过addslashes这类函数,然后去有对数据库操作的地方查看传入数据是否可控,我们可以注意下,在注入前是否对参数进行了解码,如果进行了解码,可以二次编码注入,在熊海CMS安装的时候就发现它有写入管理员信息的操作,而且是在安装前的操作,并没有对参数进行任何过滤,

insatll\index.php:


而且它是有报错输出的,所以可以报错注入:

然后就是安装之后了,

文件包含漏洞

首先就从网站入口跟进,发现是一个单入口模式:

这里就存在文件包含漏洞,只是说暂时还没有发现危险文件能够利用,看道这里那就联想到能不能把后面的php后缀截断,然后去上传一个图片马来包含呢,或者是否存在一个文件写入的点来利用呢,可是我试了一下第一个思路,好像并没有成功,但是存在疑惑,因为在PHP<5.3.4的时候,我们是可以利用%00来截断后缀的,但是当我本地将版本调低到5.3.29,按理说是可以截断后缀从而包含任意文件,但是却出了问题,我先在根目录写了一个phpinfo,


这样是可以的,但是:

这样缺不行,然后我又使用长度截断也未成功

然后就跟进files文件夹下的页面文件,首先就是files/index.php,里面很多都是echo数据库里面的信息,但是我们并不可控,因为里面引进了template里面的文件,所以也先看一下,发现里面有没有能利用的,查看fiels/list.php,看起来存在SQL注入漏洞,但是存在addslashes函数,无法注入,然后继续审计,直到看到fiels/download.php的时候,发现了一个XSS漏洞,然后fiels/list.php同理

反射型XSS漏洞1

XSS也分为反射型、存储型以及DOM型,当我们想挖掘反射型XSS漏洞时,需要重点关注程序的输出,比如echo/print等,当程序直接将未经过滤的用户输入输出除了,就会造成反射型XSS。

而存储型XSS是由于网站将用户输入存储进数据库中,当用户再次浏览某页面时,从数据库中获取之前的输入并输出,如果在输入->数据库这块过程中没有进行实体化编码以及输出->页面的过程中没进行实体化编码,则很容易产生存储型XSS。所以对于这类XSS,重点关注insert,查找insert表内数据的输出位。

fiels/download.php:

直接echo可控变量,所以存在XSS漏洞,

然后继续往后看,点击下载会跳转到files/content.php,跟进,发现存在SQL注入漏洞,

SQL注入漏洞2

files/content.php:

这里的原因就是没有使用单引号闭合用户可控变量,导致绕过addslashes函数,

继续跟进,发现调用files/submit.php提交评论,

跟进files/submit.php,

都可控,且未经过addslashes函数,

很明显的一个SQL注入漏洞,但是需要注意的是后面还有一个插入语句:


开始我也卡了一下,因为你只闭合前面,后面是会报错的:

闭合后面:

还是不行,但是突然想到只需要用报错注入,让前面报错了,后面自然就不用管了:

name=1&mail=1') or updatexml(1,concat(0x7e,(select(database())),0x7e),1)#&content=哈哈


往后走还有SQL注入,

后面相同利用的地方就不赘叙了,因为发现这里有可控数据插入数据库的操作,那是否存在存储型XSS呢?

存储型XSS1

分析已经在上面的流程分析了

在files/content.php,我们能提交昵称、邮箱、网址、评论内容,但是在files/submit.php中,

他过滤了$content的HTML代码,所以不能利用,而且在显示评论和留言的地方有昵称,所以我们只能利用昵称处进行存储XSS

还有一个files/contact.php,存在和files/content.php一样的留言框,大概看了下代码,也是存在存储型XSS

最后还有一个files/software.php文件,在下载的时候会跳转到该界面,

又存在明显的SQL注入漏洞,

这里就不再重复讲述了

审计到这里差不多前端的代码就审完了,漏洞就SQL注入漏洞和XSS漏洞,然后就是去审计后台的代码了

首先对于后台代码,我会先查看是否存在越权漏洞,是否存在CSRF漏洞,然后登录后台,寻找PHP文件写入,寻找命令执行,

首先查看login.php,

又是重复的SQL注入,后面就不重复这些漏洞了,在审计代码的时候,并未发现admin/login.php存在什么越权漏洞,但是后面查看存在漏洞的时候,他却存在这个漏洞,因为在成功登录上admin账号后,他是存在一个user的cookie的,但是退出之后又没有了,所以他就是通过cookie中的user值来判断登录是否成功的,所以只需要伪造一个cookie即可:

成功越权登录

然后就是./inc/checklogin.php中存在越权漏洞了,:

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

所以只要调用了该文件都存在越权漏洞

后面的话其实就是前面提到过的漏洞了,这里就不再赘叙了,

总结

其实这个CMS很简单,我主要想讲的并不是这个CMS如何审计,而是一个思路,希望能帮到刚入门代审的师傅们,其实很多漏洞,利用点都很简单,难的就是去发现它的思路

参考
https://threezh1.com/2019/05/18/PHP%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1%E4%B9%8B%E9%87%8D%E8%A3%85%E6%BC%8F%E6%B4%9E/

关注我,持续更新······

私我获取【网络安全学习资料·攻略

【网络安全】xhCMS代码审计思路相关推荐

  1. 【代码审计-JAVA】javaweb代码审计思路

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  2. PHP代码审计二(通用代码审计思路)

    总结一下在PHP代码审计中常用到的代码审计思路 文章目录 敏感函数逆向回溯参数过程 espcms注入挖掘案例 通读全文代码 根据功能点定向审计 BugFree重装漏洞案例 敏感函数逆向回溯参数过程 根 ...

  3. php goto 代码还原_【表哥有话说 第58期】代码审计思路小结

    最近也在做一些代码审计,因此有了这篇文章,和大家聊一聊代码审计时的思路和步骤,有新想法的师傅不妨一起讨论讨论 工具测试 正常情况下拿到一份代码,首先放到seay代码审计系统里跑一遍,将跑出来的结果保存 ...

  4. 从疫情起伏思考网络安全未来防护思路

    摘要:生物病毒与计算机病毒的特性.传播性有一定的相似性,本文通过分析人们应对新冠疫情方面的得与失,进而展示了其对网络安全防护工作建设思路的启示与指导意义,并就如何应用网络安全新技术.提升安全运营的效率 ...

  5. 【网络安全】代码审计-zzcms2021前台写shell?

    本次是对zzcms2021前台一个可能的写配置文件的点进行分析(已交cnvd,不知道收不收呀),为什么说是可能,各位师傅往下看就好啦 [学习资料] 从官网下载最新源码后,本地搭建环境进行分析 主要利用 ...

  6. 代码审计--12--源代码审计思路(上)

    一.引子 一个Java应用的代码审计工作应该从哪里入手,对于新手来说也许会不知所措,如果在不了解整个应用系统情况下(包括业务功能.框架使用等)盲目的直接去阅读项目中源代码,往往会迷失在代码中导致漏洞误 ...

  7. 代码审计--13--源代码审计思路(下)

    三.按照业务类型正向审计 前面提到逆向回溯的审计方式针对特征明显的安全漏洞挖掘是非常有效的,但是同样会有很多弊端,通过逆向回溯的方式只能对通用漏洞进行快速审计,不能全面挖掘更有价值的漏洞,如果在时间允 ...

  8. java代码安全审计_《网络安全java代码审计实战》

    第1章 代码审计基础 1.1JavaWeb环境搭建 1.1.1JavaEE介绍 1.1.2JavaEE环境搭建 1.2JavaWeb动态调试 1.2.1Eclipse动态调试 1.2.2IDEA动态调 ...

  9. 一次代码审计实战案例【思路流程】

    前言: 利用这个 CMS 看看能不能挖到漏洞,运气还是不错的挖到了两个,分别是 SSRF 与文件覆盖 GETSHELL,下面给大家讲解一下这次审计的思路过程.该 CMS 版本是 4.2.以下漏洞均被 ...

最新文章

  1. BIRCH聚类算法原理
  2. 计算机科学计算第二版期末,计算机专业学生期末考试试卷2.pdf
  3. CodeForces - 1327E Count The Blocks(组合数学)
  4. MySQL 面试,必须掌握的 8 大核心点
  5. 零基础学python书籍-清华大学出版社-图书详情-《零基础入门学习Python》
  6. 【最大连接数】Linux的文件最大连接数
  7. 分析setting源代码获取sd卡大小
  8. No package ‘polkit-gobject-1‘ found
  9. java获取hive表结构_oracle12c中 表结构转换成hive表结构的脚本
  10. paip.提升安全性-------生成一个安全的验证码
  11. Unity 3D DevLog-WebGL
  12. 小程序 搜索结果关键字标红(支持拼音)
  13. Office在线预览-永中
  14. python mql4_使用MQL5将OHLC值从Python API集成到MT5
  15. Flash播放器常用参数设置_应用技巧
  16. Python批量将TXT文件转为Excel格式
  17. html表格筛选排序规则,excel表格的排序规则与排序技术
  18. C++学习笔记4:编程练习一
  19. java象棋代码注释_中国象棋程序的设计与实现(十一)--棋盘绘制算法(尽管注释非常详细,完全理解仍有难度)...
  20. 虚拟机没有USB网卡选项怎么解决

热门文章

  1. 成功解决Type Error: can‘t multiply sequence by non-int of type ‘float‘
  2. CV之IS:计算机视觉之图像分割(Image Segmentation)算法的挑战任务、算法演化、目标检测和图像分割(语义分割/实例分割/全景分割)的对比
  3. DL之DNN优化技术:DNN优化器的参数优化—更新参数的四种最优化方法(SGD/Momentum/AdaGrad/Adam)的案例理解、图表可视化比较
  4. Crawler:爬虫基于urllib.request库实现获取指定网址上的所有图片
  5. CV:利用cv2+dlib库自带frontal_face_detector(人脸征检测器)实现人脸检测与人脸标记之《极限男人帮》和《NBA全明星球员》
  6. 【数据库】分库分表策略
  7. as3.0用了视频组件,导致视频打开后就全屏,加一下代码就行
  8. bzoj1951 组合数取模 中国剩余定理
  9. Netty对Protocol Buffer多协议的支持(八)
  10. 最小圆覆盖(Smallest Enclosing Discs)