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