php代码审计实战(一)

今天药忘吃喽~ 2022-10-12 14:59 271阅读 0赞

前言:这套漏洞好水,为什么审他呢?原因是虽然一直挖漏洞 也用白盒摸出过不少洞,但是还没有彻彻底底的通审过一套系统
所以就找了套简单的摸摸鱼

源码:熊海CMS_1.0

安装方法:这里是用宝塔直接搭建的

①数据库
需要宝塔建立一个数据库导入那个数据库文件就好了
然后安装的时候输入的数据库,账户,密码跟宝塔的数据库是一样的就好了
②php版本问题:需要将php设置为5.6才可以进行运行
且注意:如果无法运行<?php phpinfo(); ?>需要去查看短标签和php配置禁用函数

审计过程

看个人习惯和时间去确定自己的审计方法吧
我的话

  1. 快审的话:
  2. 1.过一遍功能点,然后猜存在的漏洞,找到对应的代码进行审计
  3. 2.直接seay这些审计系统通审一遍,一个一个去逆推细审。
  4. 慢审:
  5. 通审全部代码,这种最好的就是可以审到别人审不到的逻辑漏洞

这里因为学习为主,所以选择的方式是通审
①目录结构
在这里插入图片描述

前台

index.php入口文件
漏洞
①任意文件包含

  1. 发觉这里是通过r这个值来判断接受的文件名字-->然后直接包含在include里面
  2. r这个值可控
  3. 利用条件:必须在该文件的什么目录下拥有相应的文件,才可以拿到shell

在这里插入图片描述
复现
在files目录下建立一个shell文件
文件内容为<?php phpinfo();?>
在这里插入图片描述

接着通读files/index.php文件
简单的分为三部分
php部分:包含三个文件是简单的2个功能 第一个包含文件里面啥都无,第二个文件是作为获取数据库文件值即进行简单的连接,第三个文件是获取当前时间的
一个外部实体声明
html里面:写死了几个sql查询语句即查询功能的含义,其他的话就是简单的展示功能模块,没啥东西
所以重点看php的包含部门
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzOTQyMDQw_size_16_color_FFFFFF_t_70 3
很简单的处理逻辑,可能mysql_error可能会导致一些问题
但是先不急,先跟踪到die()命令中的/install模块去看看
在这里插入图片描述
install模块里面只有一个index.php文件
一样也是分为三个部分
php处理部分,外部实体模块部分,html展示部分
php里面的逻辑
这里简单说一下

根据是否存在InstallLock.txt文件来进行判断是否成功安装,如果安装即退出

在这里插入图片描述

然后写完后即向InstallLock.txt文件中写入内容防止重复安装的情况出现.
这里防止了重装的这个漏洞情况

html的内容就不说了 就一个简单的展示功能

自此安装与整个数据库连接的模块就到此结束,只有一个任意文件包含的漏洞

又回头了
回头看files/index.php模块,看里面的html内容
获取一些基础的title这些东西,然后加载头文件模块和body内容
尾文件模块

在这里插入图片描述
header模块里面没啥东西
在这里插入图片描述
就是一个获取页面的
利用这玩意来获取标签
在这里插入图片描述
跟数据库里面的内容相关的这个中间的
界面对应就这样

在这里插入图片描述

接着跟踪吧,因为header里面的头是写死了的,所以这里直接跟踪这个
在这里插入图片描述
即对应这些功能点–>翻数据库可以看的到
在这里插入图片描述

r=about
r=list
这些
这些功能点的php里面倒是有些sql可控的参数
但是被addslashes过滤了 绕的话太麻烦了
在这里插入图片描述
回到files/index.php里面接着审
发觉就是传数据库的值的
没啥东西
自此整个前台的洞就审完了

接着去审后台的洞

后台

一样的道理 从admin/index.php入手
又是一个文件包含
在这里插入图片描述
直接包含

在这里插入图片描述
然后接着摸admin/files/index.php这个文件
和前台的差不多
就是多了一些js文件的包含而已
在这里插入图片描述
老规矩接着审包含的文件
这玩意就是一个checklogin.php 然后就连接

在这里插入图片描述
而对于这个这里就简单的判断了下cookie是否为空
这不是又是一个漏洞吗?
登录绕过
在这里插入图片描述
在这里插入图片描述

然后接着审

top.php这些文件
在这里插入图片描述
这不是又是一个sql注入
在这里插入图片描述
接着审
?r=manageinfo和?r=outlogin
manageinfo这个逻辑挺简单的–>一样也要经过checklogin.php文件判断 绕就完事

存入需要更改资料的值
然后对2次输入的密码判断是否相同和文件传输进行判断
最后通过判断后更改该资料的值
在这里插入图片描述
这里重点分析处理图片上传的机制
大概就是先获取上传的名字
然后在判断最开始文件的名字是否为空 为空的话即进入到里面进行上传
然后获取上传文件的名字与将密码加密为md5的

在这里插入图片描述

r=outlogin
即将cookie设置为0
在这里插入图片描述
接着审header.php
这里面没啥东西 sql语句几乎都写死了的
siderbar.php
就一个输出内容的
审这些文件就完事
在这里插入图片描述
newwz.php文件
又是一堆sql注入

在这里插入图片描述

除了内容有简单的过滤外
其他的内容全是直接就插进去的

在这里插入图片描述
且插入后会进行一次query判断是否插入成功
在这里插入图片描述

newsoft.php也是一样
在这里插入图片描述
wzlist
一样直接拼接query

在这里插入图片描述
在这里插入图片描述
softlist
一样的情况
在这里插入图片描述

newcolumn.php,conlumnlist,newlink,linklist,commentlist,siteset,seniorset,imageset这几个文件几乎都是一样的问题 插入或者删除的时候没有进行任何过滤 全都有sql注入
在这里插入图片描述
审到这里大部分的漏洞就审的差不多了

不过也要回过头去看看login这个文件
因为cookie可以伪造 所以就一直没分析他
login.php
漏洞
①开局送sql注入

在这里插入图片描述
user没进行任何过滤,注就完事

在这里插入图片描述

②password通过MD5进行比较的
在这里插入图片描述
可以绕过

对这套cms的审计差不多到这里就结束了

大概的漏洞点

  1. ①两个文件包含
  2. ②后台登录绕过
  3. sql注入-->无数个

当然这里面肯定还有一堆的xss漏洞 因为全局没有经过任何过滤
但是懒得审了,xss审出来也挺简单的

反向审:直接搜echo语句,从输出的点然后回头看相关的变量是否有过滤
正向审:看存储没有过滤的变量是否在其他地方输出

修复方法的话

  1. sql注入的话
  2. mysql_real_escape_string进行过滤就好了
  3. ②登录绕过的话 更改判定方式吧 这玩意不是很好修
  4. ③文件包含 写死自己要包含的文件
  5. 然后根据返回的key进行修复

发表评论

表情:
评论列表 (有 0 条评论,271人围观)

还没有评论,来说两句吧...

相关阅读

    相关 php代码审计之phpcms

    这个难度比上一个要难一点,起码代码审计工具没有扫描出来特别简单的漏洞。用来是因为我下载的是修复版本的。。。。不过继续审计啊! 1.可能出现目录穿越的地方 出现了正则表达式限定

    相关 php代码审计(2)

    这个语言怎么这么没有节操。。我感觉它是什么框架都有自己的特色,然后特色多起来自成一派加入新版本里去了就。框架还好几个。大杂烩啊。不愧是脚本语言。 今天发现我太蠢了,应该跟着w