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

相关推荐
Scott9999HH7 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社8 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海8 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨10 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a11177611 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao11 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区12 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大12 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai12 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang