PHP代码审计学习--zzcms8.1

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还有好几处,感觉对于代码这块真是很没有耐心去看。但通过对别人复现的还是自己理解的,多练习,学习,应该能学点东西吧。加油!!!

相关推荐
*濒危物种*2 分钟前
Python字典使用练习-----实现查找电话号
开发语言·python
菠萝炒饭pineapple-boss8 分钟前
全局JDK环境和ES自带的JDK混用导致的ES集群创建失败
开发语言·elasticsearch
xcLeigh28 分钟前
网络安全 | 入门:理解基本概念和术语
安全·web安全·php
楠木s1 小时前
JNDI基础
java·开发语言·网络攻击模型·哈希算法·安全威胁分析
西猫雷婶1 小时前
python学opencv|读取图像(十七)认识alpha通道
开发语言·python·opencv
十年一梦实验室1 小时前
【C++】sophus : se2.hpp 提供了SE(2)群的数学操作和Lie群的基本操作 (十五)
开发语言·c++·人工智能·算法·机器学习
IH_LZH1 小时前
计算机网络面经总结
java·开发语言·网络·网络协议·tcp/ip·计算机网络
非凡的世界1 小时前
Go web 开发框架 Iris
开发语言·golang·iris
web150850966411 小时前
前端TypeScript学习day01-TS介绍与TS部分常用类型
前端·学习·typescript
两水先木示1 小时前
【LuaFramework】LuaFramework_UGUI_V2框架学习
学习·unity·lua·luaframework·tolua