问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
实战-SRC从入门到精通超详细分析
前言 最近也是在学挖src,也准备分析一下自己的挖掘过程思路。在平时的挖掘src过程中,百分之99都是遇见的是登录框,一般思路都是测弱口令啊,登录框测sql啊,熊猫头识别接口拼接测试未授权啊,...
未经授权 不得转载 ========= 前言 == 最近也是在学挖src,也准备分析一下自己的挖掘过程思路。在平时的挖掘src过程中,百分之99都是遇见的是登录框,一般思路都是测弱口令啊,登录框测sql啊,熊猫头识别接口拼接测试未授权啊,忘记密码处修改返回包等等这些思路,这里我的思路也是大同小异。 首先思路肯定是后台漏洞挖掘出洞概率肯定是大于前台的,白盒漏洞挖掘肯定是大于黑盒的,所以这里一般开始挖src的师傅肯定是用资产测绘去寻找存在注册接口的站进行挖掘,但是这种漏洞肯定是被挖干净了的,但不忽略还有一些站它的注册接口是没用在页面上面的,需要我们自己在js里面查找。 寻找隐藏注册接口接入后台测试 ============== 登录框起手,测弱口令,sql注入没有发现问题,到这里大概就是去找未授权接口了,看了下熊猫头,也是没有几个接口(熊猫头也有可能没找完),然后就想找下有没有注册接口,注册一个账号进去测越权,xss等等漏洞  在js里面搜了下常用的注册接口名字,啥都没有(这里之所以搜不到就是因为js使用了异步加载),然后想到了转子女神  没想到真的跑出来了一个注册接口   注册进去发现是教师培训的,打开我的资料一开始在这测了下xss,发现并不会解析,但是保存资料的时候,发现它的数据包有个参数是一卡通号,这里就可以想到越权了   再注册一个号,把YKTJH改为小花的一卡通号  修改成功(只要有一处越权,那肯定还有很多处,毕竟开发是同一个人,逻辑不会变的)  这里有发现一个证书上传的地方,一开始还以为要getshell了,后面发现白名单限制了,只能jpg或png  数据包:  这个id就是上传证书的位置,改它就可以随便上传图片到别人账户上面  这里记录一下小花的id为928  另外一个号id为872  直接改872为928 发包 就成功上传了照片到别人账号上面 这里一个预约入口,有输入框,先测xss  到后台自己的预约记录,成功触发  再看看数据包,发现也存在一个eEKTH参数,直接修改它,就可以帮他人预约了,再结合xss,可以让全站的用户弹窗,还是有危害的  寻找未授权接口 ======= 这是一个web网站,我用熊猫头发现了很多接口,然后用burp跑了一遍,发现了一些未授权接口  这里就可以查看用户信息  还有一个添加用户的接口,全局搜它的参数构造情况  添加成功  也有一个删除用户的接口  然后用创建好的用户进入后台 发现一个文件下载功能  尝试任意文件下载  文件上传接口打存储型xss   遇见没有验证码限制的登录框 遍历漏洞 ==== 很多网站在创建或者删除文件时都会在url后面加一个数字,这种情况也极大概率出现未授权 比如说下面这个,这是一个添加收获地址的功能点,添加好以后会返回一个数字,这个应该就是添加的地址编号,这种就可以尝试遍历后面的数字进行越权测试  最后也是成功遍历所有人的收获地址和电话号码   还有就是路径遍历漏洞,在平时访问接口时,可以试着删除一些后面的路径,看看有没有意外的收获 这里我就说删除了一些路径从而发现有文件可以下载   不放过任何一个参数 ========= 先看一个正常的sql注入位置,这里是个对正常的post参数进行的sql注入  也很顺利,没过滤,用报错注入就可以了   再来看着下面这个登录框数据包,大家可能平时就测测username和password那有没有sql注入,但是Cookie那会被很多人给忽视,这里就是在cookie那发现的sql注入  最后发现是sqlserver数据库,直接拿了shell   供应链 === 一般在只有一个登录框经过上述方法一系列测试均无果的时候就可以打一下供应链安全,这个攻击手法成功率还是比较高的,主要思路还是利用互联网使用同一系统的站会有很多,这个时候就可以利用资产测绘去收集相应的IP,进行测试,一般都是利用弱口令进后台,然后拿权限拖源码,进行白盒审计前台漏洞,当然如果是开源系统那更加方便了,或者在后台收集未授权接口进行利用 白盒审计 ---- 这里举例一个开源的信呼OA  漏洞文件:webmain/task/api/uploadAction.php 这里如何判断是否鉴权这篇文章写的超级详细还有怎么构造路由<https://xz.aliyun.com/news/18575> 这里是没有鉴权的  代码如下: ```php public function upfileAction() { if(!$_FILES)exit('sorry!'); $upimg = c('upfile'); $maxsize= (int)$this->get('maxsize', $upimg->getmaxzhao());//上传最大M $uptypes= '*'; $updir = $this->get('updir'); if(isempt($updir)){ $updir=date('Y-m'); }else{ $updir=str_replace(array(' ','.'),'', trim($updir)); $updir=str_replace('{month}',date('Y-m'), $updir); $updir=str_replace('{Year}',date('Y'), $updir); $updir=str_replace(array('{','}'),'', $updir); $updir=str_replace(',','|', $updir); } $upimg->initupfile($uptypes, ''.UPDIR.'|'.$updir.'', $maxsize); $upses = $upimg->up('file'); if(!is_array($upses))exit($upses); $arr = c('down')->uploadback($upses); $arr['autoup'] = getconfig('qcloudCos_autoup') ? 1 : 0; //是否上传其他平台 $this->returnjson($arr); } ``` 主要作用就是把上传成功后会把返回的 `$upses`(也就是文件名字) 交给uploadback方法处理 跟进一下uploadback方法 代码如下: ```php public function uploadback($upses, $thumbnail='', $subo=true) { if($thumbnail=='')$thumbnail='150x150'; $msg = ''; $data = array(); if(is_array($upses)){ $noasyn = $this->rock->get('noasyn'); //=yes就不同步到文件平台 $noyaso = $this->rock->get('noyaso'); //=yes就不压缩 $fileext= substr($upses['fileext'],0,10); $arrs = array( 'adddt' => $this->rock->now, 'valid' => 1, 'filename' => $this->replacefile($upses['oldfilename']), 'web' => $this->rock->web, 'ip' => $this->rock->ip, 'mknum' => $this->rock->get('sysmodenum'), //'mid' => $this->rock->get('sysmid','0'), 'fileext' => $fileext, 'filesize' => (int)$this->rock->get('filesize', $upses['filesize']), 'filesizecn'=> $upses['filesizecn'], 'filepath' => str_replace('../','',$upses['allfilename']), 'optid' => $this->adminid, 'optname' => $this->adminname, 'comid' => m('admin')->getcompanyid(), ); $arrs['filetype'] = m('file')->getmime($fileext); $thumbpath = $arrs['filepath']; $sttua = explode('x', $thumbnail); $lw = (int)$sttua[0]; $lh = (int)$sttua[1]; //判断是不是需要压缩jpg和jpeg $compress = getconfig('imgcompress'); if($compress && $noyaso!='yes' && ($fileext=='jpg' || $fileext=='jpeg') && $upses['picw']>0 && $upses['pich']>0){ $sttuc = explode('x', $compress); $yw = (int)$sttuc[0]; $yh = (int)arrvalue($sttuc, 1, 0); if($upses['picw'] > $yw || $upses['pich'] > $yh){ $imgac = c('image', true); $imgac->createimg($thumbpath); $yspaht = $imgac->compress($yw, $yh); if($yspaht){ if($thumbpath != $yspaht)unlink($thumbpath); $thumbpath = $yspaht; $arrs['filepath'] = $yspaht; $arrs['filesize'] = filesize($yspaht); $arrs['filesizecn'] = $this->upobj->formatsize($arrs['filesize']); } } } if($upses['picw']>$lw || $upses['pich']>$lh){ $imgaa = c('image', true); $imgaa->createimg($thumbpath); $thumbpath = $imgaa->thumbnail($lw, $lh, 1); } if($upses['picw'] == 0 && $upses['pich']==0)$thumbpath = ''; $arrs['thumbpath'] = $thumbpath; $bo = $this->db->record('[Q]file',$arrs); if(!$bo)$this->reutnmsg($this->db->error()); $id = $this->db->insert_id(); $arrs['id'] = $id; $arrs['picw'] = $upses['picw']; $arrs['pich'] = $upses['pich']; $data= $arrs; //上传到上传的文件管理2021-08-09 if(getconfig('rockfile_autoup') && $noasyn != 'yes'){ $stime = time()+rand(3,6); if($subo)$stime=0; c('rockqueue')->push('flow,uptofile', array('fileid'=>$id), $stime); } //自动上传到腾讯云存储 if(getconfig('qcloudCos_autoup') && $noasyn != 'yes'){ $stime = time()+rand(3,6); if($subo)$stime=0; c('rockqueue')->sendfile($id, $stime); } }else{ $data['msg'] = $upses; } return $data; } ``` 在 `uploadback` 里,文件名是这样取的: ```php 'filename' => $this->replacefile($upses['oldfilename']), ``` `oldfilename` 就是上传时 `$_FILES['file']['name']`(也就是请求里 `filename="..."` 的值)。所以用户控制的 **文件名** → `$upses['oldfilename']` → `arrs['filename']`。 ```php $bo = $this->db->record('[Q]file',$arrs); ``` 后面又传给了recode方法 跟进一下  再跟进  这里就把传入的文件名字插入到了数据库里面 漏洞验证:  黑盒挖掘 ---- 这里的思路主要是通过后台接口进行未授权的漏洞挖掘,因为有时候前台的js文件里面加载的路由比较少,但是后台会加载所有后台路由,这里就会提供大量接口给我们进行测试,增加出洞概率。 就比如说这个系统  正常来说弱口令进不去,前台js也是一个都没有  这里的挖掘思路就是通过弱口令进入相同系统的站,在它的站后台对js里面的路由进行信息收集,获取大量接口,再回过头来使用收集好的接口进行未授权的测试 这里我成功进入了一个站的后台搜索了一下路由,也是发现了很多  随后我利用收集到的路由再对目标网站进行测试就发现了两个个未授权获取用户信息的接口   还有一个站我也是用了同样的方法进行未授权测试,然后发现了全站用户账号密码,这里的二级域名不进后台根本就找不到  用管理员账号进入后台,接管全站 权限的绕过 ===== 很多java写的站都会存在;来进行权限绕过 这篇文章写的很详细<https://mp.weixin.qq.com/s/ogqUImVKs1IcvIDrAl0Bow> 举个例子: 比如说下面这个路由就无法被访问  但是加了;后就绕过了,获取了8w条数据  产生这个漏洞的原因主要是利用了 getRequestURI这个方法,因为我们传入的URI中`;`进行截断处理,也就是说经过处理之后,返回的结果变成了`/infex-qn/`,由于我们传入的 **URI** `/infex-qn/`与权限认证的 **URI** `/infex-qn/**`不匹配,绕过了权限验证之后,进入 **springboot** 当中进行路由分发,从而获取到后台接口内容 操作参数 ==== 在渗透过程中对参数进行操作,有时候也是起着至关重要的的作用 比如说一个短信轰炸漏洞  它的数据包长这样  就是正常发送验证码它是显示账号不存在的,但是仔细观察参数就会发现有个type=teacher\_login 说明这个是老师登录的,那我把它置空会怎么样呢?  发包成功了,接下来我一直发包,成功造成短信轰炸  还比如说下面这种:这里正常请求是没用数据的,但是我把json数据都删除了看看会怎么样?  没想到居然回显了1w+数据  总结 == 总而言之,在挖掘SRC的过程中我觉得前台漏洞挖掘的话主要还是对js进行路由的信息收集,还有就是要多去修改一下参数,比如说测sql,那就每一个包,每一个参数包括cookie,XFF头这些啊,都得去尝试,对于一些无回显的数据,置空参数,或者用一些权限绕过手段尝试,实在不行就供应链攻击,这个危害是最大的,hw基本都是这样在外网撕的口子,还有一些js逆向等等。
发表于 2025-10-14 09:00:02
阅读 ( 752 )
分类:
渗透测试
6 推荐
收藏
0 条评论
请先
登录
后评论
Werqy3
7 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!