ZZCMS v8.2代码审计入门
zzcms8.2
链接:https://pan.baidu.com/s/1NHAcGAX2C3dG2zWVvej7hw
提取码:tatj
0x00查看目录结构
*********************************
* *
* ZZCMS产品版目录结构 *
* *
*********************************
/install 安装程序目录(安装时必须有可写入权限)
/admin 默认后台管理目录(可任意改名)
/user 注册用户管理程序存放目录
/skin 用户网站模板存放目录;更多用户网站模板可从http://www.zzcms.net/skin.asp 下载
/template 系统模板存放目录;更多系统模板可从http://www.zzcms.net/template.asp 下载
/inc 系统所用包含文件存放目录
/area 各地区显示文件
/zs 招商程序文件
/dl 代理
/zh 展会
/company 企业
/job 招聘
/zx 资讯
/special专题
/pp 品牌
/wangkan 网刊
/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文件存放目录
/flash 展厅用透明flash装饰动画存放目录
/js js文件存放目录
/html 静态页存放目录
/favicon.ico 地址栏左侧小图标文件
/web.config 伪静态规则文件for iis7(万网比较常用)
/httpd.ini 伪静态规则文件for iss6
/.htaccess 伪静态规则文件for apache
0x01 了解大概结构
寻找名称里有没有带有api、admin、manage、include一类关键字的文件和文件夹,通常这些文件比较重要,在这个cms中主要是inc,admin,user,这三个目录,其中inc是主要的系统包含文件,其中,config.php为配置文件, function.php功能函数文件, stopsqlin.php过滤文件以及其他文件通过conn.php文件包含在一起,conn.php文件还负责检测是否安装,以及数据库的连接。 admin为管理员文件,uesr为注册用户的功能文件
/inc/stopsqlin.php
代码
zc_check函数过滤了GET、POST、COOKIE请求中的sql注入和xss,这个函数是将$_REQUEST请求通过函数过滤,再重新给$_POSE、$_GET、$_COOKIE赋值,但掉了其本身的$_REQUEST请求。
测试代码
测试结果
通过post请求的fname参数单引号被过滤,但是用$_REQUEST请求的fname参数单引号没被过滤,所以可以通过查找相关request请求的参数来进行SQL注入。
0x02 网站重装
/install/index.php
打开/install/index.php
其判断是否安装的代码是在第一步(54行)
跟进一下
如果把请求参数$step=2则可以绕过检测
0x03 万能密码
/user/index.php文件
有个check.php文件,打开发现是检测用户是否登录的
代码
可以看到这个文件没有包含conn.php文件,所以其获得变量未经过过滤,第七行将$_COOKIE["UserName"]变量过滤了,后面的SQL语句对$_COOKIE["PassWord"]进行了直接调用,所以可以做个万能密码登入
测试
我们直接请求/user/index.php
当密码错误时会跳转至登录页面,我们试一下万能密码
0x04 SQL注入
/user/index.php文件
测试
上面的万能密码,我们还可以通过这个参数来做时间盲注
所以只要包含check文件的页面请求中的PassWord参数都有SQL注入的风险。
/user/adv.php文件
继续查看user下的文件,打开/user/adv.php发现36行-66行的参数全部是用$_REQUEST方式请求的,而且下面紧接着就是数据库请求(96行),还是带参数的那种,这不是巧了吗,这不是,不测都对不起程序猿小哥。
代码
测试
只测试了$adv参数,如下
搜索$_REQUEST[" 相关文件也不少
/user/login.php
继续查看user目录,到/user/login.php文件,有个sql语句中有个$ip是通过getip()函数获取的
代码
跟进这个getip()函数
测试
发现是通过HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR、REMOTE_ADDR获取的,所以我们用X_FORWARDED_FOR试一下
0x05 文件上传
uploadflv.php
查看根目录下的uploadflv.php文件,发现如下几个检测方式。
代码
测试
第一个是检测type类型(修改Content-Type),第二个是检测文件名后缀(phtml后缀没有被过滤),第三个是检测文件内容获取文件大小(通过加GIF89a绕过)
上传成功后发现怎么也解析不了文件,后来发现是PHP study没有设置好,具体方式是打开phpstudy->其他选项菜单->打开配置文件->httpd-conf,搜索phtml把那个注释符删去重启就可以了
0x06 任意文件删除
这个可以通过搜索unlink函数,快速查一下
/user/adv.php
打开/user/adv.php文件
代码
很明显的文件删除,只要$action=modify,$oldimg不等于$img,就会删除$oldimg文件
测试
/admin/dl_data.php
还有一个在/admin/dl_data.php文件,第22行
代码
测试
*未经允许禁止转载!
参考文章:
https://www.cnblogs.com/wangtanzhi/p/12320922.html