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

相关推荐
草莓熊Lotso5 分钟前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
李纲明7 分钟前
WordPress 媒体库上传失败或一直转圈:先核 PHP 上传限制与目录权限,再查安全插件与对象存储
运维·开发语言·安全·php·wordpress·媒体库·devdiy
第九序言T8 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
龙亘川10 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人10 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
Raas10010 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin11 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
专注仿真11 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法
ESDWAN11 小时前
企业网络监控应该监测哪些目标?网关、网络节点还是业务系统?
服务器·网络·php
apple-mapping12 小时前
网络RTK定位学习总结
学习·网络rtk