安全矩阵

 找回密码
 立即注册
搜索
查看: 2312|回复: 0

干货|Web安全入门基础与思路总结(附思维导图)

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-4-1 22:26:43 | 显示全部楼层 |阅读模式
原文链接:干货|Web安全入门基础与思路总结(附思维导图)

该篇文章主要是写给Web安全入门者的基础与思路


基础HTTP协议网站访问过程
  • 静态页访问

首先用户通过浏览器打开kw0ng.top,此时浏览器会向DNS服务器请求解析,将kw0ng.top转换为IP地址120.78.132.122,接着数据包开始一层层封装,以便于在网络中传输,数据包HTTP Request会被发往120.78.132.122,中间可能经过运营商,过了很多跳路由直到送达到目的地址120.78.132.122,此时120.78.132.122上的Apache正在运行,120.78.132.122经过网络层还原回应用层HTTP协议,送达至Apache,我们一般称Apache这类功能软件为中间件,其他中间件还有Nginx,Tomcat等,Apache将默认的index.html页面读取后作为HTTP Response返回给浏览器,浏览器解析后将页面展现出来。此时就完成了一个静态页面的访问过程。
  • 动态页访问

前期与上相同,一直到Apache中间件,Apache发现请求的是PHP文件,于是将数据包转发至PHP应用,PHP应用接受请求后解析数据包发现存在参数id=1,PHP应用开始计算,如果是需要连接数据库的方法,则将id值组装成SQL语句,向数据库发起查询,最后将结果返回给中间件,此时的结果也是静态内容,因为结果最终都要返回给浏览器,因此无论是PHP还是Python编写的网站,最终浏览器展现的都是HTML,JS与CSS。
代理挖掘漏洞就要分析应用工作过程,而网站作为B/S的架构,HTTP协议是前后端交互的基础协议,因此分析网站交互的HTTP数据包,再从数据包中找寻漏洞是渗透测试的基本手段。而代理就是截获网站前后端HTTP数据包的手段,通过代理我们可以对数据包进行篡改、重放来测试漏洞。目前常用的代理工作方式是通过浏览器插件将流量转发至特定IP端口,而通过特定软件如Burpsuite监听端口来接收插件转发来的流量实现代理浏览器流量。
BurpsuiteHTTPS协议
需要注意的是,浏览器(Client)拿到证书后验证其数字签名具体方式是:根据证书上写的CA签发机构,在浏览器操作系统内置的根证书里找到对应的公钥,用此公钥解开数字签名,得到摘要(digest,证书内容的hash值),据此验证证书的合法性,这也就是为什么使用Burpsuite劫持HTTPS网站需要安装Burpsuite根证书的原因。
HTTPS中间人Burpsuite通过代理方式接收到浏览器HTTPS请求后,返回自身的HTTPS证书,由于我们已经安装好了Burpsuite的根证书,因此浏览器验证证书通过,浏览器开始与Burp协商对称加密密钥,之后Burp便可以解密浏览器发来的HTTPS数据包内容了,而Burp又以作为客户端的方式向真正的HTTPS网站发起HTTPS交互,交互过后此时Burp就拥有了两个对称密钥,一个用来加解密浏览器发来的数据,另一个用来加解密真实HTTPS网站的数据。这样Burp作为中间人就可以完整的看到明文的HTTPS数据包内容了。

APP与小程序
灰盒主动与被动漏洞扫描-发现通用漏洞Nessus与AWVSNessus与AWVS是老牌商业漏洞扫描器,漏洞库非常完善,对于一些历史漏洞,如Windows、Weblogic、Redis、Tomcat等操作系统与组件历史CVE挖掘非常好用。
Nessus使用
第一步-登录

https://ip:8834/
新建扫描

选择扫描模式,一般使用高级扫描即可

输入项目名称与目标IP地址,不要使用http://ip这种,只输入IP地址

一般这就可以直接进行保存了,也可以手动进行其他高级配置

保存后会跳转到主页,这是我们还需最后一步,启动扫描

启动扫描后,就可以进入项目中实时查看扫描结果了
AWVS使用
AWVS主要用来扫描WEB站点
第一步-登录
https://ip:3443/#/login

第二步-扫描
添加单个扫描目标



登录扫描模式:网站不能有图形验证码等
开启Site Login

New新建,AWVS会自动访问我们输入的目标站点

其实这就是内置了个浏览器,我们手动进入登录界面,输入账户密码,并点击登录

登录成功后,点击右下角的Finish即可,之后再点击Scan

Xray虽然主动扫描可以发现很多系统与组件历史漏洞,但是却无法深入WEB应用挖掘,即使AWVS支持输入账号密码扫描,但面对一些需要验证码登录的系统依然束手无策,且主动爬虫技术注定难以全面的发现所有接口,因此我们可以通过代理的方式将所有数据包转发至漏洞扫描器,这样就可以尽可能全面的测试到所有功能点,特别是针对SQL注入、反射型XSS漏洞,效率很高。
第一步-生成证书
xray_windows_amd64.exe genca
安装证书
运行命令之后,将在当前文件夹生成 ca.crt 和 ca.key 两个文件
证书是ca.crt文件,安装后这两个文件保留即可,不要删除
  • 系统安装
  • 火狐浏览器单独安装
  • 第二步-修改配置文件

    配置文件中默认了只能扫描哪些目标,因为我们要将它修改
    打开config.yaml
    允许扫描的域添加个*,不允许扫描的域也可以略做删减

    第三步-运行Xray
    .\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output xray-testphp.html
  • 127.0.0.1:7777为Xray监听的端口
  • xray-testphp.html为输出的报告文件

第四步-配置代理
浏览器使用代理插件将流量转发至Xray,Xray会针对经过的流量进行漏洞扫描

CMS历史漏洞检查漏洞扫描器的POC不一定很健全,如一些小型的CMS的漏洞可能并未收集,我们可以查看该应用使用的框架版本、以及使用的网页编辑器等版本,然后通过搜索引擎来查找是否存在一些公开漏洞payload。

漏洞猜想与验证-发现功能漏洞再进行了主动与被动漏洞扫描之后,一些通用漏洞如MS_17010、SQL注入 往往此时已经被挖掘出来,接下来我们要通过人工测试去挖掘一些扫描器无法发现的漏洞,如存储型XSS、越权、ID遍历等,此时我们一般使用功能点猜想法,便是根据具体功能点去测试漏洞,如一个登录页面,我们可以猜想存在:
  • 用户名枚举
  • 用户密码爆破
  • 万能密码
  • 登录绕过
  • 密码找回逻辑缺陷
    而在灰盒测试中,我们往往有了一个可登录的账户,因此本轮我们重点关注的是一些敏感功能,如文件/头像上传功能,个人信息修改功能,这两个往往会存在任意文件上传与存储型XSS。还有就是要关注一个功能点的数据包实现,功能实现的不严谨往往就会存在逻辑漏洞,如修改密码处,是否需要传递原密码,是否通过传递用户id来作为用户修改密码的身份凭据。


流量审计-查缺补漏在针对功能猜想与验证完后,我们可以对期间产生的流量进行审计,利用Burpsuite的HTTP history去查看浏览器发送过的所有数据包,寻找敏感参数与值,如file=a.png就可能存在任意文件读取,url=http://a.com 可能存在URL跳转或SSRF漏洞,出现userid=1可能存在横向越权漏洞。

权限、配置-寻找配置问题这一轮的测试可在前3轮中穿插,这一轮主要是权限配置,如垂直越权,通过替换cookie来测试是否有健全的权限管控,通过编写CSRF POC来测试服务端对跨站请求伪造是否做了防范措施,通过手动添加Origin头来测试跨域策略配置是否合理。

黑盒当我们拿到一个没有账户密码的网站除了直接漏洞扫描还可尝试测试以下内容。
扫描目录/接口
  • 备份文件泄漏
  • 接口文档泄漏:在一些使用自动化接口文档的WEB应用,开发可能忘记关闭接口文档展示


devtools查看前端代码通过Chrome的devtools我们可以查看到网站的部分html与js代码,而一些这些文件中则会暴露一些接口出来,通过这些接口我们可以尝试测试以下漏洞:
  • 文件读取漏洞:常出现在需要下载插件或客户端的web应用
  • 用户遍历:通过登录失败的提示来遍历用户名,尝试寻找弱口令用户
  • 任意用户密码重置:密码找回逻辑是否合理
  • 未授权访问漏洞:前后端分离模式中,接口基本都可以在js文件中找到,测试是否存在未授权访问


寻找源码
  • 通过前端代码特征在Github中寻找相同代码转为白盒测试。
  • 通过前端代码特征在Fofa等网站寻找相同站点,尝试扫描网站备份文件或弱口令转为灰盒或白盒测试。

白盒
基础信息通过web应用配置文件来收集一下信息:
  • WEB应用使用了什么开发模式、路由规则
  • 使用了哪些组件、组件的密码
  • Token、Key强度是否足够
  • 跨域、HTTP等返回头配置
    可能存在的问题:
  • 使用存在已知漏洞的组件,如Fastjson 1.70以下版本
  • 数据库、Shiro AES Key、JWT Key强度不足
  • 跨域资源共享配置缺陷、未配置HttpOnly、SameSite


访问控制一个WEB应用通常都会设计授权认证体系,这部分主要摸清该应用的访问控制是如何实现的,主流实现方式如下:
  • Shiro
  • Spring Security
  • Java Filter
  • Java Interceptor
    可能存在的问题:
  • 权限配置不严格,导致存在未授权访问漏洞
  • 未做权限分离,导致存在垂直越权漏洞
  • 使用Filter、Interceptor黑名单的方式限制用户访问授权接口,可能存在权限绕过漏洞


常规漏洞通过检测相关函数名或特征可以迅速发现以下漏洞:
  • SQL注入
  • 文件处理
  • 命令执行
  • 反序列化
  • URL重定向
  • SSRF
  • XXE
    一些特征:

SQL注入:

寻找拼接SQL语句的方法、查看Mybatis的xml中是否有使用${}的,且追溯后参数可被用户控制
grep -rn "\${" *
文件处理:

FileInputStream
FileOupputStream
RandomAccessFile
FileUtils
AsynchronousFileChannel
Files
FileUtil
有时还可以通过HTTP返回头快速定位文件下载方法
Content-Disposition
命令执行:

Runtime.exec
ProcessBuilder.start
GroovyShell.evaluate
反序列化:

ObjectInputStream.readObject
ObjectInputStream.readUnshared
XMLDecoder.readObject
Yaml.load
XStream.fromXML
ObjectMapper.readValue
JSON.parseObject
URL重定向:

Redirect
SSRF:

HttpClient.execute
HttpClient.executeMethod
HttpURLConnection.connect
HttpURLConnection.getInputStream
URL.openStream
XXE:

判断使用哪种XML解析器
搜索是否有禁用外部实体配置(修护部分有具体代码)
是否有外部输入点进行解析
业务逻辑虽然前面已经能发现大部分常规漏洞,但一些逻辑漏洞是不具有很明显的特征的,还是需要我们去关注下重要的业务逻辑,如密码修改、密码重置设计的是否合理,查看用户信息是否使用了一些可遍历的User_id参数。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 00:50 , Processed in 0.015568 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表