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
