1、前言
学习前人审计思路逐步锻炼php审计能力。
源码下载:http://www.zzcms.net/about/6.htm
源码放入phpstudy中配置好网站访问/install进行安装。
2、审计学习
审计之前,了解一下目录文件,了解站点目录结构:
/install 安装程序目录(安装时必须有可写入权限) /admin 默认后台管理目录(可任意改名) /user 注册用户管理程序存放目录 /skin 用户网站模板存放目录; /template 系统模板存放目录; /inc 系统所用包含文件存放目录 /area 各地区显示文件 /zs 招商程序文件 /pp 品牌 /dl 代理 /zh 展会 /company 企业 /job 招聘 /zx 资讯 /special专题 /ask 问答 /zt 注册用户展厅页程序 /one 专存放单页面,如公司简介页,友情链接页,帮助页都放在这个目录里了 /ajax ajax程序处理页面 /reg 用户注册页面 /3 第三方插件存放目录 /3/ckeditor CK编缉器程序存放目录 /3/alipay 支付宝在线支付系统存放目录 /3/tenpay 财富通在线支付系统存放目录 /3/qq_connect2.0 qq登录接口文件 /3/ucenter_api discuz论坛用户同步登录接口文件 /3/kefu 在线客服代码 /3/mobile_msg 第三方手机短信API /3/phpexcelreader PHP读取excel文件组件 /cache 缓存文件 /uploadfiles 上传文件存放目录 /dl_excel 要导入的代理信息excel表格文件上传目录 /image 程序设计图片,swf文件存放目录 /js js文件存放目录 /html 静态页存放目录 /web.config 伪静态规则文件for iis7(万网比较常用) /httpd.ini 伪静态规则文件for iss6 /.htaccess 伪静态规则文件for apache nginx.conf
漏洞类型一:重装漏洞
安装时我们访问的是install目录访问index.php
观察当步骤来到1时(step=1)访问的是step.php文件,我们查看该文件;会去检查install.lock文件是否存在,存在的话说明已安装完成无需安装。
那么我们是不是可以跳过第一个步骤直接进入第二个步骤也就是step2去完成重新安装,从而促成重装漏洞;我们查看step1.php文件后面看到step是post传参,那么我们就控制该参数直接为2;step=2;跳过步骤一进行重装。
漏洞类型二:XSS漏洞
位置1:uploadimg_from.php
搜索$_GET发现有两个参数可控,但这是后端,我们需要知道参数前端入口在哪;分析该文件发现需要登录才能查看。
那么我们登录后访问uploadimg_form.php;查看源码发现了参数imgid和参数noshuiyin后端的代码我们没有看到包含那些php文件进行处理且是直接echo的,所以我们可以直接利用前端的html进行value值闭合来触发xss_payload;
http://www.zzcms.com:8000/uploadimg_form.php?noshuiyin="><script>alert(document.cookie)</script>/*
http://www.zzcms.com:8000/uploadimg_form.php?imgid="><script>alert(/xss/)</script>/*
位置2:/admin/ad_manage.php
看到这个文件中输入的keyword的值通过value直接进行了输出,我们访问看看;查看到keyword那么我们可以直接构造payload:"><script>alert(document.cookie)</script>/*
位置3:/ask/asdadd.php
这边我们可以看到query将很多的数据插入到了数据库中,其中其他的参数都是使用函数trim去除两边空格,但conten还使用了replace函数使用单引号替代空格,以及自定义取反斜杠;那么我们就可以直接使用我们之前的payload;"><script>alert(/xss/)</script>/* ;但不知道怎么就发布不成功。很奇怪!
php
$title=trim($_POST["title"]);
$content=str_replace("'","",stripfxg(trim($_POST["content"])));
$img=getimgincontent($content);
if ($title<>''){
$isok=query("Insert into zzcms_ask(bigclassid,bigclassname,smallclassid,smallclassname,title,content,img,jifen,editor,passed,sendtime) values('$bigclassid','$bigclassname','$smallclassid','$smallclassname','$title','$content','$img','0','未登陆用户',1,'".date('Y-m-d H:i:s')."')");
}
if ($isok){
echo showmsg('发布成功,审核后显示。');
}else{
echo showmsg('发布失败!');
}
位置4:/admin/help_manage.php(存储型XSS)
插入数据,前端进行点击即可触发。
漏洞类型三:SQL注入漏洞
位置:/admin/help_manage.php
我们看到有这几个参数都是前端可控查看下面的sql执行
我们访问/admin/help_manage.php并添加几个数据,完了我们就能看到参数b;
使用and 1=1和and 1=0判断判断是否存在注入
存在注入,我们可以直接使用union联合注入发现存在7列,返回一个数据库名称即可
3、总结
整体只是找了部分,比如sql注入和xss还有好几处,感觉对于代码这块真是很没有耐心去看。但通过对别人复现的还是自己理解的,多练习,学习,应该能学点东西吧。加油!!!