php代码审计实战(一)
前言:这套漏洞好水,为什么审他呢?原因是虽然一直挖漏洞 也用白盒摸出过不少洞,但是还没有彻彻底底的通审过一套系统
所以就找了套简单的摸摸鱼
源码:熊海CMS_1.0
安装方法:这里是用宝塔直接搭建的
①数据库
需要宝塔建立一个数据库导入那个数据库文件就好了
然后安装的时候输入的数据库,账户,密码跟宝塔的数据库是一样的就好了
②php版本问题:需要将php设置为5.6才可以进行运行且注意:如果无法运行<?php phpinfo(); ?>需要去查看短标签和php配置禁用函数
审计过程
看个人习惯和时间去确定自己的审计方法吧
我的话
快审的话:
1.过一遍功能点,然后猜存在的漏洞,找到对应的代码进行审计
2.直接seay这些审计系统通审一遍,一个一个去逆推细审。
慢审:
通审全部代码,这种最好的就是可以审到别人审不到的逻辑漏洞
这里因为学习为主,所以选择的方式是通审
①目录结构
前台
index.php入口文件
漏洞
①任意文件包含
发觉这里是通过r这个值来判断接受的文件名字-->然后直接包含在include里面
且r这个值可控
利用条件:必须在该文件的什么目录下拥有相应的文件,才可以拿到shell
复现
在files目录下建立一个shell文件
文件内容为<?php phpinfo();?>
接着通读files/index.php文件
简单的分为三部分
php部分:包含三个文件是简单的2个功能 第一个包含文件里面啥都无,第二个文件是作为获取数据库文件值即进行简单的连接,第三个文件是获取当前时间的
一个外部实体声明
html里面:写死了几个sql查询语句即查询功能的含义,其他的话就是简单的展示功能模块,没啥东西
所以重点看php的包含部门
很简单的处理逻辑,可能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的审计差不多到这里就结束了
大概的漏洞点
①两个文件包含
②后台登录绕过
③sql注入-->无数个
当然这里面肯定还有一堆的xss漏洞 因为全局没有经过任何过滤
但是懒得审了,xss审出来也挺简单的
反向审:直接搜echo语句,从输出的点然后回头看相关的变量是否有过滤
正向审:看存储没有过滤的变量是否在其他地方输出
修复方法的话
①sql注入的话
用mysql_real_escape_string进行过滤就好了
②登录绕过的话 更改判定方式吧 这玩意不是很好修
③文件包含 写死自己要包含的文件
然后根据返回的key进行修复
还没有评论,来说两句吧...