zzcms审计

phpstyduy安装

1.安装PHPstudy 以及VC9和VC11环境

2.切换phpstudy版本至PHP-5.6.27

3.修改站点域名和host文件

4.phpstudy--其他选项菜单---mysql工具---设置或修改密码

phpstorm安装

phpstorm设置

file----setting--languages&frameworks---php

添加 选取本地

找到debug路径

配置PHP.ini

phpstudy--打开配置文件---PHP.ini

[XDebug]

xdebug.profiler_output_dir="C:phpStudy mpxdebug"

xdebug.trace_output_dir="C:phpStudy mpxdebug"

zend_extension="C:phpStudyphpphp-5.6.27-ntsextphp_xdebug.dll"

;zend_extension="C:phpStudy20161103phpphp-5.6.27-ntsextphp_xdebug.dll"

xdebug.remote_enable = On

xdebug.remote_host="127.0.0.1"

xdebug.remote_port=9001

xdebug.remote_handler=dbgp

xdebug.idekey="PHPSTORM"

xdebug.profiler_enable = off

xdebug.profiler_enable_trigger = off

xdebug.profiler_output_dir ="c:/wamp64/tmp"

xdebug.show_local_vars=0

xdebug.profiler_output_dir="C: mp"

在PHPstorm中进行配置Xdebug插件(与php.ini相对应)

file---settings--languages& frameworks--php--debug 设置端口9001

填写dbgp proxy(与php.ini对应)

配置SERVER localhost

配置运行时选项

配置如下 http://localhost/daima2.php

1.首先使用软件进行自动审计

2.跟据漏洞描述,进行漏洞排查,这里介绍ask.php

sql注入漏洞

只要我们可以控制cookie的内容,可以执行sql语句并将传递给$rs

使用burp抓包进行cookie注入

2.重装漏洞

查找源代码install/install.php

并未发现

安装向导已运行安装过,如需重安装,请删除 /install/install.lock 文件

字样。可能存在于包含文件。

command+左键进入该文件进行查找,均未发现

使用ctrl+shift +f进行全局查找

双击可以进入,回到index.php查看index.php如何调用step1的代码

发现相关代码 设置断点进行调试

调试至53行,$step仍为1  调试到第54行,代码跳转到step1.php页面

这是需要判断step是否为1,若为1,则执行srep1.php

若存在install.lock,则显示安装向导已运行安装过,如需重安装,请删除 /install/install.lock 文件

对index.php进行分析,查询$step

$step = isset($_POST['step']) ? $_POST['step'] : 1;

尝试抓取数据包修改为post类型,并指定为step2

放掉burp拦截,断点执行到11行,且显示step为2

进行到下一个断点 发现成功绕过

断点直接进入step2

成功绕过

储存型xss漏洞

zt/show.php 发现在256行存在stripfxg函数

该行的意思为拼接

stripfxg函数出现的地方,可能存在xss漏洞

(当strip的第二个参数为htmlspecialchars_decode为turl时,可以将htmlspecialchars处理的内容还原)

查找$gsjj是否打印出来,在源码中依次查询,发现第374行存在替换命令,赋给$strout ,并且$strout函数可以被打印

发现$gsjj函数为网页html信息,无法控制,我们判断56行中$content是否可以控制,若可以控制,便有机会制造xss

发现$content函数仅仅存在一次,那么$content可能存在包含文件中

在以下文件中找 command+左键进入文件进行搜索

top.php出现一个

这个时候要找$row被如何赋值

$row被$rs赋值

(fetch_array从结果集中取得一行作为数字数组或关联数组)

$rs为查询$sql的值

查找$sql

可判断出总体流程为

$sql="select * from zzcms_user where id='$id'";

$rs=query($sql);  执行查询

$row=fetch_array($rs);   遍历

$content=$row["content"];

$gsjj=$gsjj. stripfxg($content,true);   拼接

$strout=str_replace("{#gsjj}",$gsjj,$strout);  替换

echo  $strout;

接下来使用debug进行调试,验证流程

从show.php开始调试,一直到top.php第十七行,进行详细调试至25行,发现

查找变量$rs和$sql

因为数据库没有设置太多数据,将设置为id=1

调试进入35行

做后一步,控制content,有上述的流程可以得出,content可能是sql中数据库的内容

$sql="select * from zzcms_user where id='$id'";

有上述语句中,我们可以得出content可能在zzcms_user ,全局查找可以修改数据zzcms_user

update zzcms_user   或者    content

最后在admin/usermodify.php

query("update zzcms_user set usersf='$usersf',sex='$sex',email='$email',homepage='$homepage',comane='$comane',content='$gsjj',

由于content='$gsjj 在该文件找$gsjj,并未发现,查找包含文件admin.php同样未发现

本页源代码找不到,并且在文件包含的admin.php中也没有找到

该语句包含在if框架里进行折叠分析

折叠后发现该命令存在于65行中,而65行的if语句存在于49行的if判断语句中

根据上下文分析 发现

当用户存在

当$action==modify以及id有参数,¥Doundeer=0时流程可以执行下来

即在用户进行信息修改可以控制xss

抓包

继续上下文分析

manage.php包含了conn.php,进行断点调试

调用了stopsqin的非法参数检测函数

添加参数 asd=siteconfig.php



原文地址:https://www.cnblogs.com/bingtang123/p/15136364.html