漏洞发现的一些基础Tricks

403 阅读11分钟

概述

  1. 为什么要做漏洞发现?如果知道漏洞,就不用进行很多攻击,直接利用exp
  2. 漏洞类型&危害条件?知道危害条件就可以先做好准备,例如得到低权限shell等等,看他是权限提升漏洞还是什么漏洞,就可以方便我们达成目标
  3. 如何做好未卜先知?做好信息搜集

此部分包含四个部分:如下

操作系统

一般都通过指纹来识别操作系统,还有一个特别古早的方法:Linux分大小写但是Windows不分

WEB应用

其实都差不多的思路,首先去找公开漏洞,不行就自己审计。

已知 CMS

如常见的 dedecms,discuz,wordpress 等源码结构,这种一般采用非框架类开发,但也有少部分采用的是框架类开发,针对此类源码程序的安全检测,我们要

  • 利用公开的漏洞进行测试
  • 如不存在可自行搭建环境,采用白盒代码审计自行挖掘

开发框架

如常见的 thinkphp,spring,flask 等开发的源码程序,这种源码程序正常的安全测试思路:

  1. 先获取对应的开发框架信息(名字,版本),通过公开的框架类安全问题进行测试
  2. 如不存在可采用白盒代码审计自行挖掘

未知 CMS

如常见的企业或个人内部程序源码,也可以是某 CMS 二次开发的源码结构,针对此类的源码程序测试思路:

  1. 能识别二次开发就按已知CMS 思路进行
  2. 不能确定二次开发的话可以采用常规综合类扫描工具或脚本进行探针,也可以采用人工探针(功能点,参数,盲猜)
  3. 同样在有源码的情况下也可以进行代码审计自行挖掘

APP应用

一般来说,做了适应性的app都可以使用类似于web渗透的方法进行攻击,除非是采用特定的框架,采用非适应性(也就是用web浏览器打开不太行,不能做到适配,例如以此为开头的一般都是适应性的:m.xxx.com

API接口服务安全

分清api接口的类别,一般xml就是web service,而json就是restful。尽量找到wsdl的配置文件,看入口函数以及参数定义,这样子就能够构造数据包(使用postman也行,使用soapui啥的也行),构造完之后就是正常的渗透测试流程了,不太一样就是把这个包的参数都要自己摸索传输,而web传输我们抓包可以模仿一下~

操作系统漏洞发现

学会使用一些工具:Nessus、Nmap、Goby。通过扫描的结果。

  1. 判断操作系统信息,版本、类型等
  2. 判断操作系统开放端口
  3. 查找历史漏洞,冲就完事了

WEB应用漏洞发现

识别WEB应用

看上面是分三类,所以主要是如何去测定这个是什么CMS或者是什么框架开发的。这个测定方法一般有:

Web应用指纹分析思路.png

手工

  1. 查看数据包。

    1. 查看头/源码,头里面可能会有特征值

      • http头。查看http响应报头的X-Powered-By字段来识别,可以通过netcat来识别,使用netcat 127.0.0.1 80对127.0.0.1主机的80端口web服务器框架进行识别。
      • Cookies。一些框架有固定的Cookies名称,这些名称一般情况都不会更改,例如zope3、cakephp、kohanasesson、laravel_session。
      • Html源代码。html源代码中包含注释、js、css等信息,通过访问这些信息来判断和确认cms系统框架。在源代码中常常会包含powered by、bulit upon、running等特征。
    2. 查看请求地址URL,请求地址目录有特征值

      1. wp-content那就是wordpress的
      2. 特殊文件和文件夹
  2. 查看特殊文件(计算md5)

    1. robots.txt文件(例如dedecms的)
    2. favicon.ico、css、logo.ico、js等文件的md5 比对网站类型,通过收集CMS公开代码中的独有文件,这些文件一般轻易不会更改,通过爬虫对这些文件进行抓取并比对md5值,如果一样,则认为该系统匹配
  3. 查看端口:对于端口服务类,详细见下文

工具

  1. whatweb
  2. wapplyze
  3. whatruns

参考:blog.51cto.com/simeon/2115…

整一个实战流程

  1. 首先识别一下这个网站是什么cms【即上面所说的】

    1. 看到了robots.txt,那么就直接往whatweb一搜就好,知道是什么cms之后就去查一下版本
  2. 知道CMS信息就去查历史漏洞,好像没有可以用的历史漏洞,那就看看后台地址是啥,看能不能爆破啥的

    1. 但是这个后台地址已经改掉了
  3. 就去查端口,看有什么应用,对应的漏洞

    1. 发现888、8888端口,那应该是宝塔waf应用,所以就去看看这个漏洞是啥
    2. 有一个漏洞
  4. 啥都没了,那就看看信息/代码泄露,去查看有什么配置信息,可以去看数据库有什么密码之类的

    1. 看到密码,直接登录,OK

APP应用漏洞发现

反编译提取 URL 或抓包获取 URL,进行 WEB 应用测试,如不存在或走其他协议的情况下,需采用网络接口抓包进行数据获取,转至其他协议安全测试!

APP应用.png 0. APP->WEB APP->其他 APP->逆向 0. WEB 抓包,其他协议抓包演示及说明 0. 未逆向层面进行抓包区分各协议测试 0. 逆向层面进行提取 APK 代码层面数据 0. 参考: www.cnblogs.com/L0ading/p/1…

所以渗透主要是:对URL进行抓取,对URL进行协议分类,然后分别进行攻击。可以使用web类攻击,也可以使用其他。

URL提取

Burp

image-20230608214941671.png

然后搜索一下(showall)关键字,像id之类的。

需要注意的是:

由于这些app的链接都能在 电脑 上访问,但是访问之后的请求数据包不一样! 所以,你需要在测试的时候先抓一个安卓数据包,然后在测试的时候(例如xray)改一下http头部。

如果你不用burp,可以在手机端安装:抓包精灵。跟burp的抓包功能差不多。但是功能不好用,不是什么数据都抓。

Apk Analyser

直接把APK放进去扫就行。

xray/awvs+burp联动扫描

设置如下:

  1. 手机端的wifi模块高级设置,设置代理转发到192.168.???.???的端口8888
  2. burp设置代理捕获端口8888,然后设置转发端口6666 image-20230609093308523.png
  3. xray设置代理端口为6666,开启webscan:
 .\xray.exe webscan --listen 127.0.0.1:6666

image-20230609093858920.png

利用

上工具/自己按照web的方法使用

API接口服务漏洞发现

API接口渗透测试是通过用渗透测试的方法测试系统组件间接口的一种测试。接口渗透测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等

20210515173719.png 参考:

  1. blog.csdn.net/dzqxwzoe/ar…
  2. xz.aliyun.com/t/2412
  3. blog.gm7.org/%E4%B8%AA%E…

漏洞挖掘关注点

信息搜集

在 API 渗透中,除了常规的域名、端口、服务器 banner 之类的信息外,API 本身所特有的信息在信息收集时需要关注。举例如下。

  • API 是否存在接口定义规范描述文件?【判断接口类型】如果存在,遵循的规范是什么?SOAP、Open API 2.0、Open API 3.0 还是 Graph QL?
  • API 是依赖什么语言实现的?Java、.NET、PHP、Python、Go 还是其他语言?【构造payload需要用到】
  • API 运行所依赖的组件是什么版本,是否存在已知漏洞?
  • 互联网上是否存在其泄露的 API Key 或证书?
  • API 是否存在多个版本?多个接入端?

还有就是,需要提供两个信息:【最重要】

  1. API地址
  2. 接口文档
  3. 其他的按需要求客户提供,比如接口示例、认证token、sign校验算法等

手工测试

在 API 渗透测试中,手工挖掘往往占有较大的比重。当采用手工挖掘时,以下事项是需要重点关注的。

  • 认证和授权:对于 API 的认证鉴权机制,设计人员和研发人员往往认识不足,有的 API 调用甚至缺少认证与授权机制。比如令牌、HTTP 方法(GET,POST,PUT 和 DELETE 等)在进入服务器之前是否都经过了验证,OAuth 协议使用的正确性,无认证和授权的 API 是否可以任意调用。
  • 输入验证:和其他类型的应用程序一样,对于输入的不可信是应用程序安全的基础,但研发人员常常因疏忽导致对输入缺少有效的验证。比如 XML 实体注入类型的攻击、不同的响应类型 application/json 与 application/xml。
  • 数据编码:包含 JSON 格式的数据,容易导致反序列化漏洞或远程代码执行。
  • API 版本和影子 API:同一个 API 的不同版本或未在 API 规范文件中描述的 API,更容易发现安全漏洞。

测试接口类型:

  1. Webservice接口:走soap协议,请求报文和返回报文都是xml格式
  2. HTTP API接口(常规客户):走HTTP协议,通过路径来区分调用的方法,以RESTful风格为主,请求报文入参有多种形式,返回报文一般为json串,最常见的是get和post方法

接口测试分为web service和API接口测试,WebSocket接口等测试。可以使用该网址进行发包啥的:v7.apipost.cn/apis#/apis/…

WebService

Web Service服务也是一些包装过的接口而已,针对Web Service服务的渗透测试和对常规API渗透测试是一样的、只是,可以使用安全工具来辅助进行:

 WebScarap
 SoapUI
 WCFStorm
 SOA Cleaner
 WSDigger
 wsScanner
 Wfuzz
 RESTClient
 BurpSuite
 WS-Attacker
 ZAP
 Metasploit
 WSDL Analyze

SoapUI NG Pro作为Web Service的测试工具,Burp作为代理、监听SoapUI NG Pro用自己构造的payload报文打Web Service的流量报文,其中可以篡改对应的报文参数实现渗透测试。

image-20230612134657810.png 可以查找:

 inurl:jws?wsdl
 inurl:asmx?wsdl
 inurl:aspx?wsdl
 inurl:ascx?wsdl
 inurl:ashx?wsdl
 inurl:dll?wsdl
 inurl:exe?wsdl
 inurl:php?wsdl
 inurl:pl?wsdl
 inurl:?wsdl
 filetype:jws
 filetype:asmx
 filetype:ascx
 filetype:aspx
 filetype:ashx
 filetype:dll
 filetype:exe
 filetype:php
 filetype:pl
 filetype:wsdl

测试手法

在得到api之后,有这个思路可以参考挖掘:

image-20230612143924759.png

  1. 观察接口命名,采用驼峰命名法,是否存在其他不在接口文档的类似的测试接口,比如getUserInfosgetUserInfoByUid

  2. 这个地方虽然参数是phone,那会不会后端模糊查询输入用户名也可以查询呢

  3. 查询任意用户信息的接口,应该存在鉴权机制

    1. 未授权访问
    2. 针对普通用户,每个人只能查询自己的信息
  4. 手机号进入后端查询用户的信息,肯定会进行数据库查询

    1. 是否可以模糊查询,比如1388888%
    2. 是否存在SQL注入
    3. 参数置空、过长或者输入特殊字符,会不会导致数据库报错抛出异常,获取一些敏感信息

补充知识点(信息的最大化)

前置知识:使用IP访问和使用域名访问有什么区别?

假设:有域名abc.com对应域名123.123.123.123,其建立的文件夹目录为:d:\www\j3fffff

  • 使用域名访问则会访问目录:d:\www\j3fffff
  • 使用IP访问则会访问目录:d:\www

所以如果有文件:d:\www\old.zip,那么使用IP地址可以访问,而使用域名就不行。

IP 端口 web

在如BurpSuite这种代理工具中设定的过滤规则来筛选Web Service请求。比如“.dll?wsdl”、“.ashx?wsdl”、“.exe?wsdl”、“.php?wsdl”等

域名 web

子域名搜集,搜集的站点越多,目标越多,机会越多,可能越多!

子域名搜集不仅仅局限于(子域名挖掘机):

 www.j??sd.com
 bbs.j??sd.com
 old.j??sd.com

还可以 换后缀 看他以前有没有注册过这些域名(可以去www.west.cn/services/do…看看有没有被注册),如果有,那么可能是同一家的,并且挂载了老的系统或者其他业务(可能是有漏洞的):

 www.j??sd.com.cn
 www.j??sd.cn
 www.j??sd.net
 www.j??sd.org

还可以通过注册人反查他注册了什么公司

还可以通过特有信息,例如网站上写着:??乐 ,那就查这个,可能会有其他域名:

 www.j??jy.com.cn

这个跟上面的是不一样的,他是“家园”,而不是“时代”。但是是一家公司的!