当前位置: 首页 > article >正文

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>/*  ;但不知道怎么就发布不成功。很奇怪!

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


http://www.kler.cn/a/445256.html

相关文章:

  • 阿里云百炼大模型生成贪吃蛇小游戏
  • 【服务器】MyBatis是如何在java中使用并进行分页的?
  • 安装opnet14.5遇到的问题
  • 排序算法(3)——归并排序、计数排序
  • 如何通过HTTP API新建Collection
  • 记一次mysql故障排除和硬盘扩容
  • 打靶记录22——Tomato
  • workman服务端开发模式-GatewayWorker的使用
  • JNDI基础
  • 【Threejs】从零开始(八)--贴图
  • list的常用操作
  • SQL server学习08-使用索引和视图优化查询
  • 使用Python开发高级游戏:创建一个3D射击游戏
  • C# OpenCV机器视觉:边缘检测
  • AI、大数据、机器学习、深度学习、神经网络之间的关系
  • 视频及JSON数据的导出并压缩
  • 数据库高可用性与容灾
  • 【k8s集群应用】kubeadm1.20(单master)
  • 电脑玩《刺客信条》时中,遇到找不到d3dx9_42.dll的问题是什么原因?缺失d3dx9_42.dll应该怎么解决呢?下面一起来看看吧!
  • 如何用细节提升用户体验?
  • 第33天:安全开发-JavaEE应用SQL预编译Filter过滤器Listener监听器访问控制
  • 配置flutter 解决andriod studio报错 no device selected
  • 揭秘语言模型后训练:指令微调、偏好调优与强化学习的深度解析
  • AdminJS - 现代化的 Node.js 管理面板框架详解
  • 【系统架构设计师】真题论文: 论数据分片技术及其应用(包括解题思路和素材)
  • 在THREEJS中加载3dtile模型